The Curious Engineer

All blogs / Linux / Unix

Kevin Boone's website

kevinboone.me

Home page

Linux / UnixJava / JVMEmbedded / microcontrollersElectronics

Posts
448 from 7 Jul 2020 to 12 Oct 2026
Posting
about daily (171 in the last year)
Kind
personal blog
Feed
https://kevinboone.me/feed.xml

2026 153

  1. First steps in bare-metal programming using UEFI -- part 5
  2. General computing
  3. Linux installation and administration
  4. OpenShift
  5. General software development
  6. Java programming
  7. Perl programming
  8. General science and Technology
  9. Education; articles for students
  10. English law and politics
  11. Mathematics
  12. Music groupindex
  13. July 2020
  14. Container technology
  15. Retrocomputing
  16. C programming
  17. Lua programming
  18. Embedded computing
  19. Raspberry Pi
  20. Arduino
  21. Electronics
  22. February 2021
  23. January 2021
  24. December 2020
  25. November 2020
  26. October 2020
  27. September 2020
  28. August 2020
  29. Middleware
  30. CP/M and Z80
  31. Raspberry Pi Pico
  32. Snake oil and pseudo-science
  33. January 2022
  34. December 2021
  35. November 2021
  36. October 2021
  37. September 2021
  38. August 2021
  39. June 2021
  40. May 2021
  41. April 2021
  42. March 2021
  43. Linux command-line hacking
  44. Computer security
  45. They don't make 'em like that any more
  46. August 2022
  47. July 2022
  48. June 2022
  49. May 2022
  50. April 2022
  51. March 2022
  52. February 2022
  53. Hi-fi and audio
  54. January 2023
  55. December 2022
  56. November 2022
  57. October 2022
  58. September 2022
  59. June 2023
  60. May 2023
  61. April 2023
  62. March 2023
  63. February 2023
  64. De-Googling
  65. December 2023
  66. November 2023
  67. October 2023
  68. September 2023
  69. August 2023
  70. July 2023
  71. September 2024
  72. August 2024
  73. July 2024
  74. June 2024
  75. May 2024
  76. April 2024
  77. March 2024
  78. February 2024
  79. January 2024
  80. December 2025
  81. November 2025
  82. October 2025
  83. September 2025
  84. August 2025
  85. July 2025
  86. June 2025
  87. May 2025
  88. March 2025
  89. February 2025
  90. January 2025
  91. December 2024
  92. November 2024
  93. October 2024
  94. The small web
  95. June 2026
  96. May 2026
  97. April 2026
  98. March 2026
  99. February 2026
  100. January 2026
  101. October 2026
  102. September 2026
  103. August 2026
  104. July 2026
  105. First steps in bare-metal programming using UEFI -- part 4
  106. First steps in bare-metal programming using UEFI -- series index
  107. First steps in bare-metal programming using UEFI -- part 3
  108. First steps in bare-metal programming using UEFI -- part 2
  109. First steps in bare-metal programming using UEFI -- part 1
  110. Further thoughts on Android's native desktop mode
  111. System-level ad-blocking in Android in 2026
  112. Software
  113. VoLTE on de-Googled Samsung devices: perhaps there is light at the end of the tunnel
  114. Did you know that recent, de-Googled Android ROMs like Lineage OS have a "desktop" mode?
  115. No more Lineage OS on Samsung cellphones
  116. Why are modern televisions so cheap?
  117. Who needs a dedicated portable music player in 2026?
  118. Using a Raspberry Pi Pico to control a large-scale model locomotive
  119. Command-line hacking: using find, sed, and xargs together for flexible filename transformation
  120. The crisis in refurbished, top-tier smartphones
  121. How to recover when the Android rooted De-Bloater app puts your device into a boot loop
  122. Praying to St Jude: counselling the re-Googlers
  123. Did aliens really talk to us in "binary code" at Rendlesham Forest?
  124. Why I don't really care if web content is AI-generated
  125. MBook -- a proposal for a new, simple e-book format based on Markdown
  126. Maps after Google
  127. keplerd: a new Java-based server for the Gemini protocol and others
  128. Running a Java server application in a chroot jail
  129. In praise of HTTP
  130. Announcing md2gem 0.1 -- a cross-platform, best-effort converter for Markdown to Gemini Gemtext
  131. Self-hosting and steamrollers in the small net
  132. Is Fahrenheit 451 becoming relevant again?
  133. Trying to live without a smartphone in 2026
  134. Age verification and privacy: let's try to be objective
  135. Why I de-Googled
  136. Announcing Caztor 1.0 -- a browser for small-net protocols like Gemini and Gopher
  137. Announcing JGemini version 2.0
  138. JGemini -- a Java-based browser for Project Gemini protocols and content
  139. The "small web" is bigger than you might think
  140. A plug for the Spartan protocol
  141. Hosting a Gemini capsule on a virtual private server
  142. Small web, IndieWeb, Gemini... A guide to the retro-web
  143. Can Project Gemini rewind the Web thirty years?
  144. The Gemini Protocol in 2026: growing, but still not setting the Internet aflame
  145. This site is now webmention-aware
  146. They don't make them like that any more: the Cyclemaster
  147. Command-line hacking: a really simple console music player
  148. Rant: 2026 will not be the 'Year of Linux on the Desktop' -- and I'm glad
  149. Battle of the privacy-focused search engines: Kagi vs. DuckDuckGo
  150. Digital voice assistants vs. privacy in 2026
  151. Command-line hacking: Downloading a podcast to create an audiobook
  152. Using a Garmin fitness watch completely offline -- no accounts, no app
  153. They don't make 'em like that any more: filament fairy lights

