The Curious Engineer

All blogs / Reverse engineering

Wejn.org

wejn.org

Wejn’s corner on the interwebs, containing articles about computers (Linux), programming, system administration, and whatever else takes my fancy.

Reverse engineeringElectronicsLinux / Unix

’00’05’10’15’20’25
Posts
145 from 31 Dec 1999 to 28 Oct 2026
Posting
monthly (17 in the last year)
Kind
personal blog
Feed
https://wejn.org/feed.xml

2026 15

  1. Hunting down a bug in the Colour library
  2. Page2
  3. Page3
  4. Unbricking Ocean Optics Spectrometers
  5. I²C Write Bug in Ocean Optics Spectrometers
  6. Sniffing I²C traffic visually with i2cdriver
  7. Anatomy of an Ocean Optics USB-DT (Deuterium-Tungsten Light)
  8. White Rose Timer on PineTime watch
  9. FreeCAD 1.1 killed Fusion 360 for me
  10. ZFS snapshotting done better
  11. Replacing APC Smart-UPS SC450RM battery
  12. Leveling the Průša Core One+ bed
  13. Swisscom 2025 security.txt challenge: full writeup
  14. Visualize those pesky rainbows (interactively) 2026-01-14
  15. On the unreasonable difficulty of plotting pretty rainbow, fast 2026-01-10

2025 13

  1. Overengineering float serialization for no good reason 2025-12-25
  2. Designing a 3d-printed clasp for a sports gear bag 2025-10-31
  3. LLM: Write production-ready code! 2025-10-25
  4. Accidentally solving the Swisscom 2025 security.txt challenge 2025-09-27
  5. Failing to calibrate flame-s-vis-nir-es spectrometer 2025-07-31
  6. Philips Hue White Ambiance is actually terrible... 2025-07-17
  7. Torch Bearer Spectrometer UI 2025-07-05
  8. ESP32 as a Zigbee console 2025-05-25
  9. Final stretch for e32wamb: PCB, cables, antenna holder 2025-05-11
  10. Introducing e32wamb: firmware for esp32-c6 based White Ambiance light 2025-03-24
  11. Testing ESP32's LEDC "non-blocking" fading 2025-03-15
  12. How-To: timestamp and git-hash version esp32 firmware builds 2025-03-02
  13. Zigbee: Hue-llo world! 2025-01-05

2024 18

  1. Hue Engine: Reversing the PWM functions 2024-12-17
  2. Hue Engine: Dumping the PWM data 2024-12-15
  3. Hue Engine: Basic reconnaissance 2024-12-15
  4. Project intro: Reversing Philips Hue light driver 2024-12-15
  5. Rooting Hue Bridge with firmware 1967054020 2024-11-20
  6. Proper ZFS setup for peace of mind 2024-11-17
  7. Running postfix as send-only on Alpine Linux 2024-11-17
  8. Putting a piglet picture on my Alarmo 2024-11-10
  9. From zero to radio amateur license in Switzerland 2024-10-28
  10. Safely aborting long running shell scripts 2024-09-01
  11. Grub 2.12 broke my secureboot setup (again) 2024-08-17
  12. How to ditch grub for UEFI (secure)booting 2024-08-17
  13. Deep dive into Fibonacci computation in Ruby 2024-07-07
  14. Quickfixing the Jekyll SEO plugin (to ingest page description) 2024-05-26
  15. Easily hosting GIT repos on forgejo 2024-05-26
  16. Adding a layer indicator light to Svalboard 2024-04-18
  17. The One True Way™ to handle temporary files 2024-03-01
  18. Serving CA certificates on the cheap 2024-01-15

2023 17

  1. Extracting data from Goethe Zertifikat B1 Wortliste pdf 2023-12-10
  2. How to recover deleted files from Google Drive 2023-11-28
  3. A love letter to the DataHand class of keyboards 2023-11-24
  4. Running traefik in a less braindead way 2023-11-05
  5. Implementing toy RSA in Ruby, on a dare 2023-10-27
  6. Installing Podman on Alpine Linux 2023-09-16
  7. Project intro: Going Cloud Native for internal services 2023-09-16
  8. Running one's own root Certificate Authority in 2023 2023-09-16
  9. Upgrading grub on my alpine with secureboot setup 2023-08-26
  10. How to avoid having ssh mangle spaces in command-line args 2023-07-16
  11. Parallelize batch runs with style 2023-05-23
  12. How to split a big XCI/NSP file to store it on a FAT32 2023-05-05
  13. Parallelize YouTube downloads 2023-02-28
  14. Making SVD-Loader for Ghidra play nice with RP2040 2023-02-25
  15. Nerdsniped: clang++-13 infinite loop bug 2023-02-14
  16. IPv6 Unique Local Addresses (ULA) for the win 2023-02-04
  17. Three common Regular Expression gotchas 2023-01-24

2022 17

  1. Fixing IPv6 on UniFi guest wireless network 2022-11-05
  2. Setting Xorg screen layout by display serial numbers 2022-09-25
  3. Moving away from Autodesk Fusion 360... to where? 2022-08-14
  4. Understanding the Nintendo Switch secure boot vulnerabilities 2022-05-22
  5. Improving physical security at a hotel 2022-04-27
  6. How to run an unattended install of Alpine Linux 2022-04-08
  7. Tinyrenderer in Elixir (part of it, anyway) 2022-03-27
  8. Traveling 20+ years back in time 2022-03-11
  9. Generating birthday party invitations 2022-03-07
  10. How to install low dependency Let's Encrypt client 2022-02-27
  11. Upgrading SSL (TLS) on Kerio Workspace 2.1.4 2022-02-24
  12. Three commands to make serial console awesome 2022-02-20
  13. Replacing pkexec with sudo 2022-01-28
  14. Configuring IPv6 on EdgeRouter for Fiber7 and PiHole 2022-01-24
  15. Fixing memif's poor performance in a VPP tutorial 2022-01-22
  16. BEAMitude: What if GenServer.call times out? 2022-01-15
  17. Getting Erlang's observer working on Alpine Linux 2022-01-09

