Kevin Boone's website

Computing, math, science
https://kevinboone.me/ (RSS)
visit blog
Technical writng: what do we lose, when we write more readably?
8 Jan 2025 | original ↗

There's no shortage of guidance on writing English that people will want to read. In science and technology, however, can we apply the same guidelines without losing information?

A USB power supply with a real on-off switch
1 Jan 2025 | original ↗

As part of my campaign to eliminate wall-warts and external power supplies that don't have on/off switches, I've built a USB charger that has a mains switch. Why? Because nobody seems to sell one.

They don't make them like that any more: Sony PRS-500 e-reader
9 Dec 2024 | original ↗

In a market dominated by the Amazon Kindle, it's easy to forget that Sony, not Amazon, made the first commercially-successful e-book reader.

They don't make 'em like that any more: things you can switch off
8 Dec 2024 | original ↗

How worried should we be, that we're wasting electrical energy for no benefit?

The Argleton affair, and the Wikification of the World-Wide Web
5 Dec 2024 | original ↗

How a non-existent English village ended up on maps, and the implications this has for how we handle information.

Extending the bash 'cd' command in Linux
5 Dec 2024 | original ↗

The built-in cd command in the bash shell is not as smart as it could be; but it's a little fiddly to extend its functionality.

Using an ammo box as portable 12V power supply
5 Dec 2024 | original ↗

A military-surplus steel ammunition box makes a great housing for a high-current, outdoor 12V power supply. This article gives some ideas about how to build one.

Unicode combining and graphemes -- how two identical Java Strings can be different
5 Dec 2024 | original ↗

Java's strict adherence to Unicode standards for text representation ought to make life easier for developers, and usually it does. But not always.

A ten-minute guide to electrical theory
5 Dec 2024 | original ↗

Volts, amps, ohms, and watts, for complete beginners. This article explains electrical circuit theory in the context of domestic wiring installation.

An overview of character encoding for developers
5 Dec 2024 | original ↗

How character encoding actually works, and the implications for developers of choosing one character set over another.

Why you can't play Bach on a piano
5 Dec 2024 | original ↗

Well, perhaps you can play Bach on a piano, if you have the skill and the patience; but you can't hear Bach's music the way he and his contemporaries would have heard it because, in general, we don't using the same tuning schemes. This is an article about the mathematics of music tuning, from Pythagoras to the modern equally-tempered scale.

Ten simple rules for passing an examination
5 Dec 2024 | original ↗

Advice for students on how to do well in university level examinations, fairly and honestly. There are no secrets here, but it's amazing how many students do less well than they should because they haven't understood how university teaching works.

Making a Java JAR file self-executing (on Linux)
5 Dec 2024 | original ↗

A quick-and-dirty way to make it possible to execute Java JAR files at the prompt, without needing to invoke the JVM.

How the Fabric8 Maven plug-in deploys Java applications to OpenShift
5 Dec 2024 | original ↗

This article describes in detail the steps the Fabric8 Maven plug-in carries out when deploying an application to OpenShift.

Compiling a Java program to native code using GraalVM, from the ground up
5 Dec 2024 | original ↗

The GraalVM 'Native Image' plugin has the capability to compile to stand-alone binaries languages like Java that are normally compiled on the fly. This article describes step-by-step how to install GraalVM and the plug-in, and use it on some simple Java examples.

A brief history of English land law
5 Dec 2024 | original ↗

What the Normans did for us.

How to give a presentation
5 Dec 2024 | original ↗

Some guidance, mostly for students, on how to make a scientific or technical presentation.

Generating simple MIDI files using Java, without using the Java Sound API
5 Dec 2024 | original ↗

Although the Java Media Framework can do some very sophisticated things, it remains relatively difficult to generate simple musical tones using Java. The de-facto method for specifying musical notes remains the MIDI file, although there are now more sophisticated approaches. It's surprisingly difficult to generate even a simple MIDI file in Java,...

A collection of Java curiosities and oddities
5 Dec 2024 | original ↗

Why does Java have a NullPointerException when it doesn't support pointers? Why does the equality operator compare object references, but the collections framework comparison methods compare object contents? These questions and many more like them will comprehensively fail to be answered in this article.

Why use of the @Override annotation is essential in Java
5 Dec 2024 | original ↗

Developers don't use @Override enough. Java's method visibility rules, when classes are in different packages, make polymorphic inheritance behave in odd ways. Careful use of @Override can prevent these problems, and make applications much easier to maintain.

An introduction to Perl for Java programmers
5 Dec 2024 | original ↗

A quick-start guide that highlights the similarities and differences between the Java and Perl programming languages.

A Linux storage management cheat-sheet
5 Dec 2024 | original ↗

This article outlines, with step-by-step examples, how to carry out the most fundamental Linux storage management tasks: partitioning a disk, creating a filesystem, setting up swap space, managing a logical volume management (LVM) storage pool, and configuring a RAID mirror.

Lua quick-start for Java programmers
5 Dec 2024 | original ↗

The essentials of Lua programming in one page, for experienced Java programmers.

Building a Lua extension library for Linux in C/C++
5 Dec 2024 | original ↗

Lua is an embeddable scripting language, which can be extended in a number of useful ways. This article describes in detail how to create a Lua extension in C (or, with a bit of fiddling, C++) as a loadable (.so) library.

Raspberry Pi 4 -- is it good news for experimenters and enthusiasts?
5 Dec 2024 | original ↗

Faster, more of everything, same price -- what's not to like?

Prototyping a large Raspberry Pi case
5 Dec 2024 | original ↗

Using high-density vinyl board to construct a practical prototype case without specialist tools or materials

An introduction to steam locomotive technology
5 Dec 2024 | original ↗

Oh yes it's great to be an engine... But how did the driving force of the industrial revolution actually work?

The titles game: can you buy nobility?
5 Dec 2024 | original ↗

This article is about whether you can legally and openly buy a British noble title. Spoiler alert: no, you can't. People still keep asking, though.

Law and small woodlands
5 Dec 2024 | original ↗

An exploration of various aspects of English law, as they apply to the owners and managers of small, private woodlands.

Night of the living drag coefficients -- ballistics applied to zombie control
5 Dec 2024 | original ↗

An introduction to the science of exterior ballistics -- tracking the flight of a projectile under the influence of gravity and drag.

Night of the living differential equations -- modeling the zombie apocalyse
5 Dec 2024 | original ↗

Using a simple application of Euler's method to estimate the solutions of non-linear differential equations, and work out your chances of surviving the zombie apocalypse. No, really.

Bayesian statistics for dummies
5 Dec 2024 | original ↗

An explanation from first principles of this much-misunderstood principle of statical inference.

Extracting software from the Raspbian repository, for assembling a custom Linux image for the Raspberry Pi
5 Dec 2024 | original ↗

Using the official Raspian repository to assist the construction of a custom Linux for embedded applications is quick and convenient, compared to building everything from source. However, this approach has certain hazards.

Why switching high currents using a MOSFET and a Raspberry Pi is not as straightforward as it looks
5 Dec 2024 | original ↗

Using a single MOSFET transistor for power switching in microcontroller applications is simple and low-cost, but it often doesn't work as well as expected. Either the switched device doesn't run at full capacity, or the MOSFET gets hot. This article explains why.

Handling GPIO-connected switches robustly in C on the Raspberry Pi
5 Dec 2024 | original ↗