2025 49

  1. They don't make 'em like that any more: the Casio VL-1 pocket synthesizer
  2. Predicting eclipses with clockwork
  3. They don't make them like that any more: the Yamaha DX7 keyboard
  4. They don't make them like that any more: Denshi block electronics kits
  5. Google Pixel and Sony Xperia handsets for budget de-Googling
  6. Some thoughts on de-Googling Google Pixel phones
  7. 'Sideloading' restrictions on Android: how big a deal will they be?
  8. How to write a technical or scientific report
  9. De-bloating and de-Googling an Android device using Canta
  10. The privacy nightmare of browser fingerprinting
  11. Comparing Android alternatives: Lineage OS, ∕e∕OS, and Graphene OS
  12. Custom ROM versus extensive package removal, for de-Googling a Samsung cellphone
  13. Is it worth rooting an Android phone in 2025?
  14. Running the Google Pixel Camera app on a robustly de-Googled cellphone
  15. Two years without Google, et al. -- has it been worth it?
  16. How to get a dark background on the K-9/Thunderbird e-mail widget for Android
  17. The 2nd-generation Nokia 105: a smarter dumb phone
  18. Gâteaux differentials and Euler-Lagrange equations using Maple
  19. AppImage from scratch
  20. Lineage OS vs /e/OS in 2025
  21. USB-C headphone dongles: still sucking after all these years
  22. They don't make 'em like that any more: Playmobil RC model trains
  23. They don't make 'em like that any more: Honda's ATC110 all-terrain cycle
  24. They don't make 'em like that any more: Dyson Pure Cool-Me personal air purifier
  25. They don't make 'em like that any more: tone controls
  26. Creating an "animated score" for demonstrating musical compositions on YouTube, etc
  27. A failed experiment in laptop cooling
  28. Using thinkfan for fan control on Lenovo (Linux) laptops
  29. Using the Pi Pico with an L298N module to control a 12V motor
  30. FastMail -- still good value in 2025?
  31. No, eBay: it isn't "free to sell"
  32. antiX vs. MX Linux on old-ish laptops
  33. Why using crude PWM for sampled audio output on the Raspberry Pi Pico doesn't sound that great
  34. Law and small woodlands
  35. They don't make 'em like that any more: Sony DTC-700 audio DAT player/recorder
  36. Some thoughts on LoRa-based mesh radio technologies
  37. Raspberry Pi Pico: loading code into RAM and running it -- part 1
  38. They don't make them like that any more: the BMW C1
  39. Why do we use 'complex impedance' in electrical engineering?
  40. They don't make 'em like that any more: 3D movies
  41. They don't make them like that any more: the Raleigh Chopper
  42. Some thoughts on Pimoroni's "Pico GFX Pack" LCD module
  43. Fun with capital letters
  44. Social media: it's not me, it's you
  45. No good deed goes unpunished: can we now be sued over software we give away?
  46. ARM assembly-language programming for the Raspberry Pi
  47. Watch out: the Chinese domain registration scam is getting slicker
  48. Technical writing: what do we lose, when we write more readably?
  49. A USB power supply with a real on-off switch

