<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:media="http://search.yahoo.com/mrss/"
		>

<channel>
	<title>Hackaday</title>
	<atom:link href="https://hackaday.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://hackaday.com</link>
	<description>Fresh hacks every day</description>
	<lastBuildDate>Wed, 22 Jul 2026 18:04:07 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.2</generator>
<site xmlns="com-wordpress:feed-additions:1">156670177</site>	<item>
		<title>FLOSS Weekly Episode 876: There Is No Money Fairy</title>
		<link>https://hackaday.com/2026/07/22/floss-weekly-episode-876-there-is-no-money-fairy/</link>
					<comments>https://hackaday.com/2026/07/22/floss-weekly-episode-876-there-is-no-money-fairy/#respond</comments>
		
		<dc:creator><![CDATA[Jonathan Bennett]]></dc:creator>
		<pubDate>Wed, 22 Jul 2026 20:00:08 +0000</pubDate>
				<category><![CDATA[Hackaday Columns]]></category>
		<category><![CDATA[Podcasts]]></category>
		<category><![CDATA[FLOSS Weekly]]></category>
		<guid isPermaLink="false">https://hackaday.com/?p=1130015&#038;preview=true&#038;preview_id=1130015</guid>

					<description><![CDATA[<div><img width="800" height="484" src="https://hackaday.com/wp-content/uploads/2021/06/Pipewire.jpg?w=800" class="attachment-large size-large wp-post-image" alt="" style="margin: 0 auto; margin-bottom: 15px;" decoding="async" fetchpriority="high" srcset="https://hackaday.com/wp-content/uploads/2021/06/Pipewire.jpg 3000w, https://hackaday.com/wp-content/uploads/2021/06/Pipewire.jpg?resize=250,151 250w, https://hackaday.com/wp-content/uploads/2021/06/Pipewire.jpg?resize=400,242 400w, https://hackaday.com/wp-content/uploads/2021/06/Pipewire.jpg?resize=800,484 800w, https://hackaday.com/wp-content/uploads/2021/06/Pipewire.jpg?resize=1536,929 1536w, https://hackaday.com/wp-content/uploads/2021/06/Pipewire.jpg?resize=2048,1239 2048w" sizes="(max-width: 800px) 100vw, 800px" data-attachment-id="483960" data-permalink="https://hackaday.com/pipewire-2/" data-orig-file="https://hackaday.com/wp-content/uploads/2021/06/Pipewire.jpg" data-orig-size="3000,1815" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Pipewire" data-image-description="" data-image-caption="" data-large-file="https://hackaday.com/wp-content/uploads/2021/06/Pipewire.jpg?w=800" /></div>This week Jonathan chats with Michael Meeks about Collabora! What&#8217;s the origin story in this consulting company, why do they have an outstanding office suite, and where is the world <a href="https://hackaday.com/2026/07/22/floss-weekly-episode-876-there-is-no-money-fairy/" class="read-more">&#8230;read more</a>]]></description>
										<content:encoded><![CDATA[<div><img width="800" height="484" src="https://hackaday.com/wp-content/uploads/2021/06/Pipewire.jpg?w=800" class="attachment-large size-large wp-post-image" alt="" style="margin: 0 auto; margin-bottom: 15px;" decoding="async" loading="lazy" srcset="https://hackaday.com/wp-content/uploads/2021/06/Pipewire.jpg 3000w, https://hackaday.com/wp-content/uploads/2021/06/Pipewire.jpg?resize=250,151 250w, https://hackaday.com/wp-content/uploads/2021/06/Pipewire.jpg?resize=400,242 400w, https://hackaday.com/wp-content/uploads/2021/06/Pipewire.jpg?resize=800,484 800w, https://hackaday.com/wp-content/uploads/2021/06/Pipewire.jpg?resize=1536,929 1536w, https://hackaday.com/wp-content/uploads/2021/06/Pipewire.jpg?resize=2048,1239 2048w" sizes="auto, (max-width: 800px) 100vw, 800px" data-attachment-id="483960" data-permalink="https://hackaday.com/pipewire-2/" data-orig-file="https://hackaday.com/wp-content/uploads/2021/06/Pipewire.jpg" data-orig-size="3000,1815" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Pipewire" data-image-description="" data-image-caption="" data-large-file="https://hackaday.com/wp-content/uploads/2021/06/Pipewire.jpg?w=800" /></div><p>This week <a href="https://x.com/jp_bennett" target="_blank">Jonathan</a> chats with Michael Meeks about Collabora! What&#8217;s the origin story in this consulting company, why do they have an outstanding office suite, and where is the world headed to accomplish digital sovereignty? Watch to find out!</p>
<p><span id="more-1130015"></span></p>
<ul>
<li>Collabora Productivity &#8211; <a href="https://www.collaboraonline.com/" rel="nofollow" target="_blank">https://www.collaboraonline.com/</a></li>
<li>Michael&#8217;s person blog &#8211; <a href="https://meeksfamily.uk/~michael/" rel="nofollow" target="_blank">https://meeksfamily.uk/~michael/</a></li>
<li>Michael&#8217;s comic strip &#8211; &#8216;The Open Road to Freedom&#8217; (TOTF) <a href="https://www.collaboraonline.com/torf-index/" rel="nofollow" target="_blank">https://www.collaboraonline.com/torf-index/</a></li>
</ul>
<p><iframe title="FLOSS 876 - There Is No Money Fairy" width="800" height="450" src="https://www.youtube.com/embed/m8kFVIyYWjg?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></p>
<p>Did you know you can watch the live recording of the show right on <a href="https://www.youtube.com/@FLOSSWeekly" target="_blank">our YouTube Channel</a>? Have someone you&#8217;d like us to interview? Let us know, or have the guest contact us! <a href="https://docs.google.com/spreadsheets/d/1znEmwiDRjujujRaL_AmJbZgahG2z9EQuLs8C3U64wcI/edit?gid=0#gid=0" target="_blank">Take a look at the schedule here</a>.</p>
<p><iframe style="border-image: initial; border: medium none currentcolor;" title="Embed Player" src="https://play.libsyn.com/embed/episode/id/42184305/height/192/theme/modern/size/large/thumbnail/yes/custom-color/fcab1c/time-start/00:00:00/hide-playlist/yes/download/yes/font-color/271b04" width="100%" height="192" scrolling="no" allowfullscreen="allowfullscreen"></iframe></p>
<p><a href="https://traffic.libsyn.com/forcedn/b27a1a7a-dbb9-4922-ac3e-601e2d6ca1e1/FLOSS-876.mp3" target="_blank">Direct Download</a> in DRM-free MP3.</p>
<p>If you&#8217;d rather read along, <a href="http://flossweekly.libsyn.com/episode-876-transcript" target="_blank">here&#8217;s the transcript for this week&#8217;s episode</a>.</p>
<div id="sidebar-mobile-1" class="widget_text widget widget_custom_html amr_widget"><div class="textwidget custom-html-widget"><h3>Places to follow the FLOSS Weekly Podcast:</h3>

<ul>
	<!--  <li><a href="">Google Podcasts</a></li>  -->
	<!-- <li><a href="">iTunes</a></li>  -->
	<li><a href="https://feeds.libsyn.com/499093/spotify" target="_blank">Spotify</a></li>
	<!--  <li><a href="">Stitcher</a></li>  -->
	<li><a href="https://feeds.libsyn.com/499093/rss" target="_blank">RSS</a></li>
		<!-- <li><a href="">YouTube</a></li>  -->
</ul></div></div>
<hr />
<p>Theme music: &#8220;Newer Wave&#8221; Kevin MacLeod (incompetech.com)</p>
<p>Licensed under <a href="https://creativecommons.org/licenses/by/4.0/" target="_blank">Creative Commons: By Attribution 4.0 License</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://hackaday.com/2026/07/22/floss-weekly-episode-876-there-is-no-money-fairy/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1130015</post-id>
		<media:thumbnail url="https://hackaday.com/wp-content/uploads/2021/06/Pipewire.jpg" />
		<media:content url="https://hackaday.com/wp-content/uploads/2021/06/Pipewire.jpg" medium="image">
			<media:title type="html">Pipewire</media:title>
		</media:content>
	</item>
		<item>
		<title>The Need for Speed: Internet Speed Measurement (or DIY?)</title>
		<link>https://hackaday.com/2026/07/22/the-need-for-speed-internet-speed-measurement-or-diy/</link>
					<comments>https://hackaday.com/2026/07/22/the-need-for-speed-internet-speed-measurement-or-diy/#comments</comments>
		
		<dc:creator><![CDATA[Al Williams]]></dc:creator>
		<pubDate>Wed, 22 Jul 2026 18:00:56 +0000</pubDate>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Interest]]></category>
		<category><![CDATA[internet hacks]]></category>
		<category><![CDATA[Network Hacks]]></category>
		<category><![CDATA[Cloudflare]]></category>
		<category><![CDATA[internet speed test]]></category>
		<category><![CDATA[iperf]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[ookla]]></category>
		<category><![CDATA[openspeedtest]]></category>
		<guid isPermaLink="false">https://hackaday.com/?p=1129854</guid>

					<description><![CDATA[<div><img width="800" height="484" src="https://hackaday.com/wp-content/uploads/2026/07/flash.png?w=800" class="attachment-large size-large wp-post-image" alt="" style="margin: 0 auto; margin-bottom: 15px;" decoding="async" loading="lazy" srcset="https://hackaday.com/wp-content/uploads/2026/07/flash.png 3000w, https://hackaday.com/wp-content/uploads/2026/07/flash.png?resize=250,151 250w, https://hackaday.com/wp-content/uploads/2026/07/flash.png?resize=400,242 400w, https://hackaday.com/wp-content/uploads/2026/07/flash.png?resize=800,484 800w, https://hackaday.com/wp-content/uploads/2026/07/flash.png?resize=1536,929 1536w, https://hackaday.com/wp-content/uploads/2026/07/flash.png?resize=2048,1239 2048w" sizes="auto, (max-width: 800px) 100vw, 800px" data-attachment-id="1130023" data-permalink="https://hackaday.com/2026/07/22/the-need-for-speed-internet-speed-measurement-or-diy/flash-10/" data-orig-file="https://hackaday.com/wp-content/uploads/2026/07/flash.png" data-orig-size="3000,1815" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="flash" data-image-description="" data-image-caption="" data-large-file="https://hackaday.com/wp-content/uploads/2026/07/flash.png?w=800" /></div>Car enthusiasts want to know how quickly they can make a quarter mile. Weightlifters are forever trying to add one more plate to the bar. Internet denizens have their own <a href="https://hackaday.com/2026/07/22/the-need-for-speed-internet-speed-measurement-or-diy/" class="read-more">&#8230;read more</a>]]></description>
										<content:encoded><![CDATA[<div><img width="800" height="484" src="https://hackaday.com/wp-content/uploads/2026/07/flash.png?w=800" class="attachment-large size-large wp-post-image" alt="" style="margin: 0 auto; margin-bottom: 15px;" decoding="async" loading="lazy" srcset="https://hackaday.com/wp-content/uploads/2026/07/flash.png 3000w, https://hackaday.com/wp-content/uploads/2026/07/flash.png?resize=250,151 250w, https://hackaday.com/wp-content/uploads/2026/07/flash.png?resize=400,242 400w, https://hackaday.com/wp-content/uploads/2026/07/flash.png?resize=800,484 800w, https://hackaday.com/wp-content/uploads/2026/07/flash.png?resize=1536,929 1536w, https://hackaday.com/wp-content/uploads/2026/07/flash.png?resize=2048,1239 2048w" sizes="auto, (max-width: 800px) 100vw, 800px" data-attachment-id="1130023" data-permalink="https://hackaday.com/2026/07/22/the-need-for-speed-internet-speed-measurement-or-diy/flash-10/" data-orig-file="https://hackaday.com/wp-content/uploads/2026/07/flash.png" data-orig-size="3000,1815" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="flash" data-image-description="" data-image-caption="" data-large-file="https://hackaday.com/wp-content/uploads/2026/07/flash.png?w=800" /></div><p>Car enthusiasts want to know how quickly they can make a quarter mile. Weightlifters are forever trying to add one more plate to the bar. Internet denizens have their own favorite number to brag about: the result from a speed test.</p>
<p>The ritual is familiar. Close a few browser tabs, click the big “Go” button, and watch the needle climb. Perhaps you pay for gigabit service and see 940 megabits per second, which produces a satisfied nod. Perhaps you see 299 megabits and begin obsessing over network hardware. But before you get too excited either way, try another test. There is a fair chance it will give you a different answer.</p>
<p>That does not necessarily mean one test is lying. “Internet speed” is not a single physical quantity waiting to be measured. A speed test measures the performance of a particular device, over a particular local connection, through a particular ISP route, to a particular server, at a particular time using a particular test method. Change any of those things and the answer can change too.<span id="more-1129854"></span></p>
<h2>The Usual Suspects</h2>
<figure id="attachment_1129878" aria-describedby="caption-attachment-1129878" style="width: 323px" class="wp-caption alignright"><a href="https://hackaday.com/wp-content/uploads/2026/07/ookla.png"><img loading="lazy" decoding="async" data-attachment-id="1129878" data-permalink="https://hackaday.com/2026/07/22/the-need-for-speed-internet-speed-measurement-or-diy/ookla/" data-orig-file="https://hackaday.com/wp-content/uploads/2026/07/ookla.png" data-orig-size="469,581" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="ookla" data-image-description="" data-image-caption="&lt;p&gt;Ookla on a WiFi connection to a 1GB network. The limiting factor is the 802.11s WiFi link between the computer and the router.&lt;/p&gt;
" data-large-file="https://hackaday.com/wp-content/uploads/2026/07/ookla.png?w=469" class="size-medium wp-image-1129878" src="https://hackaday.com/wp-content/uploads/2026/07/ookla.png?w=323" alt="" width="323" height="400" srcset="https://hackaday.com/wp-content/uploads/2026/07/ookla.png 469w, https://hackaday.com/wp-content/uploads/2026/07/ookla.png?resize=202,250 202w, https://hackaday.com/wp-content/uploads/2026/07/ookla.png?resize=323,400 323w" sizes="auto, (max-width: 323px) 100vw, 323px" /></a><figcaption id="caption-attachment-1129878" class="wp-caption-text">Ookla on a WiFi connection to a 1Gbit Ethernet network. The limiting factor is the 802.11s WiFi link between the computer&#8217;s Ethernet port and the router&#8217;s.</figcaption></figure>
<p>Speedtest by <a href="https://www.speedtest.net/" target="_blank">Ookla</a> is probably the best-known test. It selects a nearby server, although you can choose another. It attempts to saturate the connection with multiple simultaneous transfers. That makes it good at answering the question most consumers are asking: approximately how much aggregate bandwidth can this Internet connection deliver?</p>
<p>Running several connections matters. A single TCP connection must gradually increase its sending rate while reacting to round-trip time, packet loss, receive-window limits, and congestion-control behavior. On a high-bandwidth or high-latency path, one connection may not fill the available pipe. Several parallel connections can ramp up independently and make it easier to reach the link’s aggregate capacity. That number is valid, but it represents something like a busy household, a large segmented download, or several applications operating at once. It does not necessarily predict the speed of one file transfer from one distant server.</p>
<p>Google’s built-in search speed test (search &#8220;speed test&#8221;) uses Measurement Lab’s Network Diagnostic Tool, or NDT. M-Lab describes NDT as a single-stream measurement of bulk-transport capacity. That makes it an interesting counterpoint to Ookla. A single flow may expose latency, loss, or TCP-window limitations that a multi-stream test can partially conceal. You can also use <a href="https://speed.measurementlab.net/" target="_blank">M-Lab&#8217;s own speed test</a> directly.</p>
<p>While you may get similar numbers between the two approaches, you also may not get similar numbers, especially on high-latency connections where Ookla&#8217;s multiple streams will help hide latency.</p>
<p><a href="https://fast.com" target="_blank">Netflix’s Fast.com</a> is deliberately simple. Open the page, and it immediately begins transferring data from Netflix infrastructure. By default it emphasizes download performance, since its original purpose was to answer a practical question: can this connection deliver Netflix video properly? Selecting “Show more info” adds upload speed and both unloaded and loaded latency.</p>
<figure id="attachment_1129882" aria-describedby="caption-attachment-1129882" style="width: 400px" class="wp-caption alignleft"><a href="https://hackaday.com/wp-content/uploads/2026/07/fast.png"><img loading="lazy" decoding="async" data-attachment-id="1129882" data-permalink="https://hackaday.com/2026/07/22/the-need-for-speed-internet-speed-measurement-or-diy/fast-3/" data-orig-file="https://hackaday.com/wp-content/uploads/2026/07/fast.png" data-orig-size="1242,731" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="fast" data-image-description="" data-image-caption="&lt;p&gt;Fast is barebones and measures speed to NetFlix.&lt;/p&gt;
" data-large-file="https://hackaday.com/wp-content/uploads/2026/07/fast.png?w=800" class="size-medium wp-image-1129882" src="https://hackaday.com/wp-content/uploads/2026/07/fast.png?w=400" alt="" width="400" height="235" srcset="https://hackaday.com/wp-content/uploads/2026/07/fast.png 1242w, https://hackaday.com/wp-content/uploads/2026/07/fast.png?resize=250,147 250w, https://hackaday.com/wp-content/uploads/2026/07/fast.png?resize=400,235 400w, https://hackaday.com/wp-content/uploads/2026/07/fast.png?resize=800,471 800w" sizes="auto, (max-width: 400px) 100vw, 400px" /></a><figcaption id="caption-attachment-1129882" class="wp-caption-text">Fast is barebones and measures speed to Netflix.</figcaption></figure>
<p>The use of Netflix servers is significant. Fast.com measures the route between you and Netflix’s content-delivery network, while Ookla may test against a server operated by your ISP only a few network hops away. A superb Ookla result and a poor Fast.com result do not prove deliberate throttling, but they do tell you that the destinations &#8212; or the routes to them &#8212; are behaving differently.</p>
<p>Cloudflare offers two related tests. Its<a href="https://radar.cloudflare.com/speedtest" target="_blank"> Radar Network Quality Test</a> provides a quick summary, while <a href="https://speed.cloudflare.com/" target="_blank">speed.cloudflare.com</a>  gives an extremely detailed breakdown. The latter reports download and upload throughput, idle and loaded latency, jitter, packet loss, server location, and application-oriented quality estimates.</p>
<figure id="attachment_1129918" aria-describedby="caption-attachment-1129918" style="width: 400px" class="wp-caption alignright"><a href="https://hackaday.com/wp-content/uploads/2026/07/cloud.png" target="_blank"><img loading="lazy" decoding="async" data-attachment-id="1129918" data-permalink="https://hackaday.com/2026/07/22/the-need-for-speed-internet-speed-measurement-or-diy/cloud-14/" data-orig-file="https://hackaday.com/wp-content/uploads/2026/07/cloud.png" data-orig-size="1965,1070" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="cloud" data-image-description="" data-image-caption="" data-large-file="https://hackaday.com/wp-content/uploads/2026/07/cloud.png?w=800" class="wp-image-1129918 size-medium" src="https://hackaday.com/wp-content/uploads/2026/07/cloud.png?w=400" alt="" width="400" height="218" srcset="https://hackaday.com/wp-content/uploads/2026/07/cloud.png 1965w, https://hackaday.com/wp-content/uploads/2026/07/cloud.png?resize=250,136 250w, https://hackaday.com/wp-content/uploads/2026/07/cloud.png?resize=400,218 400w, https://hackaday.com/wp-content/uploads/2026/07/cloud.png?resize=800,436 800w, https://hackaday.com/wp-content/uploads/2026/07/cloud.png?resize=1536,836 1536w" sizes="auto, (max-width: 400px) 100vw, 400px" /></a><figcaption id="caption-attachment-1129918" class="wp-caption-text">Cloudflare provides a wealth of stats and graphs.</figcaption></figure>
<p>Loaded latency is especially useful. An otherwise fast connection can become miserable when a large upload or download fills an oversized queue in the modem or router. Your idle ping might be 12 milliseconds, but under load it may jump to several hundred milliseconds. That is the classic symptom usually called bufferbloat.</p>
<p>If you want more options, there is <a href="http://testmy.net" target="_blank">testmy.net</a>, which allows you to test upload and download speeds separately, and <a href="http://speedof.me" target="_blank">speedof.me</a>, which keeps a history for you, among others. It isn&#8217;t always obvious which ones are measuring a single connection vs multiple ones, so you may have to dig through whatever documentation you can find.</p>
<h2>Your WiFi Is Part of the Test</h2>
<p>A browser speed test cannot automatically tell you what&#8217;s hurting your speed. A laptop connected through marginal WiFi may report 180 megabits per second even though the router has a flawless gigabit Internet connection.</p>
<p>In fact, once incoming Internet service reaches several hundred megabits per second, WiFi is frequently the limiting factor. The link rate displayed by the operating system is not the same thing as usable throughput. Wireless protocols have framing overhead, acknowledgments, contention, retransmissions, and half-duplex operation. The advertised 866, 1200, or 2400 megabit link rate is therefore not a promise that application data will move at that rate.</p>
<p>The numbers printed on WiFi boxes add another layer of optimism. A router sold as “AC1800,” for example, does not provide an 1800-megabit connection to one device. The figure is normally the sum of the maximum advertised PHY rates on separate radios &#8212; perhaps 1300 Mb/s on 5 GHz plus 450 Mb/s on 2.4 GHz &#8212; with some rounding for marketing. A conventional WiFi client connects to one band at a time, so it cannot combine those rates. The total is better understood as the router’s theoretical aggregate capacity while serving multiple devices across both bands. Even then, protocol overhead, contention, signal quality, and client limitations make actual data throughput considerably lower. Newer WiFi 7 equipment can sometimes combine links using Multi-Link Operation, but that exception does not make the old ACxxxx arithmetic any less misleading.</p>
<p>WiFi also uses shared airtime. Devices on the same channel &#8212; including neighboring access points that can hear one another &#8212; must contend for opportunities to transmit. A slow or distant client takes longer to send a given amount of data and can consume disproportionate airtime while doing so. Modern access points may provide airtime fairness and other mitigations. One old device does not invariably drag every client down to its rate, but it can still reduce the capacity available to the rest of the network. Interference has a similar effect. A weak signal, a crowded channel, microwave noise, or an overlapping neighboring network causes frames to be delayed or retransmitted. Those retries consume airtime without delivering additional data.</p>
<p>Repeaters and wireless mesh backhaul add another complication. A simple same-channel repeater must receive each packet and then transmit it again over the same shared medium. In the worst case, each repeated hop can roughly halve the available throughput. Modern tri-band mesh systems can avoid much of that penalty by using a dedicated backhaul radio, and Ethernet backhaul avoids it almost entirely.</p>
<p>This means it is entirely reasonable to buy gigabit Internet service and obtain only 300 or 500 megabits per second from a WiFi laptop. Whether that represents a problem depends on the client, radio band, channel width, signal level, backhaul, and local RF environment.</p>
<p>For a meaningful ISP test, begin with a computer connected directly to the router by Ethernet. Stop large transfers and temporarily disable any VPN. Record the chosen server, latency, upload speed, and download speed rather than preserving only the most flattering number. Then run the same tests over WiFi. The difference is an approximate measurement of what the wireless portion of the network is costing you.</p>
<h2>Remove the Internet From the Experiment</h2>
<figure id="attachment_1129880" aria-describedby="caption-attachment-1129880" style="width: 400px" class="wp-caption alignright"><a href="https://hackaday.com/wp-content/uploads/2026/07/ost.png"><img loading="lazy" decoding="async" data-attachment-id="1129880" data-permalink="https://hackaday.com/2026/07/22/the-need-for-speed-internet-speed-measurement-or-diy/ost/" data-orig-file="https://hackaday.com/wp-content/uploads/2026/07/ost.png" data-orig-size="1242,731" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="ost" data-image-description="" data-image-caption="&lt;p&gt;OpenSpeedTest running on an OpenWRT node.&lt;/p&gt;
" data-large-file="https://hackaday.com/wp-content/uploads/2026/07/ost.png?w=800" class="size-medium wp-image-1129880" src="https://hackaday.com/wp-content/uploads/2026/07/ost.png?w=400" alt="" width="400" height="235" srcset="https://hackaday.com/wp-content/uploads/2026/07/ost.png 1242w, https://hackaday.com/wp-content/uploads/2026/07/ost.png?resize=250,147 250w, https://hackaday.com/wp-content/uploads/2026/07/ost.png?resize=400,235 400w, https://hackaday.com/wp-content/uploads/2026/07/ost.png?resize=800,471 800w" sizes="auto, (max-width: 400px) 100vw, 400px" /></a><figcaption id="caption-attachment-1129880" class="wp-caption-text">OpenSpeedTest running on an OpenWRT node.</figcaption></figure>
<p>Better still, remove the ISP from the test completely. <a href="https://openspeedtest.com/" target="_blank">OpenSpeedTest</a> is a self-hostable, browser-based test. Run its server on a wired computer, NAS, or container, then visit it from laptops, phones, and tablets around the house. Because the traffic remains on your LAN, a slow result points toward WiFi, switching, cabling, or the client rather than the Internet connection.</p>
<p>It is possible to run this on the uhttpd server used with OpenWRT, although you&#8217;ll need to coax it to measure upload speeds since the server can&#8217;t handle the default method. The trick is to <a href="https://gist.github.com/wd5gnr/09f3b03991db0f7c143bfbc7f0e2292b" target="_blank">create a CGI script</a> that accepts a large amount of data successfully and then configure uhttpd to run that.</p>
<p>A browser-based local test is convenient, but for serious diagnosis it is hard to beat iperf3, the client/server tool we recently used while testing mesh routers. On one machine (say, 192.168.1.100), start the server:</p>
<pre>iperf3 -s</pre>
<p>From another machine, run:</p>
<pre>iperf3 -c 192.168.1.100</pre>
<p>By default, iperf3 uses one TCP connection. Add -P 4 to try four parallel streams, or -R to reverse the direction so that the server sends and the client receives. Those variations can tell you something. If four streams are much faster than one, the network may have enough aggregate capacity but a single TCP flow is being limited by latency, loss, window growth, CPU performance, or offload behavior. If the reverse test is much faster, examine the weaker machine’s transmit path, drivers, antennas, or CPU.</p>
<p>iperf3 can also generate UDP traffic at a specified rate and report packet loss and jitter. That is often more informative for evaluating a wireless link than merely chasing the largest TCP number.</p>
<h2>Can Linux Make It Faster?</h2>
<p>Linux offers an impressive array of network tuning knobs, which naturally tempts us to turn them. But first, you need to understand what needs tweaking.</p>
<p>Check the negotiated Ethernet rate and interface counters:</p>
<pre>ethtool eth0
ip -s link show eth0</pre>
<p>A gigabit adapter that has negotiated 100 megabits per second usually has a cabling, connector, or switch-port problem. Increasing TCP buffers will not repair it. Rising interface errors and drops point toward a physical, driver, or congestion problem. TCP retransmits (view with ss -ti) may indicate loss elsewhere on the path.</p>
<p>You can inspect the active queue discipline with:</p>
<pre>tc qdisc show</pre>
<p>Linux supports queue disciplines such as fq_codel, which combines per-flow queueing with active queue management. It attempts to prevent one large transfer from building an enormous queue and delaying unrelated interactive packets. The kernel documentation specifically lists fq_codel as a sensible queue discipline that works without extensive configuration.</p>
<p>It can be selected as the default for newly created interfaces with:</p>
<pre>sudo sysctl -w net.core.default_qdisc=fq_codel</pre>
<p>That may improve queueing on traffic leaving the Linux machine. It does not, however, fix a large queue in the cable modem or Internet router. Queue management must be applied at the bottleneck. If the ISP link is limited to 20 megabits upstream, controlling a queue on a gigabit Ethernet interface after it has already handed packets to the router is too late.</p>
<p>For a home connection, the most effective bufferbloat treatment is usually Smart Queue Management on the router. OpenWrt’s SQM system supports both fq_codel and CAKE. CAKE generally provides better performance. However, fq_codel requires less CPU overhead.</p>
<p>High-latency paths introduce a different problem. TCP must keep enough data in flight to fill the bandwidth-delay product. Modern Linux generally autotunes TCP buffers, so the old advice to assign enormous fixed values to tcp_rmem and tcp_wmem is less universally useful than it once was. Before changing them, use ss -ti during a transfer and look for retransmissions, round-trip time, congestion-window size, and whether the receiver window is actually limiting the connection.</p>
<p>Linux also supports selectable TCP congestion-control algorithms:</p>
<pre>sysctl net.ipv4.tcp_available_congestion_control
sysctl net.ipv4.tcp_congestion_control</pre>
<p>Algorithms such as BBR can improve throughput and queue behavior on some long-distance or lossy paths. But changing the algorithm affects connections sent by that Linux machine; it does not control the remote speed-test server, repair poor WiFi, or eliminate a queue in the router. Congestion-control tuning is therefore a useful experiment for a server, VPN endpoint, or long-haul transfer machine &#8212; not a universal solution to slow networking.</p>
<p>Finally, inspect hardware offload features when a Linux system cannot keep up with a fast LAN:</p>
<pre>ethtool -k eth0</pre>
<p>Advanced network tuning is a bit beyond the scope of this post, but there are <a href="https://ntk148v.github.io/posts/linux-network-performance-ultimate-guide/" target="_blank">plenty of roadmaps down this rabbit hole</a>.</p>
<h2>The Lesson</h2>
<p>The lesson here is that there is no universally correct speed-test result. Ookla tests how effectively multiple transfers can fill a route to one of its servers. M-Lab examines a single bulk flow. Fast.com tests the path to Netflix. Cloudflare pays unusual attention to latency under load and overall connection quality. OpenSpeedTest and iperf3 can determine whether the Internet connection is even the problem.</p>
<p>Run enough tests, and you will eventually obtain a number worth bragging about. Run the right tests, though, and you may find ways to truly increase real-world performance. If you want to chase that extra 1 kbit per second speed, be our guest &#8212; we know how it is. But the truth is that if the Internet is doing what you want it to do, then it is fast enough.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hackaday.com/2026/07/22/the-need-for-speed-internet-speed-measurement-or-diy/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1129854</post-id>
		<media:thumbnail url="https://hackaday.com/wp-content/uploads/2026/07/flash.png" />
		<media:content url="https://hackaday.com/wp-content/uploads/2026/07/flash.png" medium="image">
			<media:title type="html">flash</media:title>
		</media:content>

		<media:content url="https://hackaday.com/wp-content/uploads/2026/07/ookla.png?w=323" medium="image" />

		<media:content url="https://hackaday.com/wp-content/uploads/2026/07/fast.png?w=400" medium="image" />

		<media:content url="https://hackaday.com/wp-content/uploads/2026/07/cloud.png?w=400" medium="image" />

		<media:content url="https://hackaday.com/wp-content/uploads/2026/07/ost.png?w=400" medium="image" />
	</item>
		<item>
		<title>Dress Up Your YubiKey With This Web-Based Tool</title>
		<link>https://hackaday.com/2026/07/22/dress-up-your-yubikey-with-this-web-based-tool/</link>
					<comments>https://hackaday.com/2026/07/22/dress-up-your-yubikey-with-this-web-based-tool/#comments</comments>
		
		<dc:creator><![CDATA[Tom Nardi]]></dc:creator>
		<pubDate>Wed, 22 Jul 2026 15:30:07 +0000</pubDate>
				<category><![CDATA[Art]]></category>
		<category><![CDATA[Software Hacks]]></category>
		<category><![CDATA[laser engraving]]></category>
		<category><![CDATA[UV printer]]></category>
		<category><![CDATA[web based]]></category>
		<category><![CDATA[Yubikey]]></category>
		<guid isPermaLink="false">https://hackaday.com/?p=1129929</guid>

					<description><![CDATA[<div><img width="800" height="406" src="https://hackaday.com/wp-content/uploads/2026/07/yubiart_feat.png?w=800" class="attachment-large size-large wp-post-image" alt="" style="margin: 0 auto; margin-bottom: 15px;" decoding="async" loading="lazy" srcset="https://hackaday.com/wp-content/uploads/2026/07/yubiart_feat.png 1280w, https://hackaday.com/wp-content/uploads/2026/07/yubiart_feat.png?resize=250,127 250w, https://hackaday.com/wp-content/uploads/2026/07/yubiart_feat.png?resize=400,203 400w, https://hackaday.com/wp-content/uploads/2026/07/yubiart_feat.png?resize=800,406 800w" sizes="auto, (max-width: 800px) 100vw, 800px" data-attachment-id="1129932" data-permalink="https://hackaday.com/2026/07/22/dress-up-your-yubikey-with-this-web-based-tool/yubiart_feat/" data-orig-file="https://hackaday.com/wp-content/uploads/2026/07/yubiart_feat.png" data-orig-size="1280,650" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="yubiart_feat" data-image-description="" data-image-caption="" data-large-file="https://hackaday.com/wp-content/uploads/2026/07/yubiart_feat.png?w=800" /></div>The combination of hardware required to make use of this project is specific enough that we imagine only a relatively limited number of readers will actually be able to try <a href="https://hackaday.com/2026/07/22/dress-up-your-yubikey-with-this-web-based-tool/" class="read-more">&#8230;read more</a>]]></description>
										<content:encoded><![CDATA[<div><img width="800" height="406" src="https://hackaday.com/wp-content/uploads/2026/07/yubiart_feat.png?w=800" class="attachment-large size-large wp-post-image" alt="" style="margin: 0 auto; margin-bottom: 15px;" decoding="async" loading="lazy" srcset="https://hackaday.com/wp-content/uploads/2026/07/yubiart_feat.png 1280w, https://hackaday.com/wp-content/uploads/2026/07/yubiart_feat.png?resize=250,127 250w, https://hackaday.com/wp-content/uploads/2026/07/yubiart_feat.png?resize=400,203 400w, https://hackaday.com/wp-content/uploads/2026/07/yubiart_feat.png?resize=800,406 800w" sizes="auto, (max-width: 800px) 100vw, 800px" data-attachment-id="1129932" data-permalink="https://hackaday.com/2026/07/22/dress-up-your-yubikey-with-this-web-based-tool/yubiart_feat/" data-orig-file="https://hackaday.com/wp-content/uploads/2026/07/yubiart_feat.png" data-orig-size="1280,650" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="yubiart_feat" data-image-description="" data-image-caption="" data-large-file="https://hackaday.com/wp-content/uploads/2026/07/yubiart_feat.png?w=800" /></div><p>The combination of hardware required to make use of this project is specific enough that we imagine only a relatively limited number of readers will actually be able to try it out. But if you <em>do</em> happen to own a YubiKey and either a laser engraver capable of marking it or a fancy UV printer, <a href="https://github.com/madeinoz67/yubikey-engraver" target="_blank">[madeinoz67] has put together an awesome tool</a> for adding some visual flair to your two-factor authentication device.</p>
<p><a href="https://hackaday.com/wp-content/uploads/2026/07/yubiart_detail.png" target="_blank"><img loading="lazy" decoding="async" data-attachment-id="1129936" data-permalink="https://hackaday.com/2026/07/22/dress-up-your-yubikey-with-this-web-based-tool/yubiart_detail/" data-orig-file="https://hackaday.com/wp-content/uploads/2026/07/yubiart_detail.png" data-orig-size="727,752" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="yubiart_detail" data-image-description="" data-image-caption="" data-large-file="https://hackaday.com/wp-content/uploads/2026/07/yubiart_detail.png?w=604" class="alignright size-medium wp-image-1129936" src="https://hackaday.com/wp-content/uploads/2026/07/yubiart_detail.png?w=387" alt="" width="387" height="400" srcset="https://hackaday.com/wp-content/uploads/2026/07/yubiart_detail.png 727w, https://hackaday.com/wp-content/uploads/2026/07/yubiart_detail.png?resize=242,250 242w, https://hackaday.com/wp-content/uploads/2026/07/yubiart_detail.png?resize=387,400 387w, https://hackaday.com/wp-content/uploads/2026/07/yubiart_detail.png?resize=604,625 604w" sizes="auto, (max-width: 387px) 100vw, 387px" /></a>Running it is as simple as opening a web page, because that&#8217;s exactly how it&#8217;s implemented. You can either host it yourself or just launch it right from the GitHub repository. After opening the HTML file, you&#8217;re presented with a fairly intuitive user interface that lets you draw on top of a 2D outline of the YubiKey itself so you can get a better idea of what the final product will look like.</p>
<p>You can pick from an array of vector icons, upload your own images, and add custom text. There&#8217;s a pull-down at the top that lets you pick which specific YubiKey you want to work with, and there are different views depending on whether you plan on blasting your handiwork onto the device with a laser, doing a full-color UV print, or cutting it out of vinyl with something like a Cricut.</p>
<p>Even if you don&#8217;t have a YubiKey that&#8217;s begging for some custom artwork, we think there&#8217;s a lot to learn from this project. Obviously there are some very valid reasons to be concerned about <a href="https://hackaday.com/2026/07/16/google-earth-desktop-client-to-be-retired-in-2027/">how much of our modern software can only be accessed through a browser.</a> If you&#8217;re going to use web technologies to create a piece of software, the least you could do is make it offline and self-contained like [madeinoz67] has.</p>
<p>Now if you&#8217;ll excuse us, <a href="https://hackaday.com/2025/05/27/hands-on-eufymake-e1-uv-printer/">we&#8217;ve got to go warm up the UV printer</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hackaday.com/2026/07/22/dress-up-your-yubikey-with-this-web-based-tool/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1129929</post-id>
		<media:thumbnail url="https://hackaday.com/wp-content/uploads/2026/07/yubiart_feat.png" />
		<media:content url="https://hackaday.com/wp-content/uploads/2026/07/yubiart_feat.png" medium="image">
			<media:title type="html">yubiart_feat</media:title>
		</media:content>

		<media:content url="https://hackaday.com/wp-content/uploads/2026/07/yubiart_detail.png?w=387" medium="image" />
	</item>
		<item>
		<title>Compile Here, Run Everywhere: Crosstool-Ng</title>
		<link>https://hackaday.com/2026/07/22/compile-here-run-everywhere-crosstool-ng/</link>
					<comments>https://hackaday.com/2026/07/22/compile-here-run-everywhere-crosstool-ng/#comments</comments>
		
		<dc:creator><![CDATA[Al Williams]]></dc:creator>
		<pubDate>Wed, 22 Jul 2026 14:00:04 +0000</pubDate>
				<category><![CDATA[Hackaday Columns]]></category>
		<category><![CDATA[Linux Hacks]]></category>
		<category><![CDATA[cross compile]]></category>
		<category><![CDATA[crosstool]]></category>
		<category><![CDATA[crosstool-ng]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mips]]></category>
		<guid isPermaLink="false">https://hackaday.com/?p=1124883</guid>

					<description><![CDATA[<div><img width="800" height="484" src="https://hackaday.com/wp-content/uploads/2026/07/CrossCompiling.jpg?w=800" class="attachment-large size-large wp-post-image" alt="" style="margin: 0 auto; margin-bottom: 15px;" decoding="async" loading="lazy" srcset="https://hackaday.com/wp-content/uploads/2026/07/CrossCompiling.jpg 3000w, https://hackaday.com/wp-content/uploads/2026/07/CrossCompiling.jpg?resize=250,151 250w, https://hackaday.com/wp-content/uploads/2026/07/CrossCompiling.jpg?resize=400,242 400w, https://hackaday.com/wp-content/uploads/2026/07/CrossCompiling.jpg?resize=800,484 800w, https://hackaday.com/wp-content/uploads/2026/07/CrossCompiling.jpg?resize=1536,929 1536w, https://hackaday.com/wp-content/uploads/2026/07/CrossCompiling.jpg?resize=2048,1239 2048w" sizes="auto, (max-width: 800px) 100vw, 800px" data-attachment-id="1125038" data-permalink="https://hackaday.com/2026/07/15/putting-some-zig-in-a-linux-based-3d-printer/crosscompiling/" data-orig-file="https://hackaday.com/wp-content/uploads/2026/07/CrossCompiling.jpg" data-orig-size="3000,1815" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="CrossCompiling" data-image-description="" data-image-caption="" data-large-file="https://hackaday.com/wp-content/uploads/2026/07/CrossCompiling.jpg?w=800" /></div>In a recent post, I mentioned that I wanted to build some tools for a stripped-down Linux running on a 3D printer with a MIPS CPU. I had two options: <a href="https://hackaday.com/2026/07/22/compile-here-run-everywhere-crosstool-ng/" class="read-more">&#8230;read more</a>]]></description>
										<content:encoded><![CDATA[<div><img width="800" height="484" src="https://hackaday.com/wp-content/uploads/2026/07/CrossCompiling.jpg?w=800" class="attachment-large size-large wp-post-image" alt="" style="margin: 0 auto; margin-bottom: 15px;" decoding="async" loading="lazy" srcset="https://hackaday.com/wp-content/uploads/2026/07/CrossCompiling.jpg 3000w, https://hackaday.com/wp-content/uploads/2026/07/CrossCompiling.jpg?resize=250,151 250w, https://hackaday.com/wp-content/uploads/2026/07/CrossCompiling.jpg?resize=400,242 400w, https://hackaday.com/wp-content/uploads/2026/07/CrossCompiling.jpg?resize=800,484 800w, https://hackaday.com/wp-content/uploads/2026/07/CrossCompiling.jpg?resize=1536,929 1536w, https://hackaday.com/wp-content/uploads/2026/07/CrossCompiling.jpg?resize=2048,1239 2048w" sizes="auto, (max-width: 800px) 100vw, 800px" data-attachment-id="1125038" data-permalink="https://hackaday.com/2026/07/15/putting-some-zig-in-a-linux-based-3d-printer/crosscompiling/" data-orig-file="https://hackaday.com/wp-content/uploads/2026/07/CrossCompiling.jpg" data-orig-size="3000,1815" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="CrossCompiling" data-image-description="" data-image-caption="" data-large-file="https://hackaday.com/wp-content/uploads/2026/07/CrossCompiling.jpg?w=800" /></div><p>In a recent post, I mentioned that I wanted to <a href="https://hackaday.com/2026/07/15/putting-some-zig-in-a-linux-based-3d-printer/">build some tools for a stripped-down Linux</a> running on a 3D printer with a MIPS CPU. I had two options: build a toolchain to cross-compile, or use Zig, which, in theory, has built-in toolchains for MIPS. I had to jump through hoops to get Zig to work, and I did mention Crosstool-Ng, so you might wonder why I didn&#8217;t start there. Turns out, it had its own set of hoops to work through.</p>
<p><span id="more-1124883"></span></p>
<h2>What is Crosstool-Ng?</h2>
<p>Crosstool-NG is a build system for making cross-compilation toolchains: compilers, assemblers, linkers, C libraries, kernel headers, and all the other pieces needed to build software on one machine that will run on a different kind of machine. Instead of manually matching a particular GCC version with the right <code>binutils</code>, <code>glibc</code>, or <code>musl</code> release, Linux headers, patches, and configuration options, you select the target architecture and let Crosstool-NG download, patch, configure, and build the stack. The result is a self-contained toolchain with commands such as <code>mipsel-linux-musl-gcc</code> or <code>arm-none-eabi-gcc</code>, ready to produce binaries for the target system.</p>
<figure id="attachment_1124746" aria-describedby="caption-attachment-1124746" style="width: 301px" class="wp-caption alignleft"><a href="https://hackaday.com/wp-content/uploads/2026/07/5af69348-c43e-4892-98e7-3e231efe8d251.jpg"><img loading="lazy" decoding="async" data-attachment-id="1124746" data-permalink="https://hackaday.com/2026/07/15/putting-some-zig-in-a-linux-based-3d-printer/5af69348-c43e-4892-98e7-3e231efe8d251/" data-orig-file="https://hackaday.com/wp-content/uploads/2026/07/5af69348-c43e-4892-98e7-3e231efe8d251.jpg" data-orig-size="3072,4080" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;1.68&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;Pixel 9&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1761562610&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;6.9&quot;,&quot;iso&quot;:&quot;111&quot;,&quot;shutter_speed&quot;:&quot;0.010001&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="5af69348-c43e-4892-98e7-3e231efe8d25~1" data-image-description="" data-image-caption="&lt;p&gt;The AD5X runs Linux&amp;#8230; sort of.&lt;/p&gt;
" data-large-file="https://hackaday.com/wp-content/uploads/2026/07/5af69348-c43e-4892-98e7-3e231efe8d251.jpg?w=471" class="size-medium wp-image-1124746" src="https://hackaday.com/wp-content/uploads/2026/07/5af69348-c43e-4892-98e7-3e231efe8d251.jpg?w=301" alt="" width="301" height="400" srcset="https://hackaday.com/wp-content/uploads/2026/07/5af69348-c43e-4892-98e7-3e231efe8d251.jpg 3072w, https://hackaday.com/wp-content/uploads/2026/07/5af69348-c43e-4892-98e7-3e231efe8d251.jpg?resize=188,250 188w, https://hackaday.com/wp-content/uploads/2026/07/5af69348-c43e-4892-98e7-3e231efe8d251.jpg?resize=301,400 301w, https://hackaday.com/wp-content/uploads/2026/07/5af69348-c43e-4892-98e7-3e231efe8d251.jpg?resize=471,625 471w, https://hackaday.com/wp-content/uploads/2026/07/5af69348-c43e-4892-98e7-3e231efe8d251.jpg?resize=1157,1536 1157w, https://hackaday.com/wp-content/uploads/2026/07/5af69348-c43e-4892-98e7-3e231efe8d251.jpg?resize=1542,2048 1542w" sizes="auto, (max-width: 301px) 100vw, 301px" /></a><figcaption id="caption-attachment-1124746" class="wp-caption-text">Stock? Zig? Crosstool-Ng? No way to tell from this picture.</figcaption></figure>
<p>The four-part name is in a particular format that is often used in the cross compiling world. For example, consider <code>arm-none-eabi-gcc</code>. The tool here is gcc and, as you might expect, there will also be <code>arm-none-eabi-as</code> and <code>arm-none-eabi-ld</code>, among other things. The first part, arm in this case, will be the target architecture.</p>
<p>The second part of the name can mean a few different things. In theory, it is a vendor name but it is sometimes &#8220;none&#8221; which often means &#8220;generic&#8221; or, in the case of a linux target, &#8220;linux,&#8221; which isn&#8217;t technically a vendor.</p>
<p>The third part is the calling convention and, often, some idea of the library. For example, <code>arm-linux-gnueabihf-gcc</code> would mean the GNU library using the ARM EABI and hardware floating point. These are sometimes called &#8220;target triples&#8221; because, historically, it was CPU-VENDOR-OS, but now there are usually four or even five parts if the calling convention includes the OS, like linux-musl, for example.</p>
<p>That sounds simple, but cross-toolchains are unusually sensitive to version combinations and ABI details. Endianness, floating-point conventions, instruction-set variants, threading support, and C library choices all have to agree. So saying &#8220;Arm&#8221; or &#8220;MIPS&#8221; doesn&#8217;t mean much. You need to account for all the possible variations in the CPU and the libraries. Crosstool-NG does not eliminate those decisions, but it turns them into a reproducible configuration rather than a long sequence of hand-built components. I had two problems that I eventually resolved.</p>
<h2>Problem One: Versions</h2>
<p>One nice thing about Crosstool-Ng is that it pulls the right versions of everything for you. The problem is, when you install it from your system repositories, you are probably getting a crazy old version of the tool itself. I couldn&#8217;t find the right entries in the configuration when I did that, so I eventually uninstalled and picked up the latest version right from the <a href="https://github.com/crosstool-ng/crosstool-ng" target="_blank">source</a>.</p>
<p>If that was the only problem, I would have been lucky.</p>
<h2>Problem Two: Infinite Combinations</h2>
<p>The CPU on the printer is an odd bird. As I noted last time, the executables use the r2 instruction set but also use the nan2008 convention which is usually found in r6. While Crosstool-Ng is good at letting you specify exactly what you want, it isn&#8217;t always clear on how you specify every detail.</p>
<p>To be fair, just like with Zig, some of that may be on me. I don&#8217;t use Crosstool-Ng or Zig every day, so maybe I was making either or both of them too hard. The bad news: It took me three or four attempts to get the right toolchain. The good news: It was a lot easier than manually downloading a bunch of stuff, trying to fix it up, building it, and still having to do it three or four times.</p>
<h2>Configuration</h2>
<figure id="attachment_1124887" aria-describedby="caption-attachment-1124887" style="width: 400px" class="wp-caption alignright"><a href="https://hackaday.com/wp-content/uploads/2026/07/config.png" target="_blank"><img loading="lazy" decoding="async" data-attachment-id="1124887" data-permalink="https://hackaday.com/2026/07/22/compile-here-run-everywhere-crosstool-ng/config-2/" data-orig-file="https://hackaday.com/wp-content/uploads/2026/07/config.png" data-orig-size="789,612" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="config" data-image-description="" data-image-caption="" data-large-file="https://hackaday.com/wp-content/uploads/2026/07/config.png?w=789" class="wp-image-1124887 size-medium" src="https://hackaday.com/wp-content/uploads/2026/07/config.png?w=400" alt="" width="400" height="310" srcset="https://hackaday.com/wp-content/uploads/2026/07/config.png 789w, https://hackaday.com/wp-content/uploads/2026/07/config.png?resize=250,194 250w, https://hackaday.com/wp-content/uploads/2026/07/config.png?resize=400,310 400w" sizes="auto, (max-width: 400px) 100vw, 400px" /></a><figcaption id="caption-attachment-1124887" class="wp-caption-text">Most, but not all, of the necessary changes were here.</figcaption></figure>
<p>Sort of like <code>buysbox</code> or building a custom kernel, the configuration for Crosstool-Ng uses the command: <code>ct-ng menuconfig</code>. This gives you a menu where you can set options about what you want and where you want it stored.</p>
<p>The problem is that the nan2008 setting I needed isn&#8217;t part of a standard mips32r2 setup. I suspect that if I had needed mips32r6, everything would have just worked. But, of course, I&#8217;m not that lucky.</p>
<p>In the target settings, I needed to match all the specifications, of course, but I also needed to add <code>-mnan=2008</code> to both the CFLAGS and LDFLAGS as you can see in the figure.</p>
<p>So what&#8217;s so hard about that? Just those changes won&#8217;t produce a working toolchain for my printer. The C compiler also needed <code>--with-nan2008</code> (in the C Compiler options screen under extra target CFLAGS) and the same option needed to be placed in the C Library screen, too.</p>
<p>Of course, it is like a word search puzzle. Once you see the answers, they look obvious. But when you are searching through pages of options, it is easy to miss one. It isn&#8217;t like there is a checkbox for &#8220;Use nan2008&#8221; that does it all for you because using nan2008 with mips32r2 is &#8220;strange.&#8221;</p>
<h2>The Proof is in the Build</h2>
<p>Once everything was set correctly, I was able to produce a toolchain (<code>ct-ng build</code>) that could compile <code>busybox</code> and even a <a href="https://github.com/antirez/kilo" target="_blank">small text editor</a>. Everything ran fine on the printer.</p>
<p>To build busybox, I used:</p>
<pre>make V=1 CC="mipsel-unknown-linux-musl-gcc -march=mips32r2 -msoft-float -static -Os" STRIP='mipsel-unknown-linux-musl-strip' -j6
</pre>
<p>Unlike Zig, no patching needed. The Zig version was about 9 kB larger than this version, so not much different there. Both were just over a megabyte total. I could probably have used hardware floating point to get a smaller executable, but given that I don&#8217;t think any of this is using much floating point at all, it didn&#8217;t seem to matter very much.</p>
<p>I had also threatened to compile a text editor. Turns out most have dependencies on things like <code>ncurses</code>, which are a pain to bundle. So I grabbed a copy of the tutorial editor <code>kilo</code> and <a href="https://github.com/wd5gnr/kilo-emacs-editor" target="_blank">extended it to look a little like emacs</a>. Works great. Great place to start if you need a static editor that doesn&#8217;t take much space.</p>
<h2>Lesson Learned</h2>
<p>If the CPU on the printer had been more conventional, I think either approach would have worked fine. I prefer the Crosstool solution in this case, because I&#8217;m not lying by patching the ELF header. In this case, I don&#8217;t think that lie hurts anything, but a program that did a lot of floating-point math might not work correctly, whereas I think the one produced by Crosstool would be fine even for a floating-point program.</p>
<p>On the other hand, like most Unix and Linux things, there are always more ways to solve any problem. If your problem is wedging executables on an alien Linux box, there are two perfectly fine ways to solve it.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hackaday.com/2026/07/22/compile-here-run-everywhere-crosstool-ng/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1124883</post-id>
		<media:thumbnail url="https://hackaday.com/wp-content/uploads/2026/07/CrossCompiling.jpg" />
		<media:content url="https://hackaday.com/wp-content/uploads/2026/07/CrossCompiling.jpg" medium="image">
			<media:title type="html">CrossCompiling</media:title>
		</media:content>

		<media:content url="https://hackaday.com/wp-content/uploads/2026/07/5af69348-c43e-4892-98e7-3e231efe8d251.jpg?w=301" medium="image" />

		<media:content url="https://hackaday.com/wp-content/uploads/2026/07/config.png?w=400" medium="image" />
	</item>
		<item>
		<title>Old TV Vacuum Tube Turned DIY X-Ray Machine</title>
		<link>https://hackaday.com/2026/07/22/old-tv-vacuum-tube-turned-diy-x-ray-machine/</link>
					<comments>https://hackaday.com/2026/07/22/old-tv-vacuum-tube-turned-diy-x-ray-machine/#comments</comments>
		
		<dc:creator><![CDATA[Julian Scheffers]]></dc:creator>
		<pubDate>Wed, 22 Jul 2026 11:00:59 +0000</pubDate>
				<category><![CDATA[High Voltage]]></category>
		<category><![CDATA[vacuum tube]]></category>
		<category><![CDATA[x-ray]]></category>
		<category><![CDATA[x-ray imaging]]></category>
		<guid isPermaLink="false">https://hackaday.com/?p=1129945</guid>

					<description><![CDATA[<div><img width="800" height="434" src="https://hackaday.com/wp-content/uploads/2026/07/diyxray_feat.jpg?w=800" class="attachment-large size-large wp-post-image" alt="" style="margin: 0 auto; margin-bottom: 15px;" decoding="async" loading="lazy" srcset="https://hackaday.com/wp-content/uploads/2026/07/diyxray_feat.jpg 1206w, https://hackaday.com/wp-content/uploads/2026/07/diyxray_feat.jpg?resize=250,136 250w, https://hackaday.com/wp-content/uploads/2026/07/diyxray_feat.jpg?resize=400,217 400w, https://hackaday.com/wp-content/uploads/2026/07/diyxray_feat.jpg?resize=800,434 800w" sizes="auto, (max-width: 800px) 100vw, 800px" data-attachment-id="1129987" data-permalink="https://hackaday.com/2026/07/22/old-tv-vacuum-tube-turned-diy-x-ray-machine/diyxray_feat/" data-orig-file="https://hackaday.com/wp-content/uploads/2026/07/diyxray_feat.jpg" data-orig-size="1206,654" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="diyxray_feat" data-image-description="" data-image-caption="" data-large-file="https://hackaday.com/wp-content/uploads/2026/07/diyxray_feat.jpg?w=800" /></div>Just because you probably shouldn&#8217;t make a DIY X-ray machine, doesn&#8217;t mean nobody would. [mircemk] shows off his DIY unit, how it works, how to use it safely and of <a href="https://hackaday.com/2026/07/22/old-tv-vacuum-tube-turned-diy-x-ray-machine/" class="read-more">&#8230;read more</a>]]></description>
										<content:encoded><![CDATA[<div><img width="800" height="434" src="https://hackaday.com/wp-content/uploads/2026/07/diyxray_feat.jpg?w=800" class="attachment-large size-large wp-post-image" alt="" style="margin: 0 auto; margin-bottom: 15px;" decoding="async" loading="lazy" srcset="https://hackaday.com/wp-content/uploads/2026/07/diyxray_feat.jpg 1206w, https://hackaday.com/wp-content/uploads/2026/07/diyxray_feat.jpg?resize=250,136 250w, https://hackaday.com/wp-content/uploads/2026/07/diyxray_feat.jpg?resize=400,217 400w, https://hackaday.com/wp-content/uploads/2026/07/diyxray_feat.jpg?resize=800,434 800w" sizes="auto, (max-width: 800px) 100vw, 800px" data-attachment-id="1129987" data-permalink="https://hackaday.com/2026/07/22/old-tv-vacuum-tube-turned-diy-x-ray-machine/diyxray_feat/" data-orig-file="https://hackaday.com/wp-content/uploads/2026/07/diyxray_feat.jpg" data-orig-size="1206,654" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="diyxray_feat" data-image-description="" data-image-caption="" data-large-file="https://hackaday.com/wp-content/uploads/2026/07/diyxray_feat.jpg?w=800" /></div><p>Just because you probably shouldn&#8217;t make a DIY X-ray machine, doesn&#8217;t mean nobody would. [mircemk] <a href="https://hackaday.io/project/205901-diy-miniature-x-ray-machine-using-a-tv-vacuum-tube" target="_blank">shows off his DIY unit</a>, how it works, how to use it safely and of course, some pretty X-ray photos of household objects.</p>
<p>The machine repurposes a DY86 vacuum tube from old CRT TVs to emit X-ray radiation. To drive the tube without blowing it up, a rather specialized series of power supplies is needed; a low-voltage DC power supply powers a high-voltage AC inverter, which is then sent through first a transformer, and then a Crockfort-Walton voltage multiplier, to reach the incredibly high voltages needed for such a vacuum tube&#8217;s radiation emission to reach X-rays. Naturally, this didn&#8217;t go to plan first try, leading to the unfortunate demise of three vacuum tubes (as well as another three which had already lost their vacuums).</p>
<p>Now how do you capture an image with X-rays for a light source? With dental X-ray photo films of course! The dental film is placed behind the object to be scanned, the transmitted X-rays making up the resulting image. After going through the standard process of developing for about 30s, washing, fixing for about half an hour, and washing again, the photos become clearly visible. The best results were obtained at a distance of 10-15 cm an an exposure time varying from 15 minutes to an hour depending on material hardness.</p>
<p><span id="more-1129945"></span></p>
<p><iframe loading="lazy" title="DIY Miniature X Ray Machine using a TV Vacuum Tube DY86" width="800" height="450" src="https://www.youtube.com/embed/qLgE6HjTiOE?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></p>
]]></content:encoded>
					
					<wfw:commentRss>https://hackaday.com/2026/07/22/old-tv-vacuum-tube-turned-diy-x-ray-machine/feed/</wfw:commentRss>
			<slash:comments>13</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1129945</post-id>
		<media:thumbnail url="https://hackaday.com/wp-content/uploads/2026/07/diyxray_feat.jpg" />
		<media:content url="https://hackaday.com/wp-content/uploads/2026/07/diyxray_feat.jpg" medium="image">
			<media:title type="html">diyxray_feat</media:title>
		</media:content>
	</item>
		<item>
		<title>60 FPS NES Emulator on ESP32</title>
		<link>https://hackaday.com/2026/07/22/60-fps-nes-emulator-on-esp32/</link>
					<comments>https://hackaday.com/2026/07/22/60-fps-nes-emulator-on-esp32/#comments</comments>
		
		<dc:creator><![CDATA[Bryan Cockfield]]></dc:creator>
		<pubDate>Wed, 22 Jul 2026 08:00:36 +0000</pubDate>
				<category><![CDATA[Microcontrollers]]></category>
		<category><![CDATA[Nintendo Hacks]]></category>
		<category><![CDATA[anemoia]]></category>
		<category><![CDATA[emulation]]></category>
		<category><![CDATA[ESP32]]></category>
		<category><![CDATA[nes]]></category>
		<category><![CDATA[open source]]></category>
		<guid isPermaLink="false">https://hackaday.com/?p=1129831</guid>

					<description><![CDATA[<div><img width="800" height="450" src="https://hackaday.com/wp-content/uploads/2026/07/nes-esp-main.png?w=800" class="attachment-large size-large wp-post-image" alt="" style="margin: 0 auto; margin-bottom: 15px;" decoding="async" loading="lazy" srcset="https://hackaday.com/wp-content/uploads/2026/07/nes-esp-main.png 1366w, https://hackaday.com/wp-content/uploads/2026/07/nes-esp-main.png?resize=250,141 250w, https://hackaday.com/wp-content/uploads/2026/07/nes-esp-main.png?resize=400,225 400w, https://hackaday.com/wp-content/uploads/2026/07/nes-esp-main.png?resize=800,450 800w" sizes="auto, (max-width: 800px) 100vw, 800px" data-attachment-id="1129913" data-permalink="https://hackaday.com/2026/07/22/60-fps-nes-emulator-on-esp32/nes-esp-main/" data-orig-file="https://hackaday.com/wp-content/uploads/2026/07/nes-esp-main.png" data-orig-size="1366,768" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="nes-esp-main" data-image-description="" data-image-caption="" data-large-file="https://hackaday.com/wp-content/uploads/2026/07/nes-esp-main.png?w=800" /></div>At least in theory, video games are more resistant to becoming lost media thanks to their digital nature &#8212; they&#8217;re easy to copy and emulators have saved many titles that <a href="https://hackaday.com/2026/07/22/60-fps-nes-emulator-on-esp32/" class="read-more">&#8230;read more</a>]]></description>
										<content:encoded><![CDATA[<div><img width="800" height="450" src="https://hackaday.com/wp-content/uploads/2026/07/nes-esp-main.png?w=800" class="attachment-large size-large wp-post-image" alt="" style="margin: 0 auto; margin-bottom: 15px;" decoding="async" loading="lazy" srcset="https://hackaday.com/wp-content/uploads/2026/07/nes-esp-main.png 1366w, https://hackaday.com/wp-content/uploads/2026/07/nes-esp-main.png?resize=250,141 250w, https://hackaday.com/wp-content/uploads/2026/07/nes-esp-main.png?resize=400,225 400w, https://hackaday.com/wp-content/uploads/2026/07/nes-esp-main.png?resize=800,450 800w" sizes="auto, (max-width: 800px) 100vw, 800px" data-attachment-id="1129913" data-permalink="https://hackaday.com/2026/07/22/60-fps-nes-emulator-on-esp32/nes-esp-main/" data-orig-file="https://hackaday.com/wp-content/uploads/2026/07/nes-esp-main.png" data-orig-size="1366,768" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="nes-esp-main" data-image-description="" data-image-caption="" data-large-file="https://hackaday.com/wp-content/uploads/2026/07/nes-esp-main.png?w=800" /></div><p>At least in theory, video games are more resistant to becoming lost media thanks to their digital nature &#8212; they&#8217;re easy to copy and emulators have saved many titles that are otherwise locked in corporate vaults. But emulators give us something beyond simple preservation: they can also be used to enhance games well beyond the capabilities of the original systems while still preserving the souls of the games, <a href="https://github.com/rkindustriesYT/Anemoia-NES-Emulator-fixes" target="_blank">as this NES emulator manages to do</a>.</p>
<p>The emulator is called Anemoia-ESP32, and as its name suggests is a re-write of the Anemoia emulator specifically built for the ESP32. By modern standards these little chips don&#8217;t pack much of a punch, but compared to original NES hardware they&#8217;re more than up to the task of gaming. This project aims to recreate the Nintendo Entertainment System experience as faithfully as possible, hitting 60 FPS in most instances, as well as maintaining full audio emulation. Running on an ESP32 enables some truly small handheld options that would be difficult to achieve with more traditional platforms for emulation. There are some PCBs available here as well, but aren&#8217;t required to explore this project with.</p>
<p>As far as extra features compared to original NES hardware, the emulator does support save states and has a number of other settings improvements. Installation is as easy as flashing any other firmware image onto an ESP32, which these days can even be done from the browser. No word on whether or not it will eventually support <a href="https://hackaday.com/2026/06/22/graphics-upgrade-for-nintendo-entertainment-system/">emulating dual Picture Processing Units</a>, but we can hope.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hackaday.com/2026/07/22/60-fps-nes-emulator-on-esp32/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1129831</post-id>
		<media:thumbnail url="https://hackaday.com/wp-content/uploads/2026/07/nes-esp-main.png" />
		<media:content url="https://hackaday.com/wp-content/uploads/2026/07/nes-esp-main.png" medium="image">
			<media:title type="html">nes-esp-main</media:title>
		</media:content>
	</item>
		<item>
		<title>A Smarter DIY Air Filter</title>
		<link>https://hackaday.com/2026/07/21/a-smarter-diy-air-filter/</link>
					<comments>https://hackaday.com/2026/07/21/a-smarter-diy-air-filter/#comments</comments>
		
		<dc:creator><![CDATA[Navarre Bartz]]></dc:creator>
		<pubDate>Wed, 22 Jul 2026 05:00:47 +0000</pubDate>
				<category><![CDATA[home hacks]]></category>
		<category><![CDATA[air purifier]]></category>
		<category><![CDATA[air quality]]></category>
		<category><![CDATA[ESP32]]></category>
		<category><![CDATA[ESP32-S3]]></category>
		<category><![CDATA[home automation]]></category>
		<category><![CDATA[home-assistant]]></category>
		<category><![CDATA[smart home]]></category>
		<guid isPermaLink="false">https://hackaday.com/?p=1129731</guid>

					<description><![CDATA[<div><img width="800" height="600" src="https://hackaday.com/wp-content/uploads/2026/07/AirSense-ESP32-Air-Purifier.png?w=800" class="attachment-large size-large wp-post-image" alt="A vaguely perforated metal cylinder sits on a wooden box with a grey cylinder and LCD display atop it. There are holes in the top of the grey cylinder for air to flow through." style="margin: 0 auto; margin-bottom: 15px;" decoding="async" loading="lazy" srcset="https://hackaday.com/wp-content/uploads/2026/07/AirSense-ESP32-Air-Purifier.png 1024w, https://hackaday.com/wp-content/uploads/2026/07/AirSense-ESP32-Air-Purifier.png?resize=250,188 250w, https://hackaday.com/wp-content/uploads/2026/07/AirSense-ESP32-Air-Purifier.png?resize=400,300 400w, https://hackaday.com/wp-content/uploads/2026/07/AirSense-ESP32-Air-Purifier.png?resize=800,600 800w" sizes="auto, (max-width: 800px) 100vw, 800px" data-attachment-id="1129735" data-permalink="https://hackaday.com/2026/07/21/a-smarter-diy-air-filter/airsense-esp32-air-purifier/" data-orig-file="https://hackaday.com/wp-content/uploads/2026/07/AirSense-ESP32-Air-Purifier.png" data-orig-size="1024,768" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="AirSense ESP32 Air Purifier" data-image-description="" data-image-caption="" data-large-file="https://hackaday.com/wp-content/uploads/2026/07/AirSense-ESP32-Air-Purifier.png?w=800" /></div>As predominantly indoor creatures, it&#8217;s important to maintain a healthy habitat for the hacker. [Kishan Pratap Singh] designed a clever solution in AirSense, an ESP32-powered air filter. If you&#8217;re thinking <a href="https://hackaday.com/2026/07/21/a-smarter-diy-air-filter/" class="read-more">&#8230;read more</a>]]></description>
										<content:encoded><![CDATA[<div><img width="800" height="600" src="https://hackaday.com/wp-content/uploads/2026/07/AirSense-ESP32-Air-Purifier.png?w=800" class="attachment-large size-large wp-post-image" alt="A vaguely perforated metal cylinder sits on a wooden box with a grey cylinder and LCD display atop it. There are holes in the top of the grey cylinder for air to flow through." style="margin: 0 auto; margin-bottom: 15px;" decoding="async" loading="lazy" srcset="https://hackaday.com/wp-content/uploads/2026/07/AirSense-ESP32-Air-Purifier.png 1024w, https://hackaday.com/wp-content/uploads/2026/07/AirSense-ESP32-Air-Purifier.png?resize=250,188 250w, https://hackaday.com/wp-content/uploads/2026/07/AirSense-ESP32-Air-Purifier.png?resize=400,300 400w, https://hackaday.com/wp-content/uploads/2026/07/AirSense-ESP32-Air-Purifier.png?resize=800,600 800w" sizes="auto, (max-width: 800px) 100vw, 800px" data-attachment-id="1129735" data-permalink="https://hackaday.com/2026/07/21/a-smarter-diy-air-filter/airsense-esp32-air-purifier/" data-orig-file="https://hackaday.com/wp-content/uploads/2026/07/AirSense-ESP32-Air-Purifier.png" data-orig-size="1024,768" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="AirSense ESP32 Air Purifier" data-image-description="" data-image-caption="" data-large-file="https://hackaday.com/wp-content/uploads/2026/07/AirSense-ESP32-Air-Purifier.png?w=800" /></div><p>As predominantly indoor creatures, it&#8217;s important to maintain a healthy habitat for the hacker. [Kishan Pratap Singh] designed a clever solution in <a href="https://www.instructables.com/AirSense-the-Smartest-DIY-Air-Purifier" target="_blank">AirSense, an ESP32-powered air filter</a>.</p>
<p>If you&#8217;re thinking of cleaning the air in your environment, you might also want to know some properties about the air coming out of the filter. AirSense measures PM2.5 dust concentration, Air Quality Index (AQI), temperature, humidity, and atmospheric pressure. The various sensors are mounted along the exhaust path of the filter, which lets your know what kind of air it&#8217;s pumping out.</p>
<p>The system drives a 150 mm exhaust fan mounted in a 3D printed cap that pulls air through a cylindrical Xiaomi HEPA filter inside a perforated metal trash can enclosure. The ESP32 and an LCD readout of the environmental data also live in the cap, giving the device a sleek look. While [Singh] chose to run the filter continuously, we wonder if it might be interesting to set it up to only filter the air if air quality drops below a certain level to conserve power, especially if you&#8217;re on a time-of-use power plan. That would require redesigning the sensor assembly (or running the unit in reverse), so maybe it&#8217;s over-complicating things?</p>
<p>We&#8217;ve seen the Xiaomi Air purifier filter mentioned before, but under the auspices of <a href="https://hackaday.com/2024/01/26/hacking-a-xiaomi-air-purifiers-filter-drm-to-extend-its-lifespan/">hacking it&#8217;s filter DRM</a>, an <a href="https://hackaday.com/2024/01/16/a-practical-open-source-air-purifier/">open source air filter</a> designed by [Naomi Wu], and even an <a href="https://hackaday.com/2021/11/25/esp32-brings-air-purifier-online-with-home-assistant/">ESP32 pressed into service</a> to plug an air purifier into Home Assistant.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hackaday.com/2026/07/21/a-smarter-diy-air-filter/feed/</wfw:commentRss>
			<slash:comments>20</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1129731</post-id>
		<media:thumbnail url="https://hackaday.com/wp-content/uploads/2026/07/AirSense-ESP32-Air-Purifier.png" />
		<media:content url="https://hackaday.com/wp-content/uploads/2026/07/AirSense-ESP32-Air-Purifier.png" medium="image">
			<media:title type="html">AirSense ESP32 Air Purifier</media:title>
		</media:content>
	</item>
	</channel>
</rss>