2021 35

  1. Rethinking number formatting 2021-12-18
  2. How to call renameat2 syscall in Ruby 2021-12-10
  3. Controlling fan speed the right way 2021-11-23
  4. Loadtesting EdgeRouter 4 in more depth 2021-11-21
  5. Making AlpineLinux load ZFS keys for all pools on startup 2021-10-31
  6. Reversing Yamaha SR-C20A [by Michael Obst] 2021-10-31
  7. Engineering a better Anagrammer, part II 2021-10-12
  8. Fixing grub 2.06 "error: verification requested but nobody cares" 2021-09-26
  9. Engineering a better Anagrammer, part I 2021-09-19
  10. Beating procrastination with these 4 simple (but hard) techniques 2021-09-12
  11. Arbitrary workflows with GitHub Actions for fun and pages 2021-08-20
  12. Loadtesting bunch of routers 2021-07-19
  13. Succeeding at a network loadtest 2021-07-17
  14. Failing at a network loadtest (for now) 2021-06-28
  15. Graphviz plugin for Jekyll 2021-06-27
  16. Adding capacity to an existing ext3-on-luks-on-LVM-on-raid1 setup 2021-06-27
  17. Making an iOS custom dialer app with Shortcuts and elm-spa 2021-06-04
  18. Cancel Shadow banning culture is alive and well at Hacker News 2021-05-26
  19. How cryptocurrencies keep going to the moon 2021-05-24
  20. 6 burning questions for the self-proclaimed blockchain singularity (dfinity) 2021-05-08
  21. Putting an old digital clock (with an outdoor thermometer) on steroids 2021-05-01
  22. Yamaha YAS-207 vs. Shairport Sync over TOSLINK 2021-04-25
  23. Yamaha YAS-207's Minimal Client (and a Soundbar Fake) 2021-04-24
  24. Yamaha YAS-207's Bluetooth protocol reversed 2021-04-19
  25. Yamaha YAS-207's Bluetooth protocol: first real progress 2021-04-18
  26. Streaming Bluetooth Capture Data to Wireshark without Btsnoop Net Support Enabled 2021-04-18
  27. Yamaha YAS-207's Bluetooth protocol: basic recon 2021-04-18
  28. Reversing the Yamaha YAS-207 infrared remote protocol 2021-04-11
  29. Multi-weekend project intro: Putting the fear of AirPlay into Yamaha YAS-207 soundbar 2021-04-11
  30. Comparison of USB Bluetooth adapters in Linux 2021-04-11
  31. The evolution of (my) note taking 2021-04-09
  32. Urbit :: the good, the bad, and the insane 2021-02-17
  33. How to make a USB cable for APC Smart-UPS SC450RMI1U 2021-02-13
  34. Setting up secure boot with fully encrypted filesystems on Alpine Linux 2021-01-31
  35. Fixing IKEA Trofast lid with a simple 3d model 2021-01-16

2020 5

  1. Cracking the three.js object fitting (to camera) nut 2020-12-27
  2. 3D printed curtain holder 2020-12-13
  3. Fixing an umbrella with 3D printing 2020-12-09
  4. Designing a curtain rod holder for 3D printing in Fusion 360 2020-11-24
  5. Designing a 3d-printed anti-gravity pen holder 2020-04-11

2019 1

  1. Designing and 3d-printing a jacket button 2019-08-01

2018 1

  1. Designing a flower stand for 3D printing 2018-06-29

2017 2

  1. Designing a towel rack for 3D printing in Fusion 360 2017-12-11
  2. Designing a 3d printed vegetable peeler hook 2017-09-11

2011 1

  1. Convert arbitrary IP range to a set of CIDR 2011-02-14

2009 2

  1. Flush INBOX via IMAP 2009-07-06
  2. How to fix the `AC_LIB_PREPARE_PREFIX is m4_require'd but not m4_defun'd` 2009-04-18

2008 5

  1. Wordpress leading whitespace fix 2008-10-06
  2. How to setup passwordless disk encryption in Debian Etch 2008-07-06
  3. A HTTP(S) healthcheck script 2008-04-03
  4. Why I LOVE Apache httpd hooks and pools 2008-03-25
  5. A simple Ruby-based HTTP request tracer 2008-03-04

2006 6

  1. GeoIP update client + server 2006-09-01
  2. Apache patch to optionally disable Partial Content 2006-07-23
  3. How to hunt for kernel memory leaks 2006-03-28
  4. Master's Thesis 2006-02-28
  5. Diplomová práce 2006-02-28
  6. Spec.rb, a saner alternative to Markdown 2006-01-05

2005 6

  1. Guard free space and status of your RAID devices 2005-08-31
  2. Eicar and Gtube are your friends 2005-07-14
  3. How to prevent hotlinking without mod_rewrite 2005-07-05
  4. My email address 2005-07-05
  5. Conway's Game of Life redefined 2005-07-05
  6. On file change run... 2005-05-10

1999 1

  1. Test page 2000-01-01