2024 47

  1. They don't make them like that any more: Sony PRS-500 e-reader
  2. They don't make 'em like that any more: things you can switch off
  3. They don't make them like that any more: Epson MX-80 dot matrix printer
  4. Using Windows is like smoking (?)
  5. Ten steps to becoming a Linux snob
  6. Wayland from the ground up
  7. Why systemd is a problem for embedded Linux
  8. Why are the variable names all wrong in my decompiled Java class?
  9. Log4J -- ask yourself: do I really need that library?
  10. Gentoo vs. MX Linux on old-ish laptops
  11. How de-Googled is Lineage OS?
  12. Fitting an NVMe disk in a computer with no NVMe support
  13. Getting back into C programming for CP/M
  14. Comparing Dropbox, pCloud, and rsync.net for off-site storage for Linux users
  15. They don't make 'em like that any more: the 3.5mm headphone jack socket
  16. Some notes on installing Lineage OS on modern-ish Samsung Android devices
  17. A few interesting features of Vim, part 1
  18. They don't make them like that any more: the Quad 306 amplifier
  19. They don't make them like that any more: the Xircom REX 6000 PDA
  20. One month with Gentoo
  21. Going back to ALSA in 2024
  22. Can you use ALSA to get 'bit-perfect' audio playback on Linux?
  23. Using Private Internet Access VPN with Gentoo Linux
  24. Gentoo Linux -- is this the solution to the Winux problem?
  25. Differential equations: how does separation of variables really work?
  26. Do you need to wipe that hard drive? And can you?
  27. Exploring Java 17's container-awareness features
  28. Using Keycloak for authentication with Apache Artemis: part 1
  29. When science and engineering are in conflict: the weird Whipple truss bridge
  30. They don't make 'em like that any more: how the Vectrex almost revolutionized video gaming
  31. Using Apache Camel to implement an IRC bot
  32. Adventures with Artix
  33. C development for Linux without a standard library
  34. The nuts and bolts of anonymous inner classes in Java
  35. Command-line hacking: countdown timer
  36. How Linux home directory encryption works
  37. Rudiments of Java concurrency control, part 1
  38. They don't make 'em like that any more: Borland Turbo Pascal 7
  39. Some thoughts on using a small cellphone as a media player
  40. Yet another desktop Raspberry Pi media player
  41. Making tab-and-slot boxes for electronic prototypes. Or: how I stopped worrying and learned to love the laser
  42. Getting started with Kafka Streams, part 2
  43. Getting started with Kafka Streams
  44. They don't make them like that any more: Garmin Nuvi 300
  45. RSS feed
  46. Command-line hacking: calculating the phase of the Moon
  47. They don't make 'em like that any more: Blackberry Bold 9700

