<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Engineering Experiments on Ecostack</title>
    <link>https://ecostack.dev/categories/engineering-experiments/</link>
    <description>Recent content in Engineering Experiments on Ecostack</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <copyright>© 2026 Sebastian Scheibe</copyright>
    <lastBuildDate>Sun, 30 Aug 2026 18:00:00 +0800</lastBuildDate><atom:link href="https://ecostack.dev/categories/engineering-experiments/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Reverse-engineering The Witcher 3 saves between Nintendo Switch and PC</title>
      <link>https://ecostack.dev/posts/witcher-3-switch-pc-save-converter/</link>
      <pubDate>Sun, 30 Aug 2026 18:00:00 +0800</pubDate>
      
      <guid>https://ecostack.dev/posts/witcher-3-switch-pc-save-converter/</guid>
      <description>Moving a The Witcher 3: Wild Hunt save between Nintendo Switch and PC sounds as though it should be a simple file-copying exercise. Both versions describe the same game state, and CD PROJEKT RED even provides an official cross-progression system.
But a raw manual save exported from a Switch does not have the same outer format - or even the same filename - as its PC counterpart.
I compared genuine saves, tested existing converters, and built a bidirectional converter in Go to find out exactly what changes between the two platforms.</description>
      <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://ecostack.dev/posts/witcher-3-switch-pc-save-converter/featured.webp" />
    </item>
    
    <item>
      <title>Deterministic RSA Key Generation with Rust and WebAssembly</title>
      <link>https://ecostack.dev/posts/wasm-rust-zero-knowledge-auth/</link>
      <pubDate>Wed, 01 Jan 2025 11:11:10 +0800</pubDate>
      
      <guid>https://ecostack.dev/posts/wasm-rust-zero-knowledge-auth/</guid>
      <description>While exploring a browser authentication project, I needed to generate the same RSA key pair from the same seed. Web Crypto provides key generation, but it does not accept a caller-supplied seed. Rust compiled to WebAssembly makes it possible to experiment with that missing capability.
Correction, September 2026: the earlier version used RSA-OAEP with signing operations and described the surrounding design as zero-knowledge authentication. The API combination was invalid, and deterministic key generation alone does not justify that security claim.</description>
      <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://ecostack.dev/posts/wasm-rust-zero-knowledge-auth/featured.webp" />
    </item>
    
    <item>
      <title>Testing Matters: The Node.js Buffer Write Bug in Version 22.7.0</title>
      <link>https://ecostack.dev/posts/nodejs-buffer-bug/</link>
      <pubDate>Sat, 24 Aug 2024 22:23:39 +0800</pubDate>
      
      <guid>https://ecostack.dev/posts/nodejs-buffer-bug/</guid>
      <description>Introduction #   Imagine this: A critical piece of your infrastructure—software used by millions—suddenly fails, not because of a massive overhaul or a complicated feature, but due to a seemingly minor update. No one notices the flaw until it’s too late, and the damage ripples through countless applications. This isn’t a hypothetical scenario; it’s a reality that recently unfolded in the world of Node.js.
With the release of Node.js 22.</description>
      <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://ecostack.dev/posts/nodejs-buffer-bug/featured.webp" />
    </item>
    
    <item>
      <title>Connect to Bluetooth Low Energy devices using Golang</title>
      <link>https://ecostack.dev/posts/go-bluetooth-low-energy/</link>
      <pubDate>Sat, 10 Dec 2022 11:05:22 +0800</pubDate>
      
      <guid>https://ecostack.dev/posts/go-bluetooth-low-energy/</guid>
      <description>Let&amp;rsquo;s get right into the weeds on how to use Go to connect to Bluetooth Low Energy (BLE) devices.
If you are unclear of how BLE works, please read this here first: https://learn.adafruit.com/introduction-to-bluetooth-low-energy . We will be using BLE terminology which is required to progress.
In the following, we will use the TinyGo Bluetooth Low Energy library to connect to a thermometer. The thermometer will be the peripheral and our computer the central.</description>
      <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://ecostack.dev/posts/go-bluetooth-low-energy/featured.webp" />
    </item>
    
    <item>
      <title>WebAssembly: Go vs Rust vs AssemblyScript</title>
      <link>https://ecostack.dev/posts/wasm-tinygo-vs-rust-vs-assemblyscript/</link>
      <pubDate>Sun, 27 Nov 2022 01:23:47 +0800</pubDate>
      
      <guid>https://ecostack.dev/posts/wasm-tinygo-vs-rust-vs-assemblyscript/</guid>
      <description>Imagine you are working on the next big thing that runs in the browser, and it requires some heavy-duty code, which need to run fast and efficient. You remember that your friend Jack told you about WebAssembly (Wasm), which supposedly runs faster than JavaScript (JS), so you decide to check it out.
The thing you are working on involves sorting large amounts of data, so you test a pure JS implementation first.</description>
      <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://ecostack.dev/posts/wasm-tinygo-vs-rust-vs-assemblyscript/featured.webp" />
    </item>
    
  </channel>
</rss>