It's surprisingly difficult to detect switch actuations in a robust way, dealing with contact bounce and other quirks. This article describes one approach to the problem in C.

Using the Raspberry Pi official 7-inch touch-screen in embedded applications
5 Dec 2024 | original ↗

The official Raspberry Pi 7-inch touchscreen is a useful and well-designed piece of equipment but, if you're using it in a custom (hardware and/or software) build, you'll notice a lack of any relevant technical information. This article tries to supply some of that information.

An introduction to joint, marginal, and conditional probabilities
5 Dec 2024 | original ↗

An explanation from first principles of the concepts of probability applied to two random discrete variables.

Solving a quadratic equation in a prime (finite) field
5 Dec 2024 | original ↗

This article describes how to do arithmetic in a small finite (prime) field. Being able to do this is essential for the implementation of cryptography, among other things. The arithmetic isn't particularly difficult -- particularly if we use software that specifically supports such operations. However, it's illustrative to do it manually, at...

Understanding the Hamming 'sphere packing' bound in coding theory
5 Dec 2024 | original ↗

The Hamming bound is an important metric in the evaluation of information coding schemes. It sets an upper limit on the number of distinct codewords that an error-correcting block code can provide, for a given block length. The Hamming bound is a benchmark for the evaluation of error correction schemes used in digital data storage and...

Developing micro-microservices in C on Red Hat OpenShift
5 Dec 2024 | original ↗

Although Java dominates the webservices world, there are gains to be made by considering the use of lower-level lanaguages like C, particularly in a containerized, microservice architecture. This article describes one way to implement a webservice for Red Hat OpenShift, and similar systems, using C and an ultra-lightweight container base image.

Making simple stop-motion animations using Linux and a DSLR camera
5 Dec 2024 | original ↗

Creating stop-motion animated movies using a DSLR camera and some basic Linux tools. It won't rival Pixar, but it's something to do with your kids on a rainy Sunday afternoon.

How to run a shell script from a Java application
5 Dec 2024 | original ↗

Running a shell script from a Java program usingappears simple. In practice, there are many pitfalls. This article describes how to avoid at least some of them.

Java as a scripting language: new auto-compilation features in Java 11
5 Dec 2024 | original ↗

New auto-compilation features in Java 11 give Java the potential to behave more like a traditional scripting language, such as Perl or Python. But how useful are these features in practice?

Why is covid-19 testing so unreliable? A pictorial view
5 Dec 2024 | original ↗

The UK Government's response to the covid-19 is to 'test, test, test'. This article demonstrates in pictorial terms why this strategy will catastrophically overestimate the number of people actually infected, leading to widespread disruption.

The importance of enabling compiler warnings in C and C++ programming
5 Dec 2024 | original ↗

I see too many C (and C++) programs misbehave at runtime, for reasons that could easily have been detected using checks built into all modern compilers. This article describes some common C programming errors, and shows how they would have been spotted easily if the compiler were configured correctly.

Container from scratch: building a Linux container from the ground up
5 Dec 2024 | original ↗

Containers have become increasingly important for Linux developers and administrators. A number of frameworks like LXC, Docker, and Podman are now available to automate the management of containers. However, all these frameworks rely on similar kernel features, particularly control groups, namespaces, and virtual networks. This article...

Why you can't rely on system calls to obtain limits, when running an application in a container
5 Dec 2024 | original ↗

The notion of resource limits (on memory, CPU, etc) has never been very well-defined, and the use of container-based deployment makes the situation worse. This article describes why, and what can be done about it.

Gâteaux differentials and Euler-Lagrange equations using Maple
5 Dec 2024 | original ↗

My article on calculus of variations assumed without explanation the basic form of the Euler-Lagrange equation. This article attempts to demonstrate how an Euler-Lagrange equation arises, by solving a variational problem algebraically using Maple.

Using an I2C analog-to-digital for temperature measurement on the Raspberry Pi
5 Dec 2024 | original ↗

This article describes how to do simple temperature measurement with a Raspberry Pi, and I2C analog-to-digital converter, and a thermistor.

Integrating factors from the ground up
5 Dec 2024 | original ↗

The use of integrating factors is a well-known method for turning an intractable differential equation into an integration problem (which may itself turn out to be intractable, but we live in hope). The method is usually described in textbooks and lectures with a fair amount of hand-waving. This article attempts to describe it in detail, with...

The tabular method for integration by parts
5 Dec 2024 | original ↗

There is a tabular method for organizing integration computations which require repeated application of the integration-by-parts formula. It is seldom taught, which is a shame: it hugely reduces the algebraic complexity of the problem.

Building and programming a USB auxiliary display using a SparkFun Pro Micro, an HD44780 LCD module, and an PCF8547 IC-to-parallel IC
5 Dec 2024 | original ↗

Make an "auxiliary LCD display" for a computer that displays data sent to it over a USB connection. Ready-made devices of this sort are widely available, but it's more fun to build your own.

Controlling a chain of MAX7219 LED matrices using C on a Raspberry Pi Pico
5 Dec 2024 | original ↗

The MAX7219 IC is widely used to control an 8x8 matrix of LED, but they can be chained to create much larger displays. This article describes how the chaining works, and how to create a driver for the Raspberry Pi Pico.