2023 50

  1. Kafka Connect from the ground up, part II
  2. Kafka Connect from the ground up
  3. Powering a Raspberry Pi from an attached Waveshare USB HAT
  4. Converting push-button events to keyboard events in the Raspberry Pi
  5. Rolling your own minimal embedded Linux for the Raspberry Pi -- part one: booting to a root shell
  6. Why the grammer snobs have it all wrong about the apostrophe
  7. They don't make 'em like that any more: Archos 605 media player/recorder
  8. ActiveMQ/Artemis or Kafka for Java messaging?
  9. They don't make them like that any more: the slide rule
  10. Is your fitness watch lying to you?
  11. Some thoughts on always-on OLED displays on smart watches
  12. Command-line hacking: displaying system temperature
  13. Does the use of custom Android ROMs improve or worsen security?
  14. They don't make 'em like that any more: NVIDIA Shield K1 tablet
  15. Snake oil: 4K displays on smartphones
  16. What you give up, when you opt out of the surveillance economy
  17. Adventures with RC2014, Z80, and CP/M
  18. Designing a dual 5V-to-RS232 serial level converter for the RC2014
  19. They don't make 'em like that any more: The Philips Pronto remote control
  20. They don't make 'em like that any more: a paean to the Cowon D2 DAB
  21. CP/M resources
  22. Getting to grips with JMS shared subscriptions
  23. Adding a floppy disk controller to my RC2014 Z80 system
  24. Using flash memory as non-volatile storage on the Pi Pico microcontroller
  25. Constructing and programming a YM2149 sound board my RC2014 Z80 system
  26. Updating, building, and flashing RomWBW on an SC130 CP/M system
  27. Exchanging files between an SC130 CP/M board and a Linux system
  28. Some thoughts on a DS1302 real-time clock board for RC2014/Z80 and CP/M
  29. Using a CP/M machine to log into a Linux server using an RS232 connection
  30. Serial device mapping in CP/M
  31. The vexed problem of generating delays in a CP/M program
  32. Is Collapse OS really a practical proposition?
  33. Getting back into C programming for CP/M -- part 2
  34. Using Keycloak for authentication with Apache Artemis: part 2
  35. A self-contained CP/M computer based on the Z80 Playground
  36. Why does my Raspberry Pi project keep displaying the 'lightning bolt' undervoltage indicator?
  37. Using an Oracle database as storage for the Apache Artemis message broker -- part 2
  38. Using an Oracle database as storage for the Apache Artemis message broker -- part 1
  39. Using the Qpid Proton C++ library to understand AMQP
  40. What exactly is 'saturation'?
  41. Yet another Darktable/Lightroom comparison
  42. Using media keys in a Linux console application
  43. Using the Linux framebuffer in C/C++ -- just the essentials (part 2)
  44. Using the Linux framebuffer in C/C++ -- just the essentials
  45. pico-photo-clock: an easy-to-construct Pi Pico desktop photo clock
  46. Using the Maxim DS3231 I2C real-time clock in C on the Raspberry Pi Pico
  47. Using ImageMagick to generate anti-aliased bitmap fonts for a microcontroller's LCD display
  48. The Pi Pico, two years on
  49. Some thoughts on the Waveshare 3.5-inch LCD/SD module for the Raspberry Pi Pico
  50. Why 'int x = 0' is uninitialized data to the GNU C compiler

