This is a valid RSS feed.
This feed is valid, but interoperability with the widest range of feed readers could be improved by implementing the following recommendations.
line 23, column 0: (8 occurrences) [help]
<site xmlns="com-wordpress:feed-additions:1">156670177</site> <item>
line 37, column 0: (7 occurrences) [help]
<description><![CDATA[<div><img width="800" height="484" src="https://h ...
<description><![CDATA[<div><img width="800" height="484" src="https://h ...
line 37, column 0: (7 occurrences) [help]
<description><![CDATA[<div><img width="800" height="484" src="https://h ...
line 37, column 0: (7 occurrences) [help]
<description><![CDATA[<div><img width="800" height="484" src="https://h ...
line 37, column 0: (7 occurrences) [help]
<description><![CDATA[<div><img width="800" height="484" src="https://h ...
line 37, column 0: (7 occurrences) [help]
<description><![CDATA[<div><img width="800" height="484" src="https://h ...
line 37, column 0: (7 occurrences) [help]
<description><![CDATA[<div><img width="800" height="484" src="https://h ...
line 37, column 0: (7 occurrences) [help]
<description><![CDATA[<div><img width="800" height="484" src="https://h ...
line 37, column 0: (7 occurrences) [help]
<description><![CDATA[<div><img width="800" height="484" src="https://h ...
line 37, column 0: (7 occurrences) [help]
<description><![CDATA[<div><img width="800" height="484" src="https://h ...
line 37, column 0: (7 occurrences) [help]
<description><![CDATA[<div><img width="800" height="484" src="https://h ...
line 37, column 0: (7 occurrences) [help]
<description><![CDATA[<div><img width="800" height="484" src="https://h ...
line 37, column 0: (7 occurrences) [help]
<description><![CDATA[<div><img width="800" height="484" src="https://h ...
line 37, column 0: (7 occurrences) [help]
<description><![CDATA[<div><img width="800" height="484" src="https://h ...
line 38, column 0: (9 occurrences) [help]
<content:encoded><![CDATA[<div><img width="800" height="484" src=" ...
line 38, column 0: (9 occurrences) [help]
<content:encoded><![CDATA[<div><img width="800" height="484" src=" ...
line 38, column 0: (9 occurrences) [help]
<content:encoded><![CDATA[<div><img width="800" height="484" src=" ...
line 38, column 0: (9 occurrences) [help]
<content:encoded><![CDATA[<div><img width="800" height="484" src=" ...
line 38, column 0: (9 occurrences) [help]
<content:encoded><![CDATA[<div><img width="800" height="484" src=" ...
line 38, column 0: (9 occurrences) [help]
<content:encoded><![CDATA[<div><img width="800" height="484" src=" ...
line 38, column 0: (9 occurrences) [help]
<content:encoded><![CDATA[<div><img width="800" height="484" src=" ...
line 38, column 0: (9 occurrences) [help]
<content:encoded><![CDATA[<div><img width="800" height="484" src=" ...
line 38, column 0: (9 occurrences) [help]
<content:encoded><![CDATA[<div><img width="800" height="484" src=" ...
line 38, column 0: (9 occurrences) [help]
<content:encoded><![CDATA[<div><img width="800" height="484" src=" ...
line 38, column 0: (9 occurrences) [help]
<content:encoded><![CDATA[<div><img width="800" height="484" src=" ...
line 38, column 0: (9 occurrences) [help]
<content:encoded><![CDATA[<div><img width="800" height="484" src=" ...
line 38, column 0: (9 occurrences) [help]
<content:encoded><![CDATA[<div><img width="800" height="484" src=" ...
line 73, column 0: (2 occurrences) [help]
<figure id="attachment_827348" aria-describedby="caption-attachment-827348" ...
line 109, column 0: (6 occurrences) [help]
<description><![CDATA[<div><img width="800" height="450" src="https://h ...
line 110, column 0: (7 occurrences) [help]
<content:encoded><![CDATA[<div><img width="800" height="450" src=" ...
line 114, column 0: (3 occurrences) [help]
<p><iframe loading="lazy" title="Turn Any USB-C Charger Into a Lab Power Sup ...
<content:encoded><![CDATA[<div><img width="800" height="450" src=" ...
<?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>Blog – Hackaday</title>
<atom:link href="https://hackaday.com/blog/feed/" rel="self" type="application/rss+xml" />
<link>https://hackaday.com</link>
<description>Fresh hacks every day</description>
<lastBuildDate>Mon, 15 Sep 2025 10:16:16 +0000</lastBuildDate>
<language>en-US</language>
<sy:updatePeriod>
hourly </sy:updatePeriod>
<sy:updateFrequency>
1 </sy:updateFrequency>
<generator>https://wordpress.org/?v=6.8.2</generator>
<site xmlns="com-wordpress:feed-additions:1">156670177</site> <item>
<title>Going Native With Android’s Native Development Kit</title>
<link>https://hackaday.com/2025/09/15/going-native-with-androids-native-development-kit/</link>
<comments>https://hackaday.com/2025/09/15/going-native-with-androids-native-development-kit/#respond</comments>
<dc:creator><![CDATA[Maya Posch]]></dc:creator>
<pubDate>Mon, 15 Sep 2025 14:00:41 +0000</pubDate>
<category><![CDATA[Android Hacks]]></category>
<category><![CDATA[Featured]]></category>
<category><![CDATA[Software Development]]></category>
<category><![CDATA[android ndk]]></category>
<category><![CDATA[android sdk]]></category>
<guid isPermaLink="false">https://hackaday.com/?p=810624</guid>
<description><![CDATA[<div><img width="800" height="484" src="https://hackaday.com/wp-content/uploads/2025/08/AndroidBootstrap.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/2025/08/AndroidBootstrap.jpg 3000w, https://hackaday.com/wp-content/uploads/2025/08/AndroidBootstrap.jpg?resize=250,151 250w, https://hackaday.com/wp-content/uploads/2025/08/AndroidBootstrap.jpg?resize=400,242 400w, https://hackaday.com/wp-content/uploads/2025/08/AndroidBootstrap.jpg?resize=800,484 800w, https://hackaday.com/wp-content/uploads/2025/08/AndroidBootstrap.jpg?resize=1536,929 1536w, https://hackaday.com/wp-content/uploads/2025/08/AndroidBootstrap.jpg?resize=2048,1239 2048w" sizes="(max-width: 800px) 100vw, 800px" data-attachment-id="812868" data-permalink="https://hackaday.com/2025/09/04/bootstrapping-android-development-a-survival-guide/androidbootstrap/" data-orig-file="https://hackaday.com/wp-content/uploads/2025/08/AndroidBootstrap.jpg" data-orig-size="3000,1815" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"1"}" data-image-title="AndroidBootstrap" data-image-description="" data-image-caption="" data-medium-file="https://hackaday.com/wp-content/uploads/2025/08/AndroidBootstrap.jpg?w=400" data-large-file="https://hackaday.com/wp-content/uploads/2025/08/AndroidBootstrap.jpg?w=800" /></div>Originally Android apps were only developed in Java, targeting the Dalvik Java Virtual Machine (JVM) and its associated environment. Compared to platforms like iOS with Objective-C, which is just C <a href="https://hackaday.com/2025/09/15/going-native-with-androids-native-development-kit/" class="read-more">…read more</a>]]></description>
<content:encoded><![CDATA[<div><img width="800" height="484" src="https://hackaday.com/wp-content/uploads/2025/08/AndroidBootstrap.jpg?w=800" class="attachment-large size-large wp-post-image" alt="" style="margin: 0 auto; margin-bottom: 15px;" decoding="async" srcset="https://hackaday.com/wp-content/uploads/2025/08/AndroidBootstrap.jpg 3000w, https://hackaday.com/wp-content/uploads/2025/08/AndroidBootstrap.jpg?resize=250,151 250w, https://hackaday.com/wp-content/uploads/2025/08/AndroidBootstrap.jpg?resize=400,242 400w, https://hackaday.com/wp-content/uploads/2025/08/AndroidBootstrap.jpg?resize=800,484 800w, https://hackaday.com/wp-content/uploads/2025/08/AndroidBootstrap.jpg?resize=1536,929 1536w, https://hackaday.com/wp-content/uploads/2025/08/AndroidBootstrap.jpg?resize=2048,1239 2048w" sizes="(max-width: 800px) 100vw, 800px" data-attachment-id="812868" data-permalink="https://hackaday.com/2025/09/04/bootstrapping-android-development-a-survival-guide/androidbootstrap/" data-orig-file="https://hackaday.com/wp-content/uploads/2025/08/AndroidBootstrap.jpg" data-orig-size="3000,1815" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"1"}" data-image-title="AndroidBootstrap" data-image-description="" data-image-caption="" data-medium-file="https://hackaday.com/wp-content/uploads/2025/08/AndroidBootstrap.jpg?w=400" data-large-file="https://hackaday.com/wp-content/uploads/2025/08/AndroidBootstrap.jpg?w=800" /></div><p>Originally Android apps were only developed in Java, targeting the Dalvik Java Virtual Machine (JVM) and its associated environment. Compared to platforms like iOS with Objective-C, which is just C with Smalltalk uncomfortably crammed into it, an obvious problem here is that any JVM will significantly cripple performance, both due to a lack of direct hardware access and the garbage-collector that makes real-time applications such as games effectively impossible. There is also the issue that there is a lot more existing code written in languages like C and C++, with not a lot of enthusiasm among companies for porting existing codebases to Java, or the mostly Android-specific Kotlin.</p>
<p>The solution here was the Native Development Kit (<a href="https://developer.android.com/ndk/guides" target="_blank">NDK</a>), which was introduced in 2009 and provides a <a href="https://source.android.com/docs/security/app-sandbox" target="_blank">sandboxed environment</a> that native binaries can run in. The limitations here are mostly due to many standard APIs from a GNU/Linux or BSD environment not being present in Android/Linux, along with the use of the minimalistic Bionic C library and APIs that require a detour via the JVM rather than having it available via the NDK.</p>
<p>Despite these issues, using the NDK can still save a lot of time and allows for the sharing of mostly the same codebase between Android, desktop Linux, BSD and Windows.</p>
<p><span id="more-810624"></span></p>
<h2>NDK Versioning</h2>
<p>When implying that use of the NDK can be worth it, I did not mean to suggest that it’s a smooth or painless experience. In fact, the overall experience is generally somewhat frustrating and you’ll run into countless Android-specific issues that cannot be debugged easily or at all with standard development tools like GDB, Valgrind, etc. Compared to something like Linux development, or the pre-Swift world of iOS development where C and C++ are directly supported, it’s quite the departure.</p>
<p>Installing the NDK fortunately doesn’t require that you have the SDK installed, with a <a href="https://developer.android.com/ndk/downloads/" target="_blank">dedicated download page</a>. You can also download the <a href="https://developer.android.com/studio/command-line#tools-sdk" target="_blank">command-line tools</a> in order to get the SDK manager. Whether using the CLI tool or the full-fat SDK manager in the IDE, you get to choose from a whole range of NDK versions, which raises the question of why there’s not just a single NDK version.</p>
<p>The answer here is that although generally you can just pick the latest (stable) version and be fine, each update also updates the included toolchain and Android sysroot, which creates the possibility of issues with an existing codebase. You may have to experiment until you find a version that works for your particular codebase if you end up having build issues, so be sure to mark the version that last worked well. Fortunately you can have multiple NDK versions installed side by side without too much fuss.</p>
<p>Simply set the <code>NDK_HOME</code> variable in your respective OS or environment to the NDK folder of your choice and you should be set.</p>
<h2>Doing Some Porting</h2>
<p>Since Android features a JVM, it’s possible to create the typical native modules for a JVM application using a Java Native Interface (<a href="https://en.wikipedia.org/wiki/Java_Native_Interface?useskin=vector" target="_blank">JNI</a>) wrapper to do a small part natively, it’s more interesting to do things the other way around. This is also typically what happens when you take an existing desktop application and port it, with my <a href="https://github.com/MayaPosch/NymphCast" target="_blank">NymphCast Server (NCS) project</a> as a good example. This is an SDL- and FFmpeg-based application that’s fairly typical for a desktop application.</p>
<p>Unlike the GUI and Qt-based NymphCast Player which was <a href="https://hackaday.com/2025/09/04/bootstrapping-android-development-a-survival-guide/">briefly covered in a previous article</a>, NCS doesn’t feature a GUI as such, but uses SDL2 to create a hardware-accelerated window in which content is rendered, which can be an OpenGL-based UI, video playback or a screensaver. This makes SDL2 the first dependency that we have to tackle as we set up the new project.</p>
<p>Of course, first we need to create the Android project folder with its specific layout and files. This is something that has been made <a href="https://stackoverflow.com/questions/20801042/how-to-create-android-project-with-gradle-from-command-line" target="_blank">increasingly more convoluted</a> by Google, with most recently your options reduced to either use the Android Studio IDE or to assemble it <a href="https://www.susi.se/blog/2025/02/02/setting-up-a-new-android-project-using-gradle/" target="_blank">by hand</a>, with the latter option not much fun. Using an IDE for this probably saves you a lot of headaches, even if it requires breaking the ‘no IDE’ rule. Definitely blame Google for this one.</p>
<p> </p>
<p>Next is tackling the SDL2 dependency, with the SDL developers fortunately providing direct support for Android. Simply get the <a href="https://github.com/libsdl-org/SDL/releases" target="_blank">current release</a> ZIP file, tarball or whatever your preferred flavor is of SDL2 and put the extracted files into a new folder called <code>SDL2</code>inside the project’s JNI folder, creating the full path of <code>app/jni/SDL2</code>. Inside this folder we should now at least have the SDL2 <code>include</code> and <code>src</code> folders, along with the <code>Android.mk</code> file in the root. This latter file is key to actually building SDL2 during the build process, as we’ll see in a moment.</p>
<p>We first need to take care of the Java connection in SDL2, as the Java files we find in the extracted SDL2 release under <code>android-project/app/src/main/java/org/libsdl\app</code> are the glue between the Android JVM world and the native environment. Copy these files into the newly created folder at <code>src/server/android/app/src/main/java/org/libsdl/app</code>.</p>
<p>Before we call the SDL2 dependency done, there’s one last step: creating a custom Java class derived from <code>SDLActivity</code>, which implements the <code>getLibraries()</code> function. This returns an array of strings with the names of the shared libraries that should be loaded, which for NCS are <code>SDL2</code> and <code>nymphcastserver</code>, which will load their respective <code>.so</code> files.</p>
<p>Prior to moving on, let’s address the elephant in the room of why we cannot simply use shared libraries from Linux or a project like <a href="https://en.wikipedia.org/wiki/Termux" target="_blank">Termux</a>. There’s no super-complicated reason for this, as it’s mostly about Android’s native environment <a href="https://stackoverflow.com/questions/11491065/linking-with-versioned-shared-library-in-android-ndk" target="_blank">not supporting versioned shared libraries</a>. This means that a file like <code>widget.so.1.2</code> will not be found while <code>widget.so</code> without encoded versioning would be, thus severely limiting which libraries we can use in a drop-in fashion.</p>
<p>While there has been talk of an NDK package manager over the years, Google doesn’t seem interested in this, and community efforts seem tepid at most outside of Termux, so this is the reality we have to live with.</p>
<h2>Sysroot Things</h2>
<p>It’d take at least a couple of articles to fully cover the whole experience of setting up the NCS Android port, but a Cliff’s Notes version can be found in the <a href="https://github.com/MayaPosch/NymphCast/blob/master/doc/nymphcast_server_android_build_steps.txt" target="_blank">‘build steps’ notes</a> which I wrote down primarily for myself and the volunteers on the project as a reference. Especially of note is how many of the dependencies are handled, with static libraries and headers generally added to the sysroot of the target NDK so that they can be used across projects.</p>
<p>For example, NCS relies on the <a href="https://github.com/pocoproject/poco/releases" target="_blank">PoCo</a> (portable component) libraries – for which I had to create the <a href="https://github.com/MayaPosch/Poco-build" target="_blank">Poco-build</a> project to build it for modern Android – with the resulting static libraries being copied into the sysroot. This sysroot and its location for libraries is found for example on Windows under:</p>
<p><code>${NDK_HOME}\toolchains\llvm\prebuilt\windows-x86_64\usr\lib\<arch></code></p>
<p>The folder layout of the NDK is incredibly labyrinthine, but if you start under the <code>toolchains/llvm/prebuilt</code> folder it should be fairly evident where to place things. Headers are copied as is typical once in the <code>usr/include</code> folder.</p>
<p>As can be seen in the NCS build notes, we get some static libraries from the Termux project, via its <a href="https://packages.termux.dev/" target="_blank">packages</a> server. This includes FreeImage, NGHTTP2 and the header-only RapidJSON, which were the only unversioned dependencies that I could find for NCS from this source. The other dependencies are compiled into a library by placing the source with Makefile in their own folders under <code>app/jni</code>.</p>
<p>Finally, the reason for picking only static libraries for copying into the sysroot is mostly about convenience, as this way the library is merged into the final shared library that gets spit out by the build system and we don’t need to additionally include these <code>.so</code> files in the <code>app/src/main/jniLibs/<arch></code> for copying into the APK.</p>
<h2>Building A Build System</h2>
<p>Although Google has been pushing CMake on Android NDK developers, <a href="https://developer.android.com/ndk/guides/ndk-build" target="_blank">ndk-build</a> is the more versatile and powerful choice, with projects like SDL offering the requisite <code>Android.mk</code> file. To trigger the build of our project from the Gradle wrapper, we need to specify the external native build in <code>app/build.gradle</code> as follows:</p>
<pre>externalNativeBuild {
ndkBuild {
path 'jni/Android.mk'
}
}</pre>
<p>This references a Makefile that just checks all subfolders for a Makefile to run, thus triggering the build of each <code>Android.mk</code> file of the dependencies, as well as of NCS itself. Since I didn’t want to copy the entire NCS source code into this folder, the <code>Android.mk</code> file is simply an adapted version of the regular NCS Makefile with only the elements that <code>ndk-build</code> needs included.</p>
<p>We can now build a debug APK from the CLI with <code>./gradlew assembleDebug</code> or equivalent command, before waddling off to have a snack and a relaxing walk to hopefully return to a completed build:</p>
<figure id="attachment_827348" aria-describedby="caption-attachment-827348" style="width: 550px" class="wp-caption aligncenter"><a href="https://hackaday.com/wp-content/uploads/2025/09/ncs_android_build_complete.jpg"><img decoding="async" data-attachment-id="827348" data-permalink="https://hackaday.com/2025/09/15/going-native-with-androids-native-development-kit/ncs_android_build_complete/" data-orig-file="https://hackaday.com/wp-content/uploads/2025/09/ncs_android_build_complete.jpg" data-orig-size="550,93" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="ncs_android_build_complete" data-image-description="" data-image-caption="<p>Finished NymphCast Server build for Android on an Intel N100-based system.</p>
" data-medium-file="https://hackaday.com/wp-content/uploads/2025/09/ncs_android_build_complete.jpg?w=400" data-large-file="https://hackaday.com/wp-content/uploads/2025/09/ncs_android_build_complete.jpg?w=550" class="wp-image-827348 size-large" src="https://hackaday.com/wp-content/uploads/2025/09/ncs_android_build_complete.jpg?w=550" alt="Finished NymphCast Server build for Android on an Intel N100-based system." width="550" height="93" srcset="https://hackaday.com/wp-content/uploads/2025/09/ncs_android_build_complete.jpg 550w, https://hackaday.com/wp-content/uploads/2025/09/ncs_android_build_complete.jpg?resize=250,42 250w, https://hackaday.com/wp-content/uploads/2025/09/ncs_android_build_complete.jpg?resize=400,68 400w" sizes="(max-width: 550px) 100vw, 550px" /></a><figcaption id="caption-attachment-827348" class="wp-caption-text">Finished NymphCast Server build for Android on an Intel N100-based system.</figcaption></figure>
<h2>Further Steps</h2>
<p>Although the above is a pretty rough overview of the entire NDK porting process, it should hopefully provide a few useful pointers if you are considering either porting an existing C or C++ codebase to Android, or to write one from scratch. There are a lot more gotchas that are not covered in this article, but feel free to sound off in the comment section on what else might be useful to cover.</p>
<p>Another topic that’s not covered yet here is that of debugging and profiling. Although you can set up a debugging session – which I prefer to do via an IDE out of sheer convenience – when it comes to profiling and testing for memory and multi-threading issues, you will run into a bit of a brick wall. Although Valgrind kinda-sorta worked on Android in the distant past, you’re mostly stuck using the LLVM-based Address Sanitizer (ASan) or the newer <a href="https://developer.android.com/ndk/guides/hwasan" target="_blank">HWASan</a> to get you sorta what the Memcheck tool in Valgrind provides.</p>
<p>Unlike the Valgrind tools which require zero code modification, you need to specially compile your code with ASan support, add a special wrapper to the APK and a couple of further modifications to the project. Although I have done this for the NCS project, it was a nightmare, and didn’t really net me very useful results. It’s therefore really recommended to avoid ASan and just debug the code on Linux with Valgrind.</p>
<p>Currently NCS is nearly as stable as on desktop OSes, meaning that instead of it being basically bombproof it will occasionally flunk out, with an <a href="https://developer.android.com/ndk/guides/audio/aaudio/aaudio" target="_blank">AAudio</a>-related error on some test devices for so far completely opaque reasons. This, too, is is illustrative of the utter joy that it is to port applications to Android. As long as you can temper your expectations and have some guides to follow it’s not too terrible, but the NDK really rubs in how much Android is not ‘just another Linux distro’.</p>
]]></content:encoded>
<wfw:commentRss>https://hackaday.com/2025/09/15/going-native-with-androids-native-development-kit/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
<post-id xmlns="com-wordpress:feed-additions:1">810624</post-id>
<media:thumbnail url="https://hackaday.com/wp-content/uploads/2025/08/AndroidBootstrap.jpg" />
<media:content url="https://hackaday.com/wp-content/uploads/2025/08/AndroidBootstrap.jpg" medium="image">
<media:title type="html">AndroidBootstrap</media:title>
</media:content>
<media:content url="https://hackaday.com/wp-content/uploads/2025/09/ncs_android_build_complete.jpg?w=550" medium="image">
<media:title type="html">Finished NymphCast Server build for Android on an Intel N100-based system.</media:title>
</media:content>
</item>
<item>
<title>USB-C PD Decoded: A DIY Meter and Logger for Power Insights</title>
<link>https://hackaday.com/2025/09/15/usb-c-pd-decoded-a-diy-meter-and-logger-for-power-insights/</link>
<comments>https://hackaday.com/2025/09/15/usb-c-pd-decoded-a-diy-meter-and-logger-for-power-insights/#comments</comments>
<dc:creator><![CDATA[Matt Varian]]></dc:creator>
<pubDate>Mon, 15 Sep 2025 11:00:00 +0000</pubDate>
<category><![CDATA[hardware]]></category>
<category><![CDATA[ESP-01]]></category>
<category><![CDATA[power meter]]></category>
<category><![CDATA[USB-C PD]]></category>
<guid isPermaLink="false">https://hackaday.com/?p=828537</guid>
<description><![CDATA[<div><img width="800" height="450" src="https://hackaday.com/wp-content/uploads/2025/09/3379811757590036552-16-9.png?w=800" class="attachment-large size-large wp-post-image" alt="DIY USB-C PD Tools" style="margin: 0 auto; margin-bottom: 15px;" decoding="async" loading="lazy" srcset="https://hackaday.com/wp-content/uploads/2025/09/3379811757590036552-16-9.png 1962w, https://hackaday.com/wp-content/uploads/2025/09/3379811757590036552-16-9.png?resize=250,141 250w, https://hackaday.com/wp-content/uploads/2025/09/3379811757590036552-16-9.png?resize=400,225 400w, https://hackaday.com/wp-content/uploads/2025/09/3379811757590036552-16-9.png?resize=800,450 800w, https://hackaday.com/wp-content/uploads/2025/09/3379811757590036552-16-9.png?resize=1536,864 1536w" sizes="auto, (max-width: 800px) 100vw, 800px" data-attachment-id="829076" data-permalink="https://hackaday.com/2025/09/15/usb-c-pd-decoded-a-diy-meter-and-logger-for-power-insights/3379811757590036552-16-9/" data-orig-file="https://hackaday.com/wp-content/uploads/2025/09/3379811757590036552-16-9.png" data-orig-size="1962,1103" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="3379811757590036552-16-9" data-image-description="" data-image-caption="" data-medium-file="https://hackaday.com/wp-content/uploads/2025/09/3379811757590036552-16-9.png?w=400" data-large-file="https://hackaday.com/wp-content/uploads/2025/09/3379811757590036552-16-9.png?w=800" /></div>As USB-C PD becomes more and more common, it’s useful to have a tool that lets you understand exactly what it’s doing—no longer is it limited to just 5 V. <a href="https://hackaday.com/2025/09/15/usb-c-pd-decoded-a-diy-meter-and-logger-for-power-insights/" class="read-more">…read more</a>]]></description>
<content:encoded><![CDATA[<div><img width="800" height="450" src="https://hackaday.com/wp-content/uploads/2025/09/3379811757590036552-16-9.png?w=800" class="attachment-large size-large wp-post-image" alt="DIY USB-C PD Tools" style="margin: 0 auto; margin-bottom: 15px;" decoding="async" loading="lazy" srcset="https://hackaday.com/wp-content/uploads/2025/09/3379811757590036552-16-9.png 1962w, https://hackaday.com/wp-content/uploads/2025/09/3379811757590036552-16-9.png?resize=250,141 250w, https://hackaday.com/wp-content/uploads/2025/09/3379811757590036552-16-9.png?resize=400,225 400w, https://hackaday.com/wp-content/uploads/2025/09/3379811757590036552-16-9.png?resize=800,450 800w, https://hackaday.com/wp-content/uploads/2025/09/3379811757590036552-16-9.png?resize=1536,864 1536w" sizes="auto, (max-width: 800px) 100vw, 800px" data-attachment-id="829076" data-permalink="https://hackaday.com/2025/09/15/usb-c-pd-decoded-a-diy-meter-and-logger-for-power-insights/3379811757590036552-16-9/" data-orig-file="https://hackaday.com/wp-content/uploads/2025/09/3379811757590036552-16-9.png" data-orig-size="1962,1103" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="3379811757590036552-16-9" data-image-description="" data-image-caption="" data-medium-file="https://hackaday.com/wp-content/uploads/2025/09/3379811757590036552-16-9.png?w=400" data-large-file="https://hackaday.com/wp-content/uploads/2025/09/3379811757590036552-16-9.png?w=800" /></div><p>As USB-C PD becomes more and more common, it’s useful to have a tool that lets you understand exactly what it’s doing—no longer is it limited to just 5 V. This <a href="https://hackaday.io/project/204009" target="_blank">DIY USB-C PD tool</a>, sent in by [ludwin], unlocks the ability to monitor voltage and current, either on a small screen built into the device or using Wi-Fi.</p>
<p dir="auto">This design comes in two flavors: with and without screen. The OLED version is based on an STM32, and the small screen shows you the voltage, current, and wattage flowing through the device. The Wi-Fi PD logger version uses an ESP-01s to host a small website that shows you those same values, but with the additional feature of being able to log that data over time and export a CSV file with all the collected data, which can be useful when characterizing the power draw of your project over time.</p>
<p dir="auto">Both versions use the classic INA219 in conjunction with a 50 mΩ shunt resistor, allowing for readings in the 1 mA range. The enclosure is 3D-printed, and the files for it, as well as all the electronics and firmware, are available over on the <a href="https://github.com/lhm0/pd_logger" target="_blank">GitHub page</a>. Thanks [ludwin] for sending in this awesome little tool that can help show the performance of your USB-C PD project. Be sure to check out some of the other <a href="https://hackaday.com/blog/?s=usb-c+pd">USB-C PD</a> projects we’ve featured.</p>
<p><span id="more-828537"></span></p>
<p><iframe loading="lazy" title="Turn Any USB-C Charger Into a Lab Power Supply!" width="800" height="450" src="https://www.youtube.com/embed/RYa5lw3WNHM?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> </p>
]]></content:encoded>
<wfw:commentRss>https://hackaday.com/2025/09/15/usb-c-pd-decoded-a-diy-meter-and-logger-for-power-insights/feed/</wfw:commentRss>
<slash:comments>1</slash:comments>
<post-id xmlns="com-wordpress:feed-additions:1">828537</post-id>
<media:thumbnail url="https://hackaday.com/wp-content/uploads/2025/09/3379811757590036552-16-9.png" />
<media:content url="https://hackaday.com/wp-content/uploads/2025/09/3379811757590036552-16-9.png" medium="image">
<media:title type="html">3379811757590036552-16-9</media:title>
</media:content>
</item>
<item>
<title>Original Mac Limitations Can’t Stop You from Running AI Models</title>
<link>https://hackaday.com/2025/09/15/original-mac-limitations-cant-stop-you-from-running-ai-models/</link>
<comments>https://hackaday.com/2025/09/15/original-mac-limitations-cant-stop-you-from-running-ai-models/#comments</comments>
<dc:creator><![CDATA[Ian Bos]]></dc:creator>
<pubDate>Mon, 15 Sep 2025 08:00:00 +0000</pubDate>
<category><![CDATA[News]]></category>
<category><![CDATA[apple]]></category>
<category><![CDATA[Apple Macintosh]]></category>
<category><![CDATA[mnist databse]]></category>
<category><![CDATA[neural network]]></category>
<category><![CDATA[sdk]]></category>
<guid isPermaLink="false">https://hackaday.com/?p=829054</guid>
<description><![CDATA[<div><img width="800" height="450" src="https://hackaday.com/wp-content/uploads/2025/09/Writing-a-Neural-Network-for-the-First-Mac-17-7-screenshot.png?w=800" class="attachment-large size-large wp-post-image" alt="Neural network shown on original mac screen, handwritten 2 on left and predictions on right" style="margin: 0 auto; margin-bottom: 15px;" decoding="async" loading="lazy" srcset="https://hackaday.com/wp-content/uploads/2025/09/Writing-a-Neural-Network-for-the-First-Mac-17-7-screenshot.png 1280w, https://hackaday.com/wp-content/uploads/2025/09/Writing-a-Neural-Network-for-the-First-Mac-17-7-screenshot.png?resize=250,141 250w, https://hackaday.com/wp-content/uploads/2025/09/Writing-a-Neural-Network-for-the-First-Mac-17-7-screenshot.png?resize=400,225 400w, https://hackaday.com/wp-content/uploads/2025/09/Writing-a-Neural-Network-for-the-First-Mac-17-7-screenshot.png?resize=800,450 800w" sizes="auto, (max-width: 800px) 100vw, 800px" data-attachment-id="829061" data-permalink="https://hackaday.com/2025/09/15/original-mac-limitations-cant-stop-you-from-running-ai-models/writing-a-neural-network-for-the-first-mac-17-7-screenshot/" data-orig-file="https://hackaday.com/wp-content/uploads/2025/09/Writing-a-Neural-Network-for-the-First-Mac-17-7-screenshot.png" data-orig-size="1280,720" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="Writing a Neural Network for the First Mac 17-7 screenshot" data-image-description="" data-image-caption="" data-medium-file="https://hackaday.com/wp-content/uploads/2025/09/Writing-a-Neural-Network-for-the-First-Mac-17-7-screenshot.png?w=400" data-large-file="https://hackaday.com/wp-content/uploads/2025/09/Writing-a-Neural-Network-for-the-First-Mac-17-7-screenshot.png?w=800" /></div>Modern retrocomputing tricks often push old hardware and systems further than any of the back-in-the-day developers could have ever dreamed. How about a neural network on an original Mac? [KenDesigns] <a href="https://hackaday.com/2025/09/15/original-mac-limitations-cant-stop-you-from-running-ai-models/" class="read-more">…read more</a>]]></description>
<content:encoded><![CDATA[<div><img width="800" height="450" src="https://hackaday.com/wp-content/uploads/2025/09/Writing-a-Neural-Network-for-the-First-Mac-17-7-screenshot.png?w=800" class="attachment-large size-large wp-post-image" alt="Neural network shown on original mac screen, handwritten 2 on left and predictions on right" style="margin: 0 auto; margin-bottom: 15px;" decoding="async" loading="lazy" srcset="https://hackaday.com/wp-content/uploads/2025/09/Writing-a-Neural-Network-for-the-First-Mac-17-7-screenshot.png 1280w, https://hackaday.com/wp-content/uploads/2025/09/Writing-a-Neural-Network-for-the-First-Mac-17-7-screenshot.png?resize=250,141 250w, https://hackaday.com/wp-content/uploads/2025/09/Writing-a-Neural-Network-for-the-First-Mac-17-7-screenshot.png?resize=400,225 400w, https://hackaday.com/wp-content/uploads/2025/09/Writing-a-Neural-Network-for-the-First-Mac-17-7-screenshot.png?resize=800,450 800w" sizes="auto, (max-width: 800px) 100vw, 800px" data-attachment-id="829061" data-permalink="https://hackaday.com/2025/09/15/original-mac-limitations-cant-stop-you-from-running-ai-models/writing-a-neural-network-for-the-first-mac-17-7-screenshot/" data-orig-file="https://hackaday.com/wp-content/uploads/2025/09/Writing-a-Neural-Network-for-the-First-Mac-17-7-screenshot.png" data-orig-size="1280,720" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="Writing a Neural Network for the First Mac 17-7 screenshot" data-image-description="" data-image-caption="" data-medium-file="https://hackaday.com/wp-content/uploads/2025/09/Writing-a-Neural-Network-for-the-First-Mac-17-7-screenshot.png?w=400" data-large-file="https://hackaday.com/wp-content/uploads/2025/09/Writing-a-Neural-Network-for-the-First-Mac-17-7-screenshot.png?w=800" /></div><p>Modern retrocomputing tricks often push old hardware and systems further than any of the back-in-the-day developers could have ever dreamed. How about a neural network on an original Mac? [KenDesigns] does just this with a classic <a href="https://github.com/KenDesigns/MNIST.c" target="_blank">handwritten digit identification network running with an entire custom SDK</a>!</p>
<p>Getting such a piece of hardware running what is effectively multiple decades of machine learning is as hard as most could imagine. (The <a href="https://en.wikipedia.org/wiki/MNIST_database" target="_blank">MNIST dataset</a> used wasn’t even put together until the 90s.) Due to floating-point limitations on the original Mac, there are a variety of issues with attempting to run machine learning models. One of the several hoops to jump through required quantization of the model. This also allows the model to be squeezed into the limited RAM of the Mac.</p>
<p>Impressively, one of the most important features of [KenDesigns] setup is the custom SDK, allowing for the lack of macOS. This allows for incredibly nitty-gritty adjustments, but also requires an entire custom installation. Not all for nothing, though, as after some training manipulation, the model runs with some clear proficiency.</p>
<p>If you want to see it go, check out the video embedded below. Or if you just want to run it on your ancient Mac, <a href="https://github.com/KenDesigns/MacNIST68000" target="_blank">you’ll find a disk image here</a>. Emulators have even been tested to work for those without the original hardware. Newer hardware traditionally proves to be easier and more compact to use than these older toys; however, it doesn’t make it any less impressive to run a neural <a href="https://hackaday.com/2025/07/17/a-neural-net-for-a-graphing-calculator/">network on a calculator</a>!</p>
<p><span id="more-829054"></span></p>
<p><iframe loading="lazy" title="Writing a Neural Network for the First Mac" width="800" height="450" src="https://www.youtube.com/embed/TM4Spec7Eaw?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/2025/09/15/original-mac-limitations-cant-stop-you-from-running-ai-models/feed/</wfw:commentRss>
<slash:comments>5</slash:comments>
<post-id xmlns="com-wordpress:feed-additions:1">829054</post-id>
<media:thumbnail url="https://hackaday.com/wp-content/uploads/2025/09/Writing-a-Neural-Network-for-the-First-Mac-17-7-screenshot.png" />
<media:content url="https://hackaday.com/wp-content/uploads/2025/09/Writing-a-Neural-Network-for-the-First-Mac-17-7-screenshot.png" medium="image">
<media:title type="html">Writing a Neural Network for the First Mac 17-7 screenshot</media:title>
</media:content>
</item>
<item>
<title>UTF-8 Is Beautiful</title>
<link>https://hackaday.com/2025/09/14/utf-8-is-beautiful/</link>
<comments>https://hackaday.com/2025/09/14/utf-8-is-beautiful/#comments</comments>
<dc:creator><![CDATA[Jenny List]]></dc:creator>
<pubDate>Mon, 15 Sep 2025 05:00:00 +0000</pubDate>
<category><![CDATA[Software Hacks]]></category>
<category><![CDATA[character set]]></category>
<category><![CDATA[UTF-8]]></category>
<guid isPermaLink="false">https://hackaday.com/?p=828921</guid>
<description><![CDATA[<div><img width="800" height="450" src="https://hackaday.com/wp-content/uploads/2025/09/utf-8-featured.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/2025/09/utf-8-featured.jpg 800w, https://hackaday.com/wp-content/uploads/2025/09/utf-8-featured.jpg?resize=250,141 250w, https://hackaday.com/wp-content/uploads/2025/09/utf-8-featured.jpg?resize=400,225 400w" sizes="auto, (max-width: 800px) 100vw, 800px" data-attachment-id="829039" data-permalink="https://hackaday.com/2025/09/14/utf-8-is-beautiful/utf-8-featured/" data-orig-file="https://hackaday.com/wp-content/uploads/2025/09/utf-8-featured.jpg" data-orig-size="800,450" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="utf-8-featured" data-image-description="" data-image-caption="" data-medium-file="https://hackaday.com/wp-content/uploads/2025/09/utf-8-featured.jpg?w=400" data-large-file="https://hackaday.com/wp-content/uploads/2025/09/utf-8-featured.jpg?w=800" /></div>It’s likely that many Hackaday readers will be aware of UTF-8, the mechanism for incorporating diverse alphabets and other characters such as 💩 emojis. It takes the long-established 7-bit ASCII <a href="https://hackaday.com/2025/09/14/utf-8-is-beautiful/" class="read-more">…read more</a>]]></description>
<content:encoded><![CDATA[<div><img width="800" height="450" src="https://hackaday.com/wp-content/uploads/2025/09/utf-8-featured.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/2025/09/utf-8-featured.jpg 800w, https://hackaday.com/wp-content/uploads/2025/09/utf-8-featured.jpg?resize=250,141 250w, https://hackaday.com/wp-content/uploads/2025/09/utf-8-featured.jpg?resize=400,225 400w" sizes="auto, (max-width: 800px) 100vw, 800px" data-attachment-id="829039" data-permalink="https://hackaday.com/2025/09/14/utf-8-is-beautiful/utf-8-featured/" data-orig-file="https://hackaday.com/wp-content/uploads/2025/09/utf-8-featured.jpg" data-orig-size="800,450" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="utf-8-featured" data-image-description="" data-image-caption="" data-medium-file="https://hackaday.com/wp-content/uploads/2025/09/utf-8-featured.jpg?w=400" data-large-file="https://hackaday.com/wp-content/uploads/2025/09/utf-8-featured.jpg?w=800" /></div><p>It’s likely that many Hackaday readers will be aware of UTF-8, the mechanism for incorporating diverse alphabets and other characters such as <img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f4a9.png" alt="💩" class="wp-smiley" style="height: 1em; max-height: 1em;" /> emojis. It takes the long-established 7-bit ASCII character set and extends it into multiple bytes to represent many thousands of characters. How it does this may well be beyond that basic grasp, and [Vishnu] is here with <a href="https://iamvishnu.com/posts/utf8-is-brilliant-design" target="_blank">a primer that’s both fascinating and easy to read</a>.</p>
<p>UTF-8 extends ASCII from codes which fit in a single byte, to codes which can be up to four bytes long. The key lies in the first few bits of each byte, which specify how many bytes each character has, and then that it is a data byte. Since 7-bit ASCII codes always have a 0 in their most significant bit when mapped onto an 8-bit byte, compatibility with ASCII is ensured by the first 128 characters always beginning with a zero bit. It’s simple, elegant, and for any of who had to deal with character set hell in the days before it came along, magic.</p>
<p>We’ve talked surprisingly little about the internals of UTF-8 in the past, but it’s worthy of note that this is our second piece ever to use the poop emoji, after <a href="https://hackaday.com/2025/06/12/the-billionth-repository-on-github-is-really-shitty/">our coverage of the billionth GitHub repository</a>.</p>
<p>Emoji bales: Tony Hisgett, <a href="https://commons.wikimedia.org/wiki/File:Emoji_bales_(36765488293).jpg" target="_blank">CC BY 2.0</a>.</p>
]]></content:encoded>
<wfw:commentRss>https://hackaday.com/2025/09/14/utf-8-is-beautiful/feed/</wfw:commentRss>
<slash:comments>8</slash:comments>
<post-id xmlns="com-wordpress:feed-additions:1">828921</post-id>
<media:thumbnail url="https://hackaday.com/wp-content/uploads/2025/09/utf-8-featured.jpg" />
<media:content url="https://hackaday.com/wp-content/uploads/2025/09/utf-8-featured.jpg" medium="image">
<media:title type="html">utf-8-featured</media:title>
</media:content>
</item>
<item>
<title>e-Waste and Waste Oil Combine to Make Silver</title>
<link>https://hackaday.com/2025/09/14/e-waste-and-waste-oil-combine-to-make-silver/</link>
<comments>https://hackaday.com/2025/09/14/e-waste-and-waste-oil-combine-to-make-silver/#comments</comments>
<dc:creator><![CDATA[Tyler August]]></dc:creator>
<pubDate>Mon, 15 Sep 2025 02:00:00 +0000</pubDate>
<category><![CDATA[chemistry hacks]]></category>
<category><![CDATA[News]]></category>
<category><![CDATA[Chemistry]]></category>
<category><![CDATA[e-waste recycling]]></category>
<guid isPermaLink="false">https://hackaday.com/?p=829024</guid>
<description><![CDATA[<div><img width="800" height="533" src="https://hackaday.com/wp-content/uploads/2019/02/e-waste-tsunami.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/2019/02/e-waste-tsunami.jpg 5184w, https://hackaday.com/wp-content/uploads/2019/02/e-waste-tsunami.jpg?resize=250,167 250w, https://hackaday.com/wp-content/uploads/2019/02/e-waste-tsunami.jpg?resize=400,267 400w, https://hackaday.com/wp-content/uploads/2019/02/e-waste-tsunami.jpg?resize=800,533 800w, https://hackaday.com/wp-content/uploads/2019/02/e-waste-tsunami.jpg?resize=1536,1024 1536w, https://hackaday.com/wp-content/uploads/2019/02/e-waste-tsunami.jpg?resize=2048,1365 2048w" sizes="auto, (max-width: 800px) 100vw, 800px" data-attachment-id="345909" data-permalink="https://hackaday.com/2019/02/20/the-woeful-world-of-worldwide-e-waste/e-waste-tsunami/" data-orig-file="https://hackaday.com/wp-content/uploads/2019/02/e-waste-tsunami.jpg" data-orig-size="5184,3456" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="e-waste-tsunami" data-image-description="" data-image-caption="" data-medium-file="https://hackaday.com/wp-content/uploads/2019/02/e-waste-tsunami.jpg?w=400" data-large-file="https://hackaday.com/wp-content/uploads/2019/02/e-waste-tsunami.jpg?w=800" /></div>As the saying goes, “if it can’t be grown, it has to be mined”– but what about all the metals that have already been wrested from the bosom of the <a href="https://hackaday.com/2025/09/14/e-waste-and-waste-oil-combine-to-make-silver/" class="read-more">…read more</a>]]></description>
<content:encoded><![CDATA[<div><img width="800" height="533" src="https://hackaday.com/wp-content/uploads/2019/02/e-waste-tsunami.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/2019/02/e-waste-tsunami.jpg 5184w, https://hackaday.com/wp-content/uploads/2019/02/e-waste-tsunami.jpg?resize=250,167 250w, https://hackaday.com/wp-content/uploads/2019/02/e-waste-tsunami.jpg?resize=400,267 400w, https://hackaday.com/wp-content/uploads/2019/02/e-waste-tsunami.jpg?resize=800,533 800w, https://hackaday.com/wp-content/uploads/2019/02/e-waste-tsunami.jpg?resize=1536,1024 1536w, https://hackaday.com/wp-content/uploads/2019/02/e-waste-tsunami.jpg?resize=2048,1365 2048w" sizes="auto, (max-width: 800px) 100vw, 800px" data-attachment-id="345909" data-permalink="https://hackaday.com/2019/02/20/the-woeful-world-of-worldwide-e-waste/e-waste-tsunami/" data-orig-file="https://hackaday.com/wp-content/uploads/2019/02/e-waste-tsunami.jpg" data-orig-size="5184,3456" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="e-waste-tsunami" data-image-description="" data-image-caption="" data-medium-file="https://hackaday.com/wp-content/uploads/2019/02/e-waste-tsunami.jpg?w=400" data-large-file="https://hackaday.com/wp-content/uploads/2019/02/e-waste-tsunami.jpg?w=800" /></div><p>As the saying goes, “if it can’t be grown, it has to be mined”– but what about all the metals that have already been wrested from the bosom of the Earth? Once used, they can be recycled– or as this <a href="https://www.sciencedirect.com/science/article/pii/S1385894725029559" target="_blank">paper charmingly puts it, become ore for “urban mining” techniques</a>. The technique under discussion in the Chemical Engineering Journal is one that extracts metallic silver from e-waste using fatty acids and hydrogen peroxide.</p>
<figure id="attachment_829040" aria-describedby="caption-attachment-829040" style="width: 400px" class="wp-caption alignright"><a href="https://hackaday.com/wp-content/uploads/2025/09/silver-fatty-acid-inline.jpg"><img loading="lazy" decoding="async" data-attachment-id="829040" data-permalink="https://hackaday.com/2025/09/14/e-waste-and-waste-oil-combine-to-make-silver/silver-fatty-acid-inline/" data-orig-file="https://hackaday.com/wp-content/uploads/2025/09/silver-fatty-acid-inline.jpg" data-orig-size="791,651" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="silver-fatty-acid-inline" data-image-description="" data-image-caption="<p>This “graphical abstract” gives the rough idea.</p>
" data-medium-file="https://hackaday.com/wp-content/uploads/2025/09/silver-fatty-acid-inline.jpg?w=400" data-large-file="https://hackaday.com/wp-content/uploads/2025/09/silver-fatty-acid-inline.jpg?w=759" class="size-medium wp-image-829040" src="https://hackaday.com/wp-content/uploads/2025/09/silver-fatty-acid-inline.jpg?w=400" alt="" width="400" height="329" srcset="https://hackaday.com/wp-content/uploads/2025/09/silver-fatty-acid-inline.jpg 791w, https://hackaday.com/wp-content/uploads/2025/09/silver-fatty-acid-inline.jpg?resize=250,206 250w, https://hackaday.com/wp-content/uploads/2025/09/silver-fatty-acid-inline.jpg?resize=400,329 400w, https://hackaday.com/wp-content/uploads/2025/09/silver-fatty-acid-inline.jpg?resize=759,625 759w" sizes="auto, (max-width: 400px) 100vw, 400px" /></a><figcaption id="caption-attachment-829040" class="wp-caption-text">This “graphical abstract” gives the rough idea.</figcaption></figure>
<p>Right now, recycling makes up about 17% of the global silver supply. As <a href="https://hackaday.com/series_of_posts/ore-formation/">rich sources of ore dry up</a>, and the world moves to more sustainable footing, that number can only go up. Recycling e-waste already happens, of course, but in messy, dangerous processes that are generally banned in the developed world. (Like open burning, of plastic, gross.)</p>
<p>This paper describes a “green” process that even the most fervant granola-munching NIMBY wouldn’t mind have in their neighborhood: hot fatty acids (AKA oil) are used as an organic solvent to dissolve metals from PCB and wire. The paper mentions sourcing the solvent from waste sunflower, safflower or canola oil. As you might imagine, most metals, silver included, are not terribly soluble in sunflower oil, but a little refining and the addition of 30% hydrogen peroxide changes that equation.</p>
<p>More than just Ag is picked up in this process, but the oils do select for silver over other metals. The paper presents a way to then selectively precipitate out the silver as silver oleate using ethanol and flourescent light. The oleate compound can then be easily washed and burnt to produce pure silver.</p>
<p>The authors of the paper take the time to demonstrate the process on a silver-plated keyboard connector, so there is proof of concept on real e-waste. Selecting for silver means leaving behind gold, however, so we’re not sure how the economics of this method will stack up.</p>
<p>Of course, when Hackaday talks about <a href="https://hackaday.com/tag/e-waste-recycling/">recycling e-waste</a>, it’s usually more on the <a href="https://hackaday.com/2021/11/30/recycled-parts-round-out-soap-shaped-electric-car/">“reuse” part</a> of “reduce, reuse, recycle”. After all, one man’s e-waste is another man’s parts bin–<a href="https://hackaday.com/2024/05/25/one-mans-trash-is-a-rare-60000-historical-computer/">or priceless historical artifact</a>.</p>
<p>Thanks to [Brian] for the tip.Your tips can be easily recycled into Hackaday posts through an environmentally-friendly process <a href="https://hackaday.com/submit-a-tip/">via our tipsline. </a></p>
]]></content:encoded>
<wfw:commentRss>https://hackaday.com/2025/09/14/e-waste-and-waste-oil-combine-to-make-silver/feed/</wfw:commentRss>
<slash:comments>8</slash:comments>
<post-id xmlns="com-wordpress:feed-additions:1">829024</post-id>
<media:thumbnail url="https://hackaday.com/wp-content/uploads/2019/02/e-waste-tsunami.jpg" />
<media:content url="https://hackaday.com/wp-content/uploads/2019/02/e-waste-tsunami.jpg" medium="image">
<media:title type="html">e-waste-tsunami</media:title>
</media:content>
<media:content url="https://hackaday.com/wp-content/uploads/2025/09/silver-fatty-acid-inline.jpg?w=400" medium="image" />
</item>
<item>
<title>Hackaday Links: September 14, 2025</title>
<link>https://hackaday.com/2025/09/14/hackaday-links-september-14-2025/</link>
<comments>https://hackaday.com/2025/09/14/hackaday-links-september-14-2025/#respond</comments>
<dc:creator><![CDATA[Dan Maloney]]></dc:creator>
<pubDate>Sun, 14 Sep 2025 23:00:50 +0000</pubDate>
<category><![CDATA[Hackaday Columns]]></category>
<category><![CDATA[Hackaday links]]></category>
<category><![CDATA[Slider]]></category>
<category><![CDATA[atomic]]></category>
<category><![CDATA[biosignature]]></category>
<category><![CDATA[crt]]></category>
<category><![CDATA[hackaday links]]></category>
<category><![CDATA[Manhattan Project]]></category>
<category><![CDATA[mars]]></category>
<category><![CDATA[nasa]]></category>
<category><![CDATA[nuclear]]></category>
<category><![CDATA[Perseverance]]></category>
<category><![CDATA[redox]]></category>
<category><![CDATA[retro]]></category>
<category><![CDATA[video]]></category>
<guid isPermaLink="false">https://hackaday.com/?p=815030&preview=true&preview_id=815030</guid>
<description><![CDATA[<div><img width="800" height="430" src="https://hackaday.com/wp-content/uploads/2014/11/had-links-banner.jpg?w=800" class="attachment-large size-large wp-post-image" alt="Hackaday Links Column Banner" style="margin: 0 auto; margin-bottom: 15px;" decoding="async" loading="lazy" srcset="https://hackaday.com/wp-content/uploads/2014/11/had-links-banner.jpg 800w, https://hackaday.com/wp-content/uploads/2014/11/had-links-banner.jpg?resize=250,134 250w, https://hackaday.com/wp-content/uploads/2014/11/had-links-banner.jpg?resize=400,215 400w" sizes="auto, (max-width: 800px) 100vw, 800px" data-attachment-id="137037" data-permalink="https://hackaday.com/2014/11/09/hackaday-links-november-9-2014/had-links-banner/" data-orig-file="https://hackaday.com/wp-content/uploads/2014/11/had-links-banner.jpg" data-orig-size="800,430" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="Hackaday Links" data-image-description="" data-image-caption="" data-medium-file="https://hackaday.com/wp-content/uploads/2014/11/had-links-banner.jpg?w=400" data-large-file="https://hackaday.com/wp-content/uploads/2014/11/had-links-banner.jpg?w=800" /></div>Is it finally time to cue up the Bowie? Or was the NASA presser on Wednesday announcing new findings of potential Martian biosignatures from Perseverance just another in a long <a href="https://hackaday.com/2025/09/14/hackaday-links-september-14-2025/" class="read-more">…read more</a>]]></description>
<content:encoded><![CDATA[<div><img width="800" height="430" src="https://hackaday.com/wp-content/uploads/2014/11/had-links-banner.jpg?w=800" class="attachment-large size-large wp-post-image" alt="Hackaday Links Column Banner" style="margin: 0 auto; margin-bottom: 15px;" decoding="async" loading="lazy" srcset="https://hackaday.com/wp-content/uploads/2014/11/had-links-banner.jpg 800w, https://hackaday.com/wp-content/uploads/2014/11/had-links-banner.jpg?resize=250,134 250w, https://hackaday.com/wp-content/uploads/2014/11/had-links-banner.jpg?resize=400,215 400w" sizes="auto, (max-width: 800px) 100vw, 800px" data-attachment-id="137037" data-permalink="https://hackaday.com/2014/11/09/hackaday-links-november-9-2014/had-links-banner/" data-orig-file="https://hackaday.com/wp-content/uploads/2014/11/had-links-banner.jpg" data-orig-size="800,430" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="Hackaday Links" data-image-description="" data-image-caption="" data-medium-file="https://hackaday.com/wp-content/uploads/2014/11/had-links-banner.jpg?w=400" data-large-file="https://hackaday.com/wp-content/uploads/2014/11/had-links-banner.jpg?w=800" /></div><p>Is it finally time to <a href="https://www.youtube.com/watch?v=ft3b1-Cm-0M" target="_blank">cue up the Bowie</a>? Or was <a href="https://youtu.be/HTcQwnSimk8?t=752" target="_blank">the NASA presser</a> on Wednesday announcing new findings of potential Martian biosignatures from <em>Perseverance</em> just another in a long line of “We are not alone” teases that turn out to be false alarms? Time will tell, but from <a href="https://www.nature.com/articles/s41586-025-09413-0" target="_blank">the peer-reviewed paper</a> released simultaneously with the news conference, it appears that biological activity is now the simplest explanation for the geochemistry observed in some rock samples analyzed by the rover last year. There’s a lot in the paper to unpack, most of which is naturally directed at planetary scientists and therefore somewhat dense reading. But the gist is that <em>Perseverance</em> sampled some sedimentary rocks in Jezero crater back in July of 2024 with the <a href="https://hackaday.com/2022/01/27/sherloc-and-the-search-for-life-on-mars/">SHERLOC</a> and <a href="https://hackaday.com/2020/11/10/sending-3d-printed-parts-to-mars-a-look-inside-jpls-additive-manufacturing-center/">PIXL</a> instruments, extensive analysis of which suggests the presence of “reaction fronts” within the rock that produced iron phosphate and iron sulfide minerals in characteristic shapes, such as the ring-like formations they dubbed “leopard spots,” and the pinpoint “poppy seed” formations.</p>
<p><span id="more-815030"></span></p>
<p>The big deal with these redox reactions is that they seem to have occurred <em>after</em> the material forming the rock was deposited; in other words, possibly by microorganisms that settled to the bottom of a body of water along with the mineral particles. On Earth, there are a ton of aquatic microbes that make a living off this kind of biochemistry and behave the same way, and have been doing so since the Precambrian era. Indeed, similar features known as “reduction haloes” are sometimes seen in modern marine sediments on Earth. There’s also evidence that these reactions occurred at temperatures consistent with liquid water, which rules out abiotic mechanisms for reducing sulfates to sulfides, since those require high temperatures.</p>
<p>Putting all this together, the paper’s authors come to the conclusion that the simplest explanation for all their observations is the activity of ancient Martian microbes. But they’re very careful to say that there may still be a much less interesting abiotic explanation that they haven’t thought of yet. They really went out of their way to find a boring explanation for this, though, for which they deserve a lot of credit. Here’s hoping that they’re on the right track, and that we’ll someday be able to retrieve <a href="https://hackaday.com/2020/07/30/geocaching-on-mars-how-perseverance-will-seal-martian-samples-with-a-return-to-earth-in-mind/">the cached samples</a> and give them a proper lab analysis here on Earth.</p>
<p><iframe loading="lazy" title="NASA Presser Reveals New Clues About Ancient Life on Planet Mars" width="800" height="450" src="https://www.youtube.com/embed/HTcQwnSimk8?start=752&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>Back here on Earth, <a href="https://www.bbc.com/future/article/20250911-the-people-who-hunt-down-old-tvs" target="_blank">the BBC has a nice article</a> about aficionados of old-school CRT televisions and the great lengths they take to collect and preserve them. Thirty-odd years on from the point at which we switched from CRT displays and TVs to flat-panel displays, seemingly overnight, it’s getting harder to find the old tube-based units. But given that hundreds of millions of CRTs were made over about 60 years, there’s still a lot of leaded glass out there. The story mentions one collector, Joshi, who scored a lot of ten displays for only $2,500 — a lot for old TVs, but these were professional video monitors, the kind that used to line the walls of TV studio control rooms and video editing bays. They’re much different than consumer-grade equipment, and highly sought by retro gamers who prize the look and feel of a CRT. We understand the sentiment, and it makes us cringe a bit to think of all the PVMs, TVs, and monitors we’ve tossed out over the years. Who knew?</p>
<p>And finally — yeah, a little short this week, sorry — Brian Potter has another great essay over at Construction Physics, this time regarding <a href="https://www.construction-physics.com/p/an-engineering-history-of-the-manhattan" target="_blank">the engineering behind the Manhattan Project</a>. What strikes us about the entire effort to produce the first atomic bombs is that everyone had a lot of faith in the whole “That which is not forbidden by the laws of physics is just an engineering problem” thing. They knew what the physics said would happen when you got just the right amount of fissile material together in one place under the right conditions, but they had no idea how they were going to do that. They had to conquer huge engineering problems, turning improbable ideas like centrifugal purification of gaseous uranium and explosive assembly with shaped charges into practical, fieldable technologies. And what’s more, they had to do it under secretive conditions and under the ultimate in time constraints. It’s an interesting read, as is Richard Rhodes’s “The Making of the Atomic Bomb,” which we read back in the late 1980s and which Brian mentions in the essay. Both are highly recommended for anyone interested in how the Atomic Age was born.</p>
]]></content:encoded>
<wfw:commentRss>https://hackaday.com/2025/09/14/hackaday-links-september-14-2025/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
<post-id xmlns="com-wordpress:feed-additions:1">815030</post-id>
<media:thumbnail url="https://hackaday.com/wp-content/uploads/2014/11/had-links-banner.jpg" />
<media:content url="https://hackaday.com/wp-content/uploads/2014/11/had-links-banner.jpg" medium="image">
<media:title type="html">Hackaday Links</media:title>
</media:content>
</item>
<item>
<title>Retro x86 with 486Tang</title>
<link>https://hackaday.com/2025/09/14/retro-x86-with-486tang/</link>
<comments>https://hackaday.com/2025/09/14/retro-x86-with-486tang/#comments</comments>
<dc:creator><![CDATA[Al Williams]]></dc:creator>
<pubDate>Sun, 14 Sep 2025 20:00:00 +0000</pubDate>
<category><![CDATA[FPGA]]></category>
<category><![CDATA[Retrocomputing]]></category>
<category><![CDATA[80486]]></category>
<category><![CDATA[fpga]]></category>
<category><![CDATA[Gowin]]></category>
<category><![CDATA[MiSTER]]></category>
<category><![CDATA[Tang]]></category>
<guid isPermaLink="false">https://hackaday.com/?p=828886</guid>
<description><![CDATA[<div><img width="800" height="308" src="https://hackaday.com/wp-content/uploads/2025/09/fpga.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/2025/09/fpga.png 800w, https://hackaday.com/wp-content/uploads/2025/09/fpga.png?resize=250,96 250w, https://hackaday.com/wp-content/uploads/2025/09/fpga.png?resize=400,154 400w" sizes="auto, (max-width: 800px) 100vw, 800px" data-attachment-id="828904" data-permalink="https://hackaday.com/2025/09/14/retro-x86-with-486tang/fpga-41/" data-orig-file="https://hackaday.com/wp-content/uploads/2025/09/fpga.png" data-orig-size="800,308" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="fpga" data-image-description="" data-image-caption="" data-medium-file="https://hackaday.com/wp-content/uploads/2025/09/fpga.png?w=400" data-large-file="https://hackaday.com/wp-content/uploads/2025/09/fpga.png?w=800" /></div>Tang FPGA boards are affordable, and [nand2mario] has been trying to get an x86 core running on one for a while. Looks like it finally worked out, as there is <a href="https://hackaday.com/2025/09/14/retro-x86-with-486tang/" class="read-more">…read more</a>]]></description>
<content:encoded><![CDATA[<div><img width="800" height="308" src="https://hackaday.com/wp-content/uploads/2025/09/fpga.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/2025/09/fpga.png 800w, https://hackaday.com/wp-content/uploads/2025/09/fpga.png?resize=250,96 250w, https://hackaday.com/wp-content/uploads/2025/09/fpga.png?resize=400,154 400w" sizes="auto, (max-width: 800px) 100vw, 800px" data-attachment-id="828904" data-permalink="https://hackaday.com/2025/09/14/retro-x86-with-486tang/fpga-41/" data-orig-file="https://hackaday.com/wp-content/uploads/2025/09/fpga.png" data-orig-size="800,308" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="fpga" data-image-description="" data-image-caption="" data-medium-file="https://hackaday.com/wp-content/uploads/2025/09/fpga.png?w=400" data-large-file="https://hackaday.com/wp-content/uploads/2025/09/fpga.png?w=800" /></div><p>Tang FPGA boards are affordable, and [nand2mario] has been trying to get an x86 core running on one for a while. Looks like it finally worked out, as there is an early version of the <a href="https://github.com/nand2mario/486tang" target="_blank">ao486 design on a Tang FPGA board using a Gowin device</a>. That core’s available on the MiSTer platform, which emulates games using an Altera Cyclone device.</p>
<p>Of course, porting something substantial between FPGA architectures is not trivial. In addition, [nand2mario] made some changes. The original core uses DDR3 memory, but for the Tang and the 486, SDRAM makes more sense. The only problem is that the Tang’s SDRAM is 16 bits wide, which would imply you need two cycles per 32-bit access. To mitigate this, the memory system runs at twice the main clock frequency. Of course, that’s kind of double data rate, but not in the same way as DDR memory.</p>
<p><span id="more-828886"></span></p>
<p>The MiSTer uses an ARM processor’s high-speed channel to link to the FPGA for disk access. The Tang board lacks a high-speed interface for this, so the disk storage is now on an SD card that the FPGA directly accesses. In addition, the first 128K of the SD card stores configuration settings that the FPGA now reads from that on boot up.</p>
<p>One of the most interesting things about the development was the use of Verilator to simulate the entire system, including things like the VGA card. It was possible to simulate booting to a DOS prompt, although it was slower than being on actual hardware, as you might expect. But, this lets you poke at the entire state of the system in a way that would be difficult on the actual hardware.</p>
<p>Want to give it a try? The Tang boards are cheap. (We have one on a shelf waiting for a future post.) Or, you could go the simulation route.</p>
<p><a href="https://hackaday.com/2025/05/19/mister-for-mortals-meet-the-multisystem-2/">MiSTer</a> has really put FPGAs on a lot of people’s radar. If you prefer the C64, that’s <a href="https://hackaday.com/tag/tang-nano-9k/">available on a Tang board</a>, too.</p>
]]></content:encoded>
<wfw:commentRss>https://hackaday.com/2025/09/14/retro-x86-with-486tang/feed/</wfw:commentRss>
<slash:comments>4</slash:comments>
<post-id xmlns="com-wordpress:feed-additions:1">828886</post-id>
<media:thumbnail url="https://hackaday.com/wp-content/uploads/2025/09/fpga.png" />
<media:content url="https://hackaday.com/wp-content/uploads/2025/09/fpga.png" medium="image">
<media:title type="html">fpga</media:title>
</media:content>
</item>
</channel>
</rss>
If you would like to create a banner that links to this page (i.e. this validation result), do the following:
Download the "valid RSS" banner.
Upload the image to your own server. (This step is important. Please do not link directly to the image on this server.)
Add this HTML to your page (change the image src
attribute if necessary):
If you would like to create a text link instead, here is the URL you can use:
http://www.feedvalidator.org/check.cgi?url=https%3A//hackaday.com/blog/feed/