All blogs / Reverse engineering
Wejn.org
Wejn’s corner on the interwebs, containing articles about computers (Linux), programming, system administration, and whatever else takes my fancy.
- 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
- Hunting down a bug in the Colour library
- Page2
- Page3
- Unbricking Ocean Optics Spectrometers
- I²C Write Bug in Ocean Optics Spectrometers
- Sniffing I²C traffic visually with i2cdriver
- Anatomy of an Ocean Optics USB-DT (Deuterium-Tungsten Light)
- White Rose Timer on PineTime watch
- FreeCAD 1.1 killed Fusion 360 for me
- ZFS snapshotting done better
- Replacing APC Smart-UPS SC450RM battery
- Leveling the Průša Core One+ bed
- Swisscom 2025 security.txt challenge: full writeup
- Visualize those pesky rainbows (interactively) 2026-01-14
- On the unreasonable difficulty of plotting pretty rainbow, fast 2026-01-10
2025 13
- Overengineering float serialization for no good reason 2025-12-25
- Designing a 3d-printed clasp for a sports gear bag 2025-10-31
- LLM: Write production-ready code! 2025-10-25
- Accidentally solving the Swisscom 2025 security.txt challenge 2025-09-27
- Failing to calibrate flame-s-vis-nir-es spectrometer 2025-07-31
- Philips Hue White Ambiance is actually terrible... 2025-07-17
- Torch Bearer Spectrometer UI 2025-07-05
- ESP32 as a Zigbee console 2025-05-25
- Final stretch for e32wamb: PCB, cables, antenna holder 2025-05-11
- Introducing e32wamb: firmware for esp32-c6 based White Ambiance light 2025-03-24
- Testing ESP32's LEDC "non-blocking" fading 2025-03-15
- How-To: timestamp and git-hash version esp32 firmware builds 2025-03-02
- Zigbee: Hue-llo world! 2025-01-05
2024 18
- Hue Engine: Reversing the PWM functions 2024-12-17
- Hue Engine: Dumping the PWM data 2024-12-15
- Hue Engine: Basic reconnaissance 2024-12-15
- Project intro: Reversing Philips Hue light driver 2024-12-15
- Rooting Hue Bridge with firmware 1967054020 2024-11-20
- Proper ZFS setup for peace of mind 2024-11-17
- Running postfix as send-only on Alpine Linux 2024-11-17
- Putting a piglet picture on my Alarmo 2024-11-10
- From zero to radio amateur license in Switzerland 2024-10-28
- Safely aborting long running shell scripts 2024-09-01
- Grub 2.12 broke my secureboot setup (again) 2024-08-17
- How to ditch grub for UEFI (secure)booting 2024-08-17
- Deep dive into Fibonacci computation in Ruby 2024-07-07
- Quickfixing the Jekyll SEO plugin (to ingest page description) 2024-05-26
- Easily hosting GIT repos on forgejo 2024-05-26
- Adding a layer indicator light to Svalboard 2024-04-18
- The One True Way™ to handle temporary files 2024-03-01
- Serving CA certificates on the cheap 2024-01-15
2023 17
- Extracting data from Goethe Zertifikat B1 Wortliste pdf 2023-12-10
- How to recover deleted files from Google Drive 2023-11-28
- A love letter to the DataHand class of keyboards 2023-11-24
- Running traefik in a less braindead way 2023-11-05
- Implementing toy RSA in Ruby, on a dare 2023-10-27
- Installing Podman on Alpine Linux 2023-09-16
- Project intro: Going Cloud Native for internal services 2023-09-16
- Running one's own root Certificate Authority in 2023 2023-09-16
- Upgrading grub on my alpine with secureboot setup 2023-08-26
- How to avoid having ssh mangle spaces in command-line args 2023-07-16
- Parallelize batch runs with style 2023-05-23
- How to split a big XCI/NSP file to store it on a FAT32 2023-05-05
- Parallelize YouTube downloads 2023-02-28
- Making SVD-Loader for Ghidra play nice with RP2040 2023-02-25
- Nerdsniped: clang++-13 infinite loop bug 2023-02-14
- IPv6 Unique Local Addresses (ULA) for the win 2023-02-04
- Three common Regular Expression gotchas 2023-01-24
2022 17
- Fixing IPv6 on UniFi guest wireless network 2022-11-05
- Setting Xorg screen layout by display serial numbers 2022-09-25
- Moving away from Autodesk Fusion 360... to where? 2022-08-14
- Understanding the Nintendo Switch secure boot vulnerabilities 2022-05-22
- Improving physical security at a hotel 2022-04-27
- How to run an unattended install of Alpine Linux 2022-04-08
- Tinyrenderer in Elixir (part of it, anyway) 2022-03-27
- Traveling 20+ years back in time 2022-03-11
- Generating birthday party invitations 2022-03-07
- How to install low dependency Let's Encrypt client 2022-02-27
- Upgrading SSL (TLS) on Kerio Workspace 2.1.4 2022-02-24
- Three commands to make serial console awesome 2022-02-20
- Replacing pkexec with sudo 2022-01-28
- Configuring IPv6 on EdgeRouter for Fiber7 and PiHole 2022-01-24
- Fixing memif's poor performance in a VPP tutorial 2022-01-22
- BEAMitude: What if GenServer.call times out? 2022-01-15
- Getting Erlang's observer working on Alpine Linux 2022-01-09
2021 35
- Rethinking number formatting 2021-12-18
- How to call renameat2 syscall in Ruby 2021-12-10
- Controlling fan speed the right way 2021-11-23
- Loadtesting EdgeRouter 4 in more depth 2021-11-21
- Making AlpineLinux load ZFS keys for all pools on startup 2021-10-31
- Reversing Yamaha SR-C20A [by Michael Obst] 2021-10-31
- Engineering a better Anagrammer, part II 2021-10-12
- Fixing grub 2.06 "error: verification requested but nobody cares" 2021-09-26
- Engineering a better Anagrammer, part I 2021-09-19
- Beating procrastination with these 4 simple (but hard) techniques 2021-09-12
- Arbitrary workflows with GitHub Actions for fun and pages 2021-08-20
- Loadtesting bunch of routers 2021-07-19
- Succeeding at a network loadtest 2021-07-17
- Failing at a network loadtest (for now) 2021-06-28
- Graphviz plugin for Jekyll 2021-06-27
- Adding capacity to an existing ext3-on-luks-on-LVM-on-raid1 setup 2021-06-27
- Making an iOS custom dialer app with Shortcuts and elm-spa 2021-06-04
- Cancel Shadow banning culture is alive and well at Hacker News 2021-05-26
- How cryptocurrencies keep going to the moon 2021-05-24
- 6 burning questions for the self-proclaimed blockchain singularity (dfinity) 2021-05-08
- Putting an old digital clock (with an outdoor thermometer) on steroids 2021-05-01
- Yamaha YAS-207 vs. Shairport Sync over TOSLINK 2021-04-25
- Yamaha YAS-207's Minimal Client (and a Soundbar Fake) 2021-04-24
- Yamaha YAS-207's Bluetooth protocol reversed 2021-04-19
- Yamaha YAS-207's Bluetooth protocol: first real progress 2021-04-18
- Streaming Bluetooth Capture Data to Wireshark without Btsnoop Net Support Enabled 2021-04-18
- Yamaha YAS-207's Bluetooth protocol: basic recon 2021-04-18
- Reversing the Yamaha YAS-207 infrared remote protocol 2021-04-11
- Multi-weekend project intro: Putting the fear of AirPlay into Yamaha YAS-207 soundbar 2021-04-11
- Comparison of USB Bluetooth adapters in Linux 2021-04-11
- The evolution of (my) note taking 2021-04-09
- Urbit :: the good, the bad, and the insane 2021-02-17
- How to make a USB cable for APC Smart-UPS SC450RMI1U 2021-02-13
- Setting up secure boot with fully encrypted filesystems on Alpine Linux 2021-01-31
- Fixing IKEA Trofast lid with a simple 3d model 2021-01-16