2022 55

  1. Raspberry Pi Pico: loading code into RAM and running it -- part 2
  2. Some thoughts on using a USB keyboard with the Raspberry Pi Pico
  3. Using the rdkafka library to integrate a C program with Kafka messaging
  4. Why synchronous write speed is likely to be the limiting factor in message broker throughput
  5. Why your cheap mains inverter could kill you
  6. Using Quarkus to provide a REST interface to a message broker
  7. Comparing a natively-compiled Java webservice with C
  8. Is dithering necessary when reducing the number of bits per sample in an audio waveform?
  9. The costs and benefits of software pulse-width modulation on the Raspberry Pi
  10. Using an HD44780 LCD display module with the Raspberry Pi, from the ground up
  11. Monitoring an INA219 chip in a Raspberry Pi battery-backed power supply
  12. Getting reasonably robust proximity measurements from an ultrasonic sensor on the Raspberry Pi
  13. Using a shift register to control eight digital outputs with three GPIO lines on the Raspberry Pi
  14. How flat-earthers use misrepresentations of scale to promote their ideas
  15. Why "RMS watts" is a useless measure of power
  16. Calculus of variations: a lunchbreak guide
  17. Sorting files and directories on a FAT-formatted USB memory stick
  18. A review of the Leak Stereo 130 and CDT
  19. Why is there a vinyl revival?
  20. Does it matter how we rip audio CDs?
  21. Is "high resolution" audio really worth the effort?
  22. Why you can't improve your hi-fi system by upgrading the mains cable
  23. Do different CD transports sound different?
  24. Snake oil: balanced headphones
  25. Why your vintage turntable could kill you
  26. A skeptic's guide to headphones
  27. Are Flatpak, et al., saving or drowning the Linux desktop?
  28. Command-line hacking: timezone conversions
  29. Command-line hacking: displaying a weather summary
  30. Command-line hacking: creating a tide table
  31. Command-line hacking: extracting audio metadata (tags)
  32. Command-line hacking: querying an Internet radio database
  33. Command-line hacking: paced breathing
  34. Command-line hacking: displaying news headlines in the manual viewer
  35. Command-line hacking: Assigning folder icons to directories
  36. How Microsoft Windows killed the palmtop computer
  37. Using Podman to deploy an image directly to OpenShift 4
  38. Understanding Java's functional interfaces
  39. Using the new pluggable active/passive management framework in Apache Artemis
  40. Embedding resources into executables built using GCC
  41. You be the linker -- building "Hello, world" from scratch, in hexadecimal
  42. They don't make 'em like that any more: the Lenovo W520
  43. How problematic is resampling audio from 44.1 to 48 kHz?
  44. Using the Qpid Proton C++ library to create a server for monitoring or telemetry data
  45. Why we only see one side of the moon -- the odd phenomenon of tidal locking
  46. Why the energy cost or benefit of switching to DAB digital radio is hard to assess
  47. Why I won't be dumping DuckDuckGo over Ukraine
  48. cwordle -- A Wordle-like word-guessing game for CP/M
  49. The peculiar Benford distribution
  50. UTF-8 and the problem of over-long characters
  51. Juice-jacking -- it's a problem, but not because it's a problem
  52. How Unicode reading direction characters defeat source code inspection, and what it means for the open-source movement
  53. Multi-source Z80 assembly programming for CP/M
  54. Writing new interactive fiction games for CP/M using PunyInform and Linux
  55. Converting a floating-point number to a fraction (approximately) using continued fraction expansion