Why you can sometimes connect 3.3V and 5V I2C devices (and probably shouldn't)
5 Dec 2024 | original ↗

On websites, and in hobbyist kits for Raspberry Pi and Arduino, you'll often see IC devices connected that have different supply voltages. This is (usually) safe and, in non-critical applications, tends to work. But why?

Running CP/M on the Raspberry Pi Pico microcontroller
5 Dec 2024 | original ↗

This article introduces CPICOM -- an emulator for CP/M 2.2 on the Raspberry Pi microcontroller.

CP/M forty years on -- what it was, and why it still matters
5 Dec 2024 | original ↗

Why was the CP/M operating system so successful? Forty years on, why should we care?

Developing KCalc-CPM -- a scientific calculator utility for CP/M
5 Dec 2024 | original ↗

My first CP/M program for nearly 40 years -- how, and why, I wrote it.

Using Apache Avro for passing Java objects through a message broker, with a schema registry
5 Dec 2024 | original ↗

This article extends my earlier article on using Avro with a message broker. In this article I explain how to use the Apicurio schema registry to store Avro schema artefacts that are shared by multiple clients, rather than providing local copies for each client.

Capturing database change records using Debezium and Camel
5 Dec 2024 | original ↗

The notion of "change data capture" (CDC) is becoming increasingly significant, in an IT industry that stores and manages an ever-increasing volume of data. This article describes how to begin using the Debezium CDC framework with Apache Came, to collect and process change records from disparate data sources.

Deploying the Mosquitto MQTT message broker on OpenShift (part 2)
5 Dec 2024 | original ↗

Part 2 of my article on installation the Mosquitto MQTT message broker on OpenShift.

Using a Pi Zero and throw-away parts to provide a serial terminal for retrocomputing projects
5 Dec 2024 | original ↗

Many retrocompting projects are designed to be used with a serial terminal. It's easy to emulate a terminal using a desktop workstation, but more authentic to use a dedicated serial terminal. Real VT52-style terminals are expensive, and difficult to transport because they use CRTs. VGA and small HDMI monitors, however, are dirt cheap, as are USB...

JGemini -- a Java-based browser for Project Gemini protocols and content
5 Dec 2024 | original ↗

Introducing a simple graphical browser for Project Gemini content; back to the 90s -- in a good way.

Playing Zork 1 on a CP/M emulator on Linux
5 Dec 2024 | original ↗

In the last few years there has been a revival of interest in 8-bit microcomputers from the 70s and 80s. Many of these were based on the Zilog Z80, and many ran CP/M. This article about getting started with CP/M using an emulator on Linux.

Back to BASICs with a Pro Micro microcontroller
5 Dec 2024 | original ↗

Back in the 70s, desktop computers booted to BASIC. In this article, I describe my efforts to implement a BASIC programming environment on the SparkFun Pro Micro, a small Arduino-like 8-bit microcontroller.

Deploying the Mosquitto MQTT message broker on OpenShift (part 1)
5 Dec 2024 | original ↗

This article describes a method for deploying the Mosquitto MQTT message broker on OpenShift. Such an installation might potentially be useful in its own right, but the main purpose of the article is to discuss issues that are relevant packaging any application in an OpenShift-compatible way.

Implementing Apache ActiveMQ-style broker meshes with Apache Artemis
5 Dec 2024 | original ↗

Both Apache ActiveMQ and Apache Artemis have infrastructure for creating networked message broker meshes. However, their implementations are rather different, which can be problematic for integrators who want to migrate from ActiveMQ to Artemis. This article describes how to replicate -- so far as possible -- ActiveMQ mesh behaviour in Artemis.

"Spy pixels" -- how worried should we be?
5 Dec 2024 | original ↗

'Spy pixels' or 'tracking pixels' are surprisingly prevalent in email messages -- they are found, it seems, in perhaps 70% of all such communications. Is this cause for concern? How much personal data are they brokering?

Audible's returns policy -- who wins, who loses?
5 Dec 2024 | original ↗

Audiobook supplier Audible has recently caused controversy by changing its long-standing one-click, no-questions-asked returns policy. Why? And who stands to gain and lose from this change? What are the broader implications?

Rolling your own minimal embedded Linux for the Raspberry Pi
5 Dec 2024 | original ↗

Introducing a series of articles on building a custom Linux installation for the Raspberry Pi, for appliance applications.

How does Camel-K actually work?
5 Dec 2024 | original ↗

Camel-K is a relatively new technology for deploying Apache Camel routes directly to an OpenShift/Kubernetes cluster. There is a lot of hidden complexity; this article exposes some of it.

Using Apache Avro for passing Java objects through a message broker
5 Dec 2024 | original ↗

This article describes how to use Apache Avro to flatten a Java object, pass it through a JMS-compatible message broker, and reconstruct it again. Avro is a compact, schema-based data representation that is becoming increasingly important in messaging applications.

Conway's Game of Life in 3D perspective
5 Dec 2024 | original ↗

Implementing a program to run Conway's cell population simulation, using a 3D perspective view on the Linux framebuffer.

Implementing a web-based music player for Android
5 Dec 2024 | original ↗

Using an Android device as a remotely-controllable music player.

Creating an "animated score" for demonstrating musical compositions on YouTube, etc
5 Dec 2024 | original ↗

Animated musical scores are quite common on YouTube, for educational and promotional purposes. This article explains how to create one, using OpenShot and other Linux tools.

Why the energy cost or benefit of switching to DAB digital radio is hard to assess
5 Dec 2024 | original ↗

The "big switch-off" of analogue radio services in the UK has been deferred repeatedly. One of the reasons for this is that the impact on energy efficiency is hard to assess. This article seeks to explain why.

Why we only see one side of the moon -- the odd phenomenon of tidal locking
5 Dec 2024 | original ↗

We only see one face of the moon from the Earth, and that isn't a coincidence. The same process that causes this effect also affects other celestial bodies, often in more interesting ways.

Using the Qpid Proton C++ library to create a server for monitoring or telemetry data
5 Dec 2024 | original ↗

Collecting sensor data, or low-level system status information, is a job that is often best done in C/C++. Distributing this kind of data to other system components in a way that is platform- and language-independent can be a challenge. This article suggests a way to do this use AMQP message distribution.

How problematic is resampling audio from 44.1 to 48 kHz?
5 Dec 2024 | original ↗

Audio CDs were recorded using a 44.1 kHz sample rate that is found almost nowhere else. If we have to resample this audio to suit more modern equipment, how much loss of audio quality will there be?

They don't make 'em like that any more: the Lenovo W520
5 Dec 2024 | original ↗

In praise of an iconic laptop computer.

Did aliens really talk to us in "binary code" at Rendelsham Forest?
5 Dec 2024 | original ↗

It isn't often that coding theory can be used to evaluate a claim of a UFO encounter. Here is one instance where it can.

You be the linker -- building "Hello, world" from scratch, in hexadecimal
5 Dec 2024 | original ↗

This article describes how to write a trivial program for Linux using no compiler tools at all, but entering machine language directly in hexadecimal. Because we can.

Embedding resources into executables built using GCC
5 Dec 2024 | original ↗

Sometimes it's helpful to be able to create an executable program that embeds all the data it needs, and provide that data as files. C/C++ do not provide any standard way to do this, but GCC has facilities that the developer can use.

Using the new pluggable active/passive management framework in Apache Artemis
5 Dec 2024 | original ↗

The Apache ActiveMQ Artemis message broker holds out the possibility of real shared-nothing replication. The problem, though, lies in coordinating the active and passive brokers in the cluster. This article describes the new active/passive management framework, and how to use Apache Zookeeper as the source of authority on cluster roles.

How to write a technical or scientific report
5 Dec 2024 | original ↗

Some guidance, mostly for science and engineering students, on how to write a scientific or technical paper. I've updated this slightly to deal with the rise in web-based publication but, frankly, I don't think that different standards apply to electronic and print reporting.

Understanding Java's functional interfaces
5 Dec 2024 | original ↗

Functional interfaces are allow Java programmers to write methods whose arguments are lambda functions. How does this work, and why would it be useful?

Using Podman to deploy an image directly to OpenShift 4
5 Dec 2024 | original ↗

This article describes how to deploy a container image direct from a local repository to an OpenShift 4 cluster, and instantiate a pod based on that image.

How Microsoft Windows killed the palmtop computer
5 Dec 2024 | original ↗

1999 was the golden year of palmtop computing. Within a couple of years, palmtops were obsolete. Why?

Command-line hacking: Assigning folder icons to directories
5 Dec 2024 | original ↗

How to use basic Bash constructs, along with the Gnome gio utility, to assign folder icons to a set of directories.

Command-line hacking: displaying news headlines in the manual viewer
5 Dec 2024 | original ↗

How to use tools like curl and xsltproc to retrieve news headlines from the BBC, and display them using the manual viewer

Command-line hacking: paced breathing
5 Dec 2024 | original ↗

Using a Linux Bash script to generate audio/visual cues for timing paced breathing exercises.

Command-line hacking: querying an Internet radio database
5 Dec 2024 | original ↗

Using Linux command-line utilities to query an on-line database of Internet radio stations.

Command-line hacking: extracting audio metadata (tags)
5 Dec 2024 | original ↗

How to use Bash shell techniques to extract metadata (tags) from various audio file formats.

Command-line hacking: creating a tide table
5 Dec 2024 | original ↗

How to use Bash shell arithmetic to create a simple tide table

Command-line hacking: displaying a weather summary
5 Dec 2024 | original ↗

How to use tools like curl, sed, and groff to retrieve a weather forecast from the BBC, and format it for the terminal.

Command-line hacking: timezone conversions
5 Dec 2024 | original ↗

Using 'date' and 'timedatectl' to build a utility to help with scheduling meetings in different timezones.

Are Flatpak, et al., saving or drowning the Linux desktop?
5 Dec 2024 | original ↗

Desktop Linux will take off next year -- or so people have been saying for years. Do desktop containerization technologies like Flatpak make this more, or less, likely?

A skeptic's guide to headphones
5 Dec 2024 | original ↗

Understanding the advantages and disadvantages of the various types of headphone that are currently available, without all the "audiophile" silliness.

Why your vintage turntable could kill you
5 Dec 2024 | original ↗

Vintage vinyl records ought, perhaps, to be played on a vintage turntable. Although such appliances are still widely available, and can work well, they fall short of contemporary electrical safety standards.

Snake oil: balanced headphones
5 Dec 2024 | original ↗

Do balanced headphones provide an improvement in sound quality over conventional, single-ended designs? Unlikely. In fact, the increased complexity of these designs may actually reduce the accuracy of sound reproduction.

Do different CD transports sound different?
5 Dec 2024 | original ↗

Bits are bits, right? If a CD transport just sends digital data to a DAC, is it even possible that different transports sound different?

Why you can't improve your hi-fi system by upgrading the mains cable
5 Dec 2024 | original ↗

You really can't improve your hi-fi system with a fancy mains cable. But why? And why do people think you can?

Is "high resolution" audio really worth the effort?
5 Dec 2024 | original ↗

The availability of "better than CD" audio recordings is driving, and being driven by, more expensive and elaborate audio hardware, even in the consumer market. Is this a good thing?

Does it matter how we rip audio CDs?
5 Dec 2024 | original ↗

Copying an audio CD -- perhaps to a portable music player -- is a common enough operation. There are strong opinions on how to do this, and what software to use. But does it really make any difference? Or is one bit the same as any other?

Why is there a vinyl revival?
5 Dec 2024 | original ↗

Why are sales of vinyl records increasing, when digital streaming services provide access to almost any recording ever made, in superior technical quality?

A review of the Leak Stereo 130 and CDT
5 Dec 2024 | original ↗

A number of reviews of the Leak Stereo 130 and CDT can be found online, but they are short on practical details. I've been using mine eight hours a day for several months; this is what I think of them.

Sorting files and directories on a FAT-formatted USB memory stick
5 Dec 2024 | original ↗

Many portable and automotive media players accept USB memory sticks or SD cards containing audio files. Very often, these players have no sorting logic, and display files and directories in the arbitrary order they appear in the filesystem. This article describes how to sort a FAT filesystem using Linux utilities, to make playback more convenient.

Calculus of variations: a lunchbreak guide
5 Dec 2024 | original ↗

The calculus of variations is a branch of mathematics that deals with finding functions that optimize systems. Although calculus of variations has its origins in the 18th century, it is still not widely taught, either to science or engineering students. This brief guide intends to explain the basic principles, with a fully-worked example, in...

Why "RMS watts" is a useless measure of power
5 Dec 2024 | original ↗

It's common for hifi amplifiers and speakers to have a power rating expressed in terms of "RMS watts". Although RMS amplitude is an important concept in electronic engineering, it's meaningless here, and should be avoided.

How flat-earthers use misrepresentations of scale to promote their ideas
5 Dec 2024 | original ↗

Misrepresentations of scale are common in the literature of organizations that seek to deceive. However, it's sometimes difficult, or unhelpful, to draw diagrams to scale. This article tries to explain the difference between benign and pernicious distortions of scale. I'm picking on the flat-earthers for the purposes of illustration, but the...

Using a shift register to control eight digital outputs with three GPIO lines on the Raspberry Pi
5 Dec 2024 | original ↗

A simple and inexpensive shift register can be used to increase the digital output provision of a Raspberry Pi or microcontroller. This well-know technique is easy to apply, but has some limitations that require careful consideration.

Getting reasonably robust proximity measurements from an ultrasonic sensor on the Raspberry Pi
5 Dec 2024 | original ↗

The HC-SR04 proximity sensor is an inexpensive and widely-used ultrasonic device. Connecting one to an HC-SR04 to a Raspberry Pi is a common educational exercise, but getting accurate, repeatable measurement of distance in a real application is actually quite difficult. This article explains why, and what can be done to improve matters.

Monitoring an INA219 chip in a Raspberry Pi battery-backed power supply
5 Dec 2024 | original ↗

Many battery-backed power supplies for the Raspberry Pi, and similar systems, use the INA219 current/voltage monitor IC. This device has an I2C interface by which the Pi can determine the battery voltage and current, and estimate the charge level and run-time. This article describes how to write C code that interacts with the INA219.

Using an HD44780 LCD display module with the Raspberry Pi, from the ground up
5 Dec 2024 | original ↗

In this article I explain how to construct, and program in C, an IC interface to the popular HD44780 LCD display for the Raspberry Pi. Between the article and the accompanying source code, no technical details are concealed: I present the complete hardware design and every line of C code needed to operate it.

The costs and benefits of software pulse-width modulation on the Raspberry Pi
5 Dec 2024 | original ↗

The Raspberry Pi doesn't offer much in the way of analog outputs, or even hardware controlled PWM. Software-controlled PWM is an alternative in some applications, but it needs to be used carefully, if inefficiencies are to be avoided.

Is dithering necessary when reducing the number of bits per sample in an audio waveform?
5 Dec 2024 | original ↗

The use of dithering when mastering a CD is well-established, and its effectiveness is rarely challenged. But is it beneficial in other circumstances when we need to reduce the bit depth of an audio stream?

Comparing a natively-compiled Java webservice with C
5 Dec 2024 | original ↗

Implementing a webservice in C and Java, to see which performs better in terms of throughput and resource usage.

Using Quarkus to provide a REST interface to a message broker
5 Dec 2024 | original ↗

Using a Camel application based on Quarkus to provide a way to route messages to and from a message broker using HTTP requests

Why your cheap mains inverter could kill you
5 Dec 2024 | original ↗

A mains inverter is a very useful device, but inexpensive models create significant electrical safety hazards. This article explains why.

Using the Qpid Proton C++ library to understand AMQP
5 Dec 2024 | original ↗

AMQP is not a trivially-straightforward protocol to understand, but it's necessary to get to grips with it to write effective software that uses the Qpid Proton AMQP library. Perhaps one of the simplest ways to understand AMQP is to use Proton's own packet-tracing features, as this article explains.

Using an Oracle database as storage for the Apache Artemis message broker -- part 1
5 Dec 2024 | original ↗

This article describes the fundamentals of setting up the Apache Artemis message broker to use an Oracle database as the message data store.

Using an Oracle database as storage for the Apache Artemis message broker -- part 2
5 Dec 2024 | original ↗

This article is the second on my series on using the Oracle database as the message data store for the Apache Artemis message broker. In it, I describe the database schema, and how it supports messaging operations.

Why does my Raspberry Pi project keep displaying the 'lightning bolt' undervoltage indicator?
5 Dec 2024 | original ↗

The Raspberry Pi is widely used as part of a more complex electronic project or construction. There's a misconception that such a construction can be powered from the same cheap, nasty USB charger that is suitable to power a Pi on its own. Attempting to do this often leads to undervoltage situations. This article explains why, and what...

A self-contained CP/M computer based on the Z80 Playground
5 Dec 2024 | original ↗

This article describes how to create a self-contained CP/M-based microcomputer using a Z80 single-board computer, a Raspberry Pi Zero, and some assorted electrical parts.

Using Keycloak for authentication with Apache Artemis: part 2
5 Dec 2024 | original ↗

This article continues my explanation of using Keycloak as an authentication provider for Apache Artemis, by showing how to use a bearer token to authenticate a JMS client.

Getting back into C programming for CP/M -- part 2
5 Dec 2024 | original ↗

Using the 1989 HI-TECH C compiler on CP/M, and some general observations about CP/M programming with real hardware.

Is Collapse OS really a practical proposition?
5 Dec 2024 | original ↗

Is it really possible to design an operating system for a computer built from scavenged parts after civilization has failed?

The vexed problem of generating delays in a CP/M program
5 Dec 2024 | original ↗

CP/M has no timing or delay functions, because CP/M never stipulated that compatible hardware have any kind of clock. So how do we implement short (fractions of a second) delays in a CP/M program?

Serial device mapping in CP/M
5 Dec 2024 | original ↗

CP/M only recognized four serial devices. How did application cope when more than four serial ports were installed?

Using a CP/M machine to log into a Linux server using an RS232 connection
5 Dec 2024 | original ↗

Because -- why not?

Some thoughts on a DS1302 real-time clock board for RC2014/Z80 and CP/M
5 Dec 2024 | original ↗

Constructing and programming a real-time clock board for my Z80 CP/M system

Exchanging files between an SC130 CP/M board and a Linux system
5 Dec 2024 | original ↗

This article describes a couple of methods for sharing data and code between a CP/M system with RomWBW BIOS and a Linux system.

Updating, building, and flashing RomWBW on an SC130 CP/M system
5 Dec 2024 | original ↗

A step-by-step guide to building and installing a modified version of the RomWBW firmware on a CP/M Z80 board.

Constructing and programming a YM2149 sound board my RC2014 Z80 system
5 Dec 2024 | original ↗

An 80's-style 8-bit computer has to be cable of making 80's 8-bit sound. In this article I describe adding a sound board to my RC2014 system.

Using flash memory as non-volatile storage on the Pi Pico microcontroller
5 Dec 2024 | original ↗

The Pi Pico is an impressive microcontroller for its size and cost, but it lacks specific non-volatile memory. This article explains how to use the program flash ROM for that purpose.

Adding a floppy disk controller to my RC2014 Z80 system
5 Dec 2024 | original ↗

No 80s computer is complete without the chucka-chucka-chucka sound of a floppy disk drive doing its thing.

Getting to grips with JMS shared subscriptions
5 Dec 2024 | original ↗

Shared subscriptions are a 'new' feature in JMS, that seems to be poorly understood, particularly in a clustered environment. In this article, I explain how shared subscriptions are supposed to work, and what the implications are for load sharing and fault tolerance.

CP/M resources
5 Dec 2024 | original ↗

A landing page for my various CP/M articles and utilities.

They don't make 'em like that any more: a paean to the Cowon D2 DAB
5 Dec 2024 | original ↗

The Cowon D2 DAB was a media player ahead of its time. There was nothing like it in 2005, and there still isn't.

They don't make 'em like that any more: The Philips Pronto remote control
5 Dec 2024 | original ↗

The Pronto offers a salutary lesson in how an excellent product can die, leaving a gaping hole in the market that nobody wants to fill.

Designing a dual 5V-to-RS232 serial level converter for the RC2014
5 Dec 2024 | original ↗

Using an RC2014-based retrocomputer with genuine RS232 peripherals requires support for voltage level conversion. Although converter modules are inexpensive and widely available, I wanted to design something that would plug into an RC2014 backplane, just for neatness.

Adventures with RC2014, Z80, and CP/M
5 Dec 2024 | original ↗

This is a landing page for my various articles on building a period-appropriate CP/M system using the RC2014 bus.

What you give up, when you opt out of the surveillance economy
5 Dec 2024 | original ↗

Is it possible to live without Google and the like, and still use modern, portable computing devices? I still don't know.

Snake oil: 4K displays on smartphones
5 Dec 2024 | original ↗

The screen resolution of smartphones has increased dramatically over the last ten years. Have we reached a point where further improvement is just a waste of money?

They don't make 'em like that any more: NVIDIA Shield K1 tablet
5 Dec 2024 | original ↗

Despite its low initial price, the Shield K1 continues to put modern Android tablets to shame.

Does the use of custom Android ROMs improve or worsen security?
5 Dec 2024 | original ↗

This question is not particularly easy to answer, but understanding the implications helps.

Command-line hacking: displaying system temperature
5 Dec 2024 | original ↗

Using simple file and string handling techniques in the Bash shell.

Some thoughts on always-on OLED displays on smart watches
5 Dec 2024 | original ↗

Why an expensive smart watch is still less good than a cheap Timex, when it comes to telling the time.

Is your fitness watch lying to you?
5 Dec 2024 | original ↗

People are increasingly using smart watches and fitness watches for tracking health metrics. Is it wise to do so? (Short answer: probably not.)

They don't make them like that any more: the slide rule
5 Dec 2024 | original ↗

This simple analog computer has served humanity for more than four centuries. Shouldn't we try to preserve it?

ActiveMQ/Artemis or Kafka for Java messaging?
5 Dec 2024 | original ↗

ActiveMQ and Kafka are both open-source, Java-based, message brokers with applications in inter-process communication. But can they be used interchangeably?

They don't make 'em like that any more: how the Vectrex almost revolutionized video gaming
5 Dec 2024 | original ↗

The Vectrex used an entirely novel display technology that was superior to the TV-based displays of the time. Why didnt it catch on?

When science and engineering are in conflict: the weird Whipple truss bridge
5 Dec 2024 | original ↗

What happens when we have to make real-world construction match unrealistic mathematical models, that we happen to know how to simulate?

Using Keycloak for authentication with Apache Artemis: part 1
5 Dec 2024 | original ↗

This article provides a very simple example of setting up the Apache Artemis message broker to authenticate against a Keycloak server.

Exploring Java 17's container-awareness features
5 Dec 2024 | original ↗

How Java's "container awareness" feature works with simple (Docker/Podman) containers, and OpenShift pods.

Do you need to wipe that hard drive? And can you?
5 Dec 2024 | original ↗

Is it safe to sell a used hard drive without securely erasing all the data? And is it even possible to erase all the data, even if we want to?

Differential equations: how does separation of variables really work?
5 Dec 2024 | original ↗

'Separation of variables' is one of the first methods usually taught to math and engineering students for solving differential equations, and yet the method as taught is mathematically very sloppy. That's not to say it doesn't work, but rather that it isn't made clear why it works, and whether similar methods will work elsewhere. This article...

Gentoo Linux -- is this the solution to the Winux problem?
5 Dec 2024 | original ↗

Even seasoned Linux developers speak of Gentoo in hushed tones. It's not for the faint-hearted, that's for sure. But how stout-hearted must you be, for Gentoo to be appropriate?

Using Private Internet Access VPN with Gentoo Linux
5 Dec 2024 | original ↗

It's not that difficult, but there's no built-in support.

Can you use ALSA to get 'bit-perfect' audio playback on Linux?
5 Dec 2024 | original ↗

Regardless of the subjective merits of 'bit-perfect' audio, is it technically possible on Linux?

Going back to ALSA in 2024
5 Dec 2024 | original ↗

Not everybody likes Pulse audio or PipeWire. But is it practicable to abandon them in favour of traditional ALSA at this point?

One month with Gentoo
5 Dec 2024 | original ↗

Will my Gentoo journey be coming to an end after the first month?

They don't make them like that any more: the Xircom REX 6000 PDA
5 Dec 2024 | original ↗

The REX was the world's first, and last, credit-card-sized personal computing device. Why did it fail?

They don't make them like that any more: the Quad 306 amplifier
5 Dec 2024 | original ↗

The elegant simplicity and serviceability of this compact power ampliifer has given it an enthusiastic following for nearly forty years.

A few interesting features of Vim, part 1
5 Dec 2024 | original ↗

The Vim text editor is almost ubiquitous on Linux systems, and for good reasons. This is the first article in a series which seeks to uncover some handy features of Vim, that don't seem to be widely known.

Some notes on installing Lineage OS on modern-ish Samsung Android devices
5 Dec 2024 | original ↗

Although Lineage OS installation is pretty well-documented, there are a few things that might benefit from some more detailed explanation.

They don't make 'em like that any more: the 3.5mm headphone jack socket
5 Dec 2024 | original ↗

What's the real reason that cellphone manufacturers stopped fitting this simple, robust connector?

Comparing Dropbox, pCloud, and rsync.net for off-site storage for Linux users
5 Dec 2024 | original ↗

For a Linux user in particular, which of these popular services is the most effective?

Getting back into C programming for CP/M
5 Dec 2024 | original ↗

This article is about how programming for CP/M, usng a 40-year-old C compiler, differs from modern C development, even for console applications.

Fitting an NVMe disk in a computer with no NVMe support
5 Dec 2024 | original ↗

Can you fit an NVMe solid-state drive into a computer that was made long before NVMe was invented? And should you?

How de-Googled is Lineage OS?
5 Dec 2024 | original ↗

Lineage OS is based on the Android Open-Source Project, whose primary maintainer is Google. To what extent can it be considered Google-free?

Gentoo vs. MX Linux on old-ish laptops
5 Dec 2024 | original ↗

It isn't easy to run Linux well on ten-year-old laptops -- Linux distribution maintainers no longer see this as a worthwhile endeavour. In this article I compare Gentoo and MX Linux as potential solutions to this problem.

Log4J -- ask yourself: do I really need that library?
5 Dec 2024 | original ↗

What can the software industry learn from the Log4J security debacle?

Why are the variable names all wrong in my decompiled Java class?
5 Dec 2024 | original ↗

Java decompilers usually make a good job of recovering program structure and the names of classes and methods; why do they make such a bad job of recovering variable names?

They don't make them like that any more: Epson MX-80 dot matrix printer
4 Dec 2024 | original ↗

There was a time when we didn't hate printers. Unfortunately, it was forty years ago.

They don't make them like that any more: the Yamaha DX7 keyboard
4 Dec 2024 | original ↗

Nothing says '80s pop' like a DX7.

Using Windows is like smoking (?)
3 Dec 2024 | original ↗

As the Microsoft Windows user experience continues to worsen, what should Linux advocates do?

Ten steps to becoming a Linux snob
3 Dec 2024 | original ↗

There was a time when merely being a Linux user set you apart from the common herd. These days, with Linux so ubiquitous, you'll need to take additional steps to make yourself out as one of the elite.

Wayland from the ground up
1 Dec 2024 | original ↗

Wayland isn't new, but many of us have been able to avoid it until recently. With many Linux distributions now pushing Wayland hard -- even for the Raspberry Pi -- it's getting harder to justify ignoring it. This article is for people who have been hoping until now that Wayland will go away, particularly X developers, and don't know much about...

Why systemd is a problem for embedded Linux
5 Nov 2024 | original ↗

I don't want to post yet another anti-systemd rant, but I think the ubiquity of systemd could eventually create real problems for embedded Linux. I just wish I knew what to do about it.

Using Apache Camel to implement an IRC bot
18 Mar 2024 | original ↗

Camel's IRC support makes it relatively easy to implement an IRC conversation agent, that can process IRC messages and produce responses.

Adventures with Artix
18 Mar 2024 | original ↗

Artix is a low-resource Linux that can be configured to run well on old, low-powered computer hardware. In this article, I describe my first attempts at setting it up.

C development for Linux without a standard library
18 Mar 2024 | original ↗

There are relatively few good reasons for writing C code without using a standard C library. However, doing so provides valuable insights into how compilers and operating systems work, and is worth doing if only for its educational value.

The nuts and bolts of anonymous inner classes in Java
12 Mar 2024 | original ↗

Many of the standard Java APIs make extensive use of anonymous inner classes, to provide features that in other language would be provided using lambda functions or closures. However, anonymous inner classes have limitations that many developers find difficult to understand and to work with. This article explains why this is the case.

Command-line hacking: countdown timer
6 Mar 2024 | original ↗

Using Linux date calculations to displaying a running countdown time in the terminal.

How Linux home directory encryption works
1 Mar 2024 | original ↗

Encryption of home directories is out of favour in modern Linux distributions, but it offers some compelling advantages over the alternatives, if used with care.

Rudiments of Java concurrency control, part 1
16 Feb 2024 | original ↗

The first part in a series on concurrency management in multi-threaded Java programs. This article deals with monitor objects and their use for demarcation of non-concurrent sections.

They don't make 'em like that any more: Borland Turbo Pascal 7
13 Feb 2024 | original ↗

Why half a million people learned to program in Pascal, when you'd think they had no earthly reason to.

Some thoughts on using a small cellphone as a media player
4 Feb 2024 | original ↗

Modern portable media players are generally smartphones without an antenna. So why not repurpose a real smartphone as a media player?

Yet another desktop Raspberry Pi media player
20 Jan 2024 | original ↗

Using a Raspberry Pi as a media player is by no means a new idea. However, using one as a self-contained hifi component is not common, and requires a bit of work.

Making tab-and-slot boxes for electronic prototypes. Or: how I stopped worrying and learned to love the laser
19 Jan 2024 | original ↗

Some thoughts on my first experiments with the design of electronics enclosures for laser cutting.

Getting started with Kafka Streams, part 2
19 Jan 2024 | original ↗

Following on from my article on the rudiments of the Kafka Streams API, this one introduces stateful operations like counting and aggregation.

Getting started with Kafka Streams
19 Jan 2024 | original ↗

Kafka Streams is a Java library and framework for creating applications that consume, process, and return Apache Kafka messages. This article provides a tutorial about implementing a very basic Streams application.

They don't make them like that any more: Garmin Nuvi 300
17 Jan 2024 | original ↗

One of the earliest mass-market car satnav units, the Garmin Nuvi 300 still has features that modern devices lack. Why is that?

Predicting eclipses with clockwork
15 Jan 2024 | original ↗

We're used to computing devices being electronic. But what can we do with a purely mechanical approach? This article looks at how eclipse prediction might have worked in the Antikythera Mechanism, c.2300 years ago.

RSS feed
11 Jan 2024 | original ↗

About RSS support on this website

Command-line hacking: calculating the phase of the Moon
6 Jan 2024 | original ↗

How to use Bash shell arithmetic, along with the 'date' utilty, to calculate the phase of the Moon on a particlar day.

They don't make 'em like that any more: Blackberry Bold 9700
1 Jan 2024 | original ↗

The Bold 9700 was a premium cellphone from a company at the top of its game. Does it merit the fawning reviews it collected in 2009?

Kafka Connect from the ground up, part II
19 Dec 2023 | original ↗

This article describes what I think is the simplest possible Kafka Connect on Strimzi -- the Kubernetes implementation of Kafka. If follows from an earlier article about using Kafka Connect on bare metal.

Kafka Connect from the ground up
19 Dec 2023 | original ↗

This article describes what I think is the simplest possible Kafka Connect set-up, using a single-node Kafka installation. To ensure that the principles are clear, I use only a text editor and command-line tools to run the Connect infrastructure and deploy the connector.

Powering a Raspberry Pi from an attached Waveshare USB HAT
1 Dec 2023 | original ↗

Attaching high-capacity hard disks has always been a bit of a problem for the Raspberry Pi. In this article I describe a simple modification to a Waveshare USB HAT, that allows it to power both the attached drives and also the Pi itself.

Converting push-button events to keyboard events in the Raspberry Pi
1 Dec 2023 | original ↗

The Raspberry Pi has a bunch of GPIO pins we can use to connect push-buttons. But how do we interface push-buttons to an application that expects only keyboard input?

Rolling your own minimal embedded Linux for the Raspberry Pi -- part one: booting to a root shell
29 Nov 2023 | original ↗

This article is part of a series on building a custom Linux installation for a Raspberry Pi-based appliance. It explains how to make a bootable SD card with Pi firmware, a Linux kernel, and a shell. It's about as minimal as a Linux system can be.

Why the grammer snobs have it all wrong about the apostrophe
29 Nov 2023 | original ↗

Was there ever a golden age of the apostrophe, when everybody used it the same? No.

They don't make 'em like that any more: Archos 605 media player/recorder
29 Nov 2023 | original ↗

You think Apple was an innovator in the world of personal media players? Think again.

What exactly is 'saturation'?
24 Mar 2023 | original ↗

Most image editing applications provide a 'saturation' adjustment; some provide adjustments of 'brilliance', 'chroma', and other things. This article explains what these terms actually mean.

Yet another Darktable/Lightroom comparison
15 Mar 2023 | original ↗

Darktable isn't supposed to be an alternative to Adobe Lightroom, but many people hope to use it as one. After all, Darktable's (free) pricing is very appealing. Here are my views on whether a move to Darktable makes sense.

Using media keys in a Linux console application
3 Mar 2023 | original ↗

Mapping keyboard keys to key codes on Linux is well-documented for the graphical desktop. But what about console applications on embedded Linux systems? There's not much documentation in this area.

Using the Linux framebuffer in C/C++ -- just the essentials (part 2)
2 Feb 2023 | original ↗

This article continues my original framebuffer "just the essentials" article, by describing how to handle less straightforward framebuffer configurations.

Using the Linux framebuffer in C/C++ -- just the essentials
2 Feb 2023 | original ↗

The absolute minimum information needed to start using the Linux framebuffer as a graphical display in C/C++ applications.

pico-photo-clock: an easy-to-construct Pi Pico desktop photo clock
21 Jan 2023 | original ↗

This article describes how to construct a desktop photo clock using a Raspberry Pi Pico and some solder-free peripherals.

Using the Maxim DS3231 I2C real-time clock in C on the Raspberry Pi Pico
21 Jan 2023 | original ↗

The Maxim DS3231 I2C real-time clock is a reasonably accurate, inexpensive device, that is easy to interface to the Raspberry Pi Pico.

Using ImageMagick to generate anti-aliased bitmap fonts for a microcontroller's LCD display
17 Jan 2023 | original ↗

This article describes how to generate and use compressed, anti-aliased font data, for use in a microcontroller application.

The Pi Pico, two years on
13 Jan 2023 | original ↗

I've been using the Raspberry Pi Pico for embedded projects for the last two years or so. What do I think of it now?

Some thoughts on the Waveshare 3.5-inch LCD/SD module for the Raspberry Pi Pico
10 Jan 2023 | original ↗

This is a versatile touchscreen display module with a strikingly low cost. But is it any good?

Why 'int x = 0' is uninitialized data to the GNU C compiler
2 Jan 2023 | original ↗

An oddity of the GCC C compiler that can lead to strange results, particularly in an embedded application

Raspberry Pi Pico: loading code into RAM and running it -- part 2
7 Dec 2022 | original ↗

This is the second of (at least) two articles on loading and running arbitrary executable code into RAM on the Pico, and running it.

Raspberry Pi Pico: loading code into RAM and running it -- part 1
7 Dec 2022 | original ↗

This is the first of (at least) two articles on loading and running arbitrary executable code into RAM on the Pico, and running it.

Some thoughts on using a USB keyboard with the Raspberry Pi Pico
13 Nov 2022 | original ↗

The Pi Pico has USB host support, and can work with a USB keyboard. Although there are some programming examples, the general approach to programming USB host operations is not well documented.

Using the rdkafka library to integrate a C program with Kafka messaging
9 Nov 2022 | original ↗

This article provides a brief overview of the rdkafka library, illustrated by a simple test application in C.

Why synchronous write speed is likely to be the limiting factor in message broker throughput
2 Nov 2022 | original ↗

Administrators of middleware message brokers often struggle to get adequate throughput. A lot of time and effort can be wasted, if the administrator doesn't appreciate the crucial role of synchronous disk writes in these installations.

Why I won't be dumping DuckDuckGo over Ukraine
16 Mar 2022 | original ↗

Does controlling web search rankings amount to censorship? Does it matter if it does?

cwordle -- A Wordle-like word-guessing game for CP/M
18 Feb 2022 | original ↗

Building a CP/M implementation of the notorious Wordle game.

The peculiar Benford distribution
11 Feb 2022 | original ↗

or thestates that in many data sets, the first digit of each value tends to be small. This is not at all obvious, but it has significant implications.

UTF-8 and the problem of over-long characters
3 Feb 2022 | original ↗

How an oddity in the way UTF-8 encoding works can cause all sorts of problems for unwary developers, including security weaknesses.

Juice-jacking -- it's a problem, but not because it's a problem
3 Feb 2022 | original ↗

"Juice-jacking" is the alleged practice of getting unauthorized access to the contents of a cellphone by subverting public USB charging points. It doesn't happen, and probably never has; so why has there been a recent increase in scare stories?

How Unicode reading direction characters defeat source code inspection, and what it means for the open-source movement
3 Feb 2022 | original ↗

There's been a recent scare that Unicode reading direction characters could be used to conceal malicious code in open-source projects. This is undoubtedly true, but that fact doesn't make it significantly harder to ensure the security of open-source code than it already is.

Multi-source Z80 assembly programming for CP/M
30 Jan 2022 | original ↗

How to use Microsoft's Macro80 and Link80 utilities on CP/M, to build a program consisting of multiple assembly-language files.

ARM assembly-language programming for the Raspberry Pi
30 Jan 2022 | original ↗

A series of simple, progressive examples that demonstrate the essential features of programming in ARM assembly language.

Writing new interactive fiction games for CP/M using PunyInform and Linux
24 Jan 2022 | original ↗

It's still possible to write "text adventure" games for CP/M and other small, vintage computers. Here is one approach, using Linux as the development platform.

Converting a floating-point number to a fraction (approximately) using continued fraction expansion
15 Jan 2022 | original ↗

A detailed description of a method for performing this common numerical conversion, with C source code.

Raspberry Pi as a networked storage (NAS) device
13 Dec 2021 | original ↗

How to construct a custom networked storage (NAS) unit based on a Raspberry Pi and two mirrored USB hard drives -- and why you might want to.

Making a Raspberry Pi bootable SD card from a root filesystem
3 Dec 2021 | original ↗

You've created a custom Linux installation for the Raspberry Pi. How do you turn that into a bootable SD card image that can be distributed?

Does it matter if amateur radio dies out?
30 Nov 2021 | original ↗

In this age of instant, world-wide communications, does it matter if a hundred year-old radio culture fades away?

Why the Linux console is so awesome
30 Nov 2021 | original ↗

We've all gotten so used to graphical desktops that we're losing sight of how much can be accomplished on Linux using only a console. This is a shame, because efficient console-only operation is possible on a computer that would otherwise be fit only for landfill, and on modern high-efficiency devices with limited computing power.

Making an 8x32 LED auxiliary display with a USB interface, from an LED matrix and a Raspberry Pi pico
23 Nov 2021 | original ↗

A specific application of the Pico7219 library that I described in an earlier article.

A very brief overview of Kotlin for Java developers
12 Nov 2021 | original ↗

Kotlin is a Java-compatible programming language that has increased in popularity very quickly over the last few years. This article provides the briefest of overviews, for experienced Java developers who might be considering using Kotlin.

An overview of finite fields
10 Nov 2021 | original ↗

This article describes the concepts of finite fields, from the ground up, to a level at which it is possible to understand modern encryption algorithms. I assume only a high-school understanding of math.

Homeopathy: flushing science down the lavatory
9 Nov 2021 | original ↗

My purpose in this article is not to explain that homeopathy doesn't work -- for all I know it might -- but that widespread acceptance of homeopathy is damaging to the scientific enterprise, and ultimately to society. I will also make the suggestion that the increased interest in homeopathy, and in other forms of alternative medicine, is a...

Samsung DeX -- the good, the bad, and the ugly
6 Nov 2021 | original ↗

The advantages and disadvantages of Samsung DeX on an Android cellphone, compared with a desktop or laptop computer.

On master/slave
18 Mar 2021 | original ↗

A small step in the right direction, or political correctness gone mad?

Can Project Gemini rewind the Web thirty years?
15 Mar 2021 | original ↗

The modern World-Wide Web is broken. Is Gemini the repair?

More like Windows every day
17 Feb 2021 | original ↗

The ease of installation and use of modern desktop Linux distributions comes at a price. I review a couple of low-complexity alternatives to mainstream Linux distributions: Alpine and Devuan.

The planet Vulcan: a cautionary tale that deserves to be better known
14 Feb 2021 | original ↗

Why was the non-existent planet Vulcan so frequently sighted by astronomers in the nineteenth century, and what can contemporary scientists and science students learn from this episode?

Building a custom mechanical keyboard from scratch
14 Feb 2021 | original ↗

There are many kits and plans available for constructing miniature mechanical keyboards. But what do you do if you want a layout the nobody else seems to use? Build it from scratch.

Reviving old keyboards for Arduino
13 Feb 2021 | original ↗

Although connecting a USB keyboard to an Arduino-type microcontroller without addition hardware can be tricky, there are no such problems with many 90s keyboards. This article is about giving new life to old keyboards, by using them as input devices for microcontroller projects.

Why the fascination with retrocomputing?
3 Feb 2021 | original ↗

Why do so many IT professionals like to tinker with vintage computers and software?

Peli "Protector" case as a rugged enclosure for a Raspberry Pi-based field terminal
21 Jan 2021 | original ↗

Peli cases have a reputation of robustness, and look like a promising way to implement a rugged terminal using a Raspberry Pi.

Building and programming a USB keypad from the ground up
19 Jan 2021 | original ↗

The first step towards designing and building a custom keyboard, from the very first principles, using an Arduino-type microcontroller.

Using Linux command-line tools for programming the SparkFun Pro Micro microcontroller (and similar)
19 Jan 2021 | original ↗

Although building and deploying a simple program to an Arduino board is a point-and-click operation using the Arduino IDE, implementing more complex programs requires more robust build tools. This article describes how to build on Linux using command-line tools -- a process that is nowhere near as easy as it should be. If we can build using...

A Raspberry Pi and touchscreen case that anybody can make
11 Jan 2021 | original ↗

This is a design for a robust, wooden enclosure for a Raspberry Pi, battery power supply, and touchscreen, that can be made using hand tools.

Rolling your own minimal embedded Linux for the Raspberry Pi -- part four: audio
1 Dec 2020 | original ↗

This article is part of a series on building a customer Linux installation for a Raspberry Pi-based appliance. It explains how to install and set up the minimum software to get audio playback working.

Rolling your own minimal embedded Linux for the Raspberry Pi -- part three: services and remote access
1 Dec 2020 | original ↗

This article is part of a series on building a customer Linux installation for a Raspberry Pi-based appliance. It explains how to set up a system which hitherto only boots to a root shell, to a network-aware installation with service management.

Rolling your own minimal embedded Linux for the Raspberry Pi -- part two: early initialization
1 Dec 2020 | original ↗

This article is part of a series on building a customer Linux installation for a Raspberry Pi-based appliance. It explains how to obtain and install fundamental utilities for use in a system with a read-only filesystem, and no package manager.

Rolling your own minimal embedded Linux for the Raspberry Pi -- part five: X
1 Dec 2020 | original ↗

It's entirely possible to run simple, X-based applications in an appliance-based Linux installation: you just have to dispense with the graphical desktop and all its baggage. This article explains how.

Switching a couple of amps with a Raspberry Pi and a relay
1 Dec 2020 | original ↗

Switching loads of an amp or two with a Raspberry Pi or a microcontroller can be accomplished using a small number of inexpensive components. Suitable circuits are widely published, but the details of operation are not always described.

Using an I2C analog-to-digital converter chip with the Raspberry Pi, from the ground up
30 Nov 2020 | original ↗

This article is about using an I2C analogue-to-digital device for applications like reading sensor values or monitoring backup batteries. With all the technical bits left in.

Using the FreeType library to render text nicely onto a Linux framebuffer
20 Nov 2020 | original ↗

Writing graphical applications for minimal and embedded Linux systems can present a challenge. One of the problems is producing nicely-rendered text without the facilities that a graphical desktop would provide. This article describes how to use the FreeType library to render text to the Linux framebuffer.

Examining simple build and deployment operations on OpenShift 3/4
13 Nov 2020 | original ↗

See how OpenShift 3/4 deployment works in detail, using only command-line tools.

Why pitch is not the same as frequency
10 Nov 2020 | original ↗

In many cases, "pitch" is just the musician's way of saying "frequency". However, pitch has a perceptual element to it, and the ear can be fooled. This article explains one of the ways in which this can happen, and why it isn't correct to use the terms "pitch" and "frequency" interchangeably in music.

↑ These items are from RSS. Visit the blog itself at https://kevinboone.me/ to find everything else and to appreciate author's digital home.