2021 43

  1. Raspberry Pi as a networked storage (NAS) device
  2. Making a Raspberry Pi bootable SD card from a root filesystem
  3. Does it matter if amateur radio dies out?
  4. Why the Linux console is so awesome
  5. Making an 8x32 LED auxiliary display with a USB interface, from an LED matrix and a Raspberry Pi pico
  6. A very brief overview of Kotlin for Java developers
  7. An overview of finite fields
  8. Homeopathy: flushing science down the lavatory
  9. Samsung DeX -- the good, the bad, and the ugly
  10. Implementing a web-based music player for Android
  11. Conway's Game of Life in 3D perspective
  12. Using Apache Avro for passing Java objects through a message broker
  13. How does Camel-K actually work?
  14. Rolling your own minimal embedded Linux for the Raspberry Pi
  15. Audible's returns policy -- who wins, who loses?
  16. "Spy pixels" -- how worried should we be?
  17. Implementing Apache ActiveMQ-style broker meshes with Apache Artemis
  18. Deploying the Mosquitto MQTT message broker on OpenShift (part 1)
  19. Back to BASICs with a Pro Micro microcontroller
  20. Playing Zork 1 on a CP/M emulator on Linux
  21. Using a Pi Zero and throw-away parts to provide a serial terminal for retrocomputing projects
  22. Deploying the Mosquitto MQTT message broker on OpenShift (part 2)
  23. Capturing database change records using Debezium and Camel
  24. Using Apache Avro for passing Java objects through a message broker, with a schema registry
  25. Developing KCalc-CPM -- a scientific calculator utility for CP/M
  26. CP/M forty years on -- what it was, and why it still matters
  27. Running CP/M on the Raspberry Pi Pico microcontroller
  28. Why you can sometimes connect 3.3V and 5V I2C devices (and probably shouldn't)
  29. Controlling a chain of MAX7219 LED matrices using C on a Raspberry Pi Pico
  30. Building and programming a USB auxiliary display using a SparkFun Pro Micro, an HD44780 LCD module, and an PCF8547 I2C-to-parallel IC
  31. The tabular method for integration by parts
  32. Integrating factors from the ground up
  33. Using an I2C analog-to-digital for temperature measurement on the Raspberry Pi
  34. On master/slave
  35. More like Windows every day
  36. The planet Vulcan: a cautionary tale that deserves to be better known
  37. Building a custom mechanical keyboard from scratch
  38. Reviving old keyboards for Arduino
  39. Why the fascination with retrocomputing?
  40. Peli "Protector" case as a rugged enclosure for a Raspberry Pi-based field terminal
  41. Building and programming a USB keypad from the ground up
  42. Using Linux command-line tools for programming the SparkFun Pro Micro microcontroller (and similar)
  43. A Raspberry Pi and touchscreen case that anybody can make

2020 51

  1. Rolling your own minimal embedded Linux for the Raspberry Pi -- part four: audio
  2. Rolling your own minimal embedded Linux for the Raspberry Pi -- part three: services and remote access
  3. Rolling your own minimal embedded Linux for the Raspberry Pi -- part two: early initialization
  4. Rolling your own minimal embedded Linux for the Raspberry Pi -- part five: X
  5. Switching a couple of amps with a Raspberry Pi and a relay
  6. Using an I2C analog-to-digital converter chip with the Raspberry Pi, from the ground up
  7. Using the FreeType library to render text nicely onto a Linux framebuffer
  8. Examining simple build and deployment operations on OpenShift 3/4
  9. Why pitch is not the same as frequency
  10. Why you can't rely on system calls to obtain limits, when running an application in a container
  11. Container from scratch: building a Linux container from the ground up
  12. The importance of enabling compiler warnings in C and C++ programming
  13. Why is covid-19 testing so unreliable? A pictorial view
  14. Java as a scripting language: new auto-compilation features in Java 11
  15. How to run a shell script from a Java application
  16. Making simple stop-motion animations using Linux and a DSLR camera
  17. Developing micro-microservices in C on Red Hat OpenShift
  18. Understanding the Hamming 'sphere packing' bound in coding theory
  19. Solving a quadratic equation in a prime (finite) field
  20. An introduction to joint, marginal, and conditional probabilities
  21. Using the Raspberry Pi official 7-inch touch-screen in embedded applications
  22. Handling GPIO-connected switches robustly in C on the Raspberry Pi
  23. Why switching high currents using a MOSFET and a Raspberry Pi is not as straightforward as it looks
  24. Extracting software from the Raspbian repository, for assembling a custom Linux image for the Raspberry Pi
  25. Bayesian statistics for dummies
  26. Night of the living differential equations -- modeling the zombie apocalyse
  27. Night of the living drag coefficients -- ballistics applied to zombie control
  28. The titles game: can you buy nobility?
  29. An introduction to steam locomotive technology
  30. Prototyping a large Raspberry Pi case
  31. Raspberry Pi 4 -- is it good news for experimenters and enthusiasts?
  32. Building a Lua extension library for Linux in C/C++
  33. Lua quick-start for Java programmers
  34. A Linux storage management cheat-sheet
  35. An introduction to Perl for Java programmers
  36. Why use of the @Override annotation is essential in Java
  37. A collection of Java curiosities and oddities
  38. Generating simple MIDI files using Java, without using the Java Sound API
  39. How to give a presentation
  40. A brief history of English land law
  41. Compiling a Java program to native code using GraalVM, from the ground up
  42. How the Fabric8 Maven plug-in deploys Java applications to OpenShift
  43. Making a Java JAR file self-executing (on Linux)
  44. Ten simple rules for passing an examination
  45. Why you can't play Bach on a piano
  46. An overview of character encoding for developers
  47. A ten-minute guide to electrical theory
  48. Unicode combining and graphemes -- how two identical Java Strings can be different
  49. Using an ammo box as portable 12V power supply
  50. Extending the bash 'cd' command in Linux
  51. The Argleton affair, and the Wikification of the World-Wide Web