jack hall

Embedded / IoT / Industrial data

Jack Hall

Firmware that stays connected, and the systems that read it.

C/C++ · Python · ESP32 · LTE · MQTT · Azure IoT

Signal path: an RFID tag, read by an ESP32 and LTE gateway, published through an MQTT broker to Azure IoT Hub tag RFID gateway ESP32 + LTE broker MQTT cloud IoT Hub

What I do

I build and support firmware for devices that live in the field. My current work is an ESP32 gateway that reads RFID tags over Ethernet, reaches the cloud over LTE or Wi‑Fi, takes its configuration from an Azure IoT device twin, and updates itself over the air. Most of my time goes to the parts that decide whether a unit in a customer's back room keeps working: TLS on a small memory budget, recovery when a modem or a link goes quiet, and diagnostics that tell a support desk what broke without a site visit.

Outside client work I build open tools for industrial data, from Sparkplug B conformance testing to statistical process control. I also write the release plans, test gates and support models that keep a fleet running. I'm based in the United States.

Selected projects

  • twinflow

    A digital twin of a warehouse receiving and putaway operation. A discrete-event model runs against a simulated device fleet over MQTT, and a Lean Six Sigma engine judges both the live telemetry and the model's own predictions. The first build phase is closed, and the roadmap and its evidence rules are public.

    Python · Apache-2.0 or commercial

  • spbconform

    The Eclipse Sparkplug B 3.0.0 assertion table, and a runner that checks an edge node against it. It carries all 299 assertions the specification marks as testable, with an executable check for the 143 an in-process harness can observe and a recorded reason for each of the other 156.

    Python · MIT · zero dependencies

  • secom-spc

    Statistical process control on the UCI SECOM semiconductor manufacturing dataset, with a fail-prediction study that reports what the data can and cannot support.

    Python

  • sparkplug-pipeline

    Industrial telemetry from a Sparkplug B edge node, over MQTT, into TimescaleDB, from one docker compose up. The simulator reorders, duplicates, corrupts and replays messages late on purpose, and an integration test checks that each case lands where it should. Ingest measured at a median of about 4,200 messages per second on a laptop.

    Python · TimescaleDB · Apache-2.0

Engineering tools

  • performance-ladder-review

    A measure-first performance skill for AI coding agents: delete before you tune, no claim without a number, and a PERF: marker on every decision. Results from three of my projects are charted in the README.

    Claude Code skill · MIT

  • git-quality-gates

    Git hooks and CI gates for conventional commits, a regression-test rule on fixes, comment and prose standards, and a copyleft license allowlist, with every bypass logged.

    Python · MIT

  • claude-code-setup

    A template Claude Code configuration: layered context, generated routing, guard and nudge hooks with a self-test, and validators in CI.

    Template · MIT

  • rfid-reader-emulator

    An HTTP/XML RFID reader emulator with seeded tag populations and fault injection, for bench-testing firmware without hardware.

    Python · MIT

Code samples

Small, tested pieces of code, published as gists.

  • Recovery ladder

    Escalating self-recovery for unattended embedded devices, with boot-loop detection.

    C++17 · no heap · host-testable

  • Cellular backoff

    Exponential backoff with full jitter, a deadline and a circuit breaker for flaky cellular links.

    C++17 · no allocation · tested

  • Nelson rules checker

    Nelson rules 1 to 8 for individuals control charts.

    Python 3.12 · standard library only · tested

Case studies

Four write-ups. Three come from client work: two from a firmware engagement with an enterprise client, one from a computer vision proof of concept. I have left out names, sites and figures that could identify the clients. The fourth covers my open-source work on a radar sensor.

  • Gateway or device: placing an upload failure

    Every unit on a test channel reported failed uploads. Laptop replays, failure timing and one TLS detail split the symptom into a gateway stall and a firmware bug, each with its own owner.

    Field diagnostics · ESP32, mutual TLS · 2026

  • Checking pick accuracy with a camera model

    A camera model trained to count seven look-alike items lifted order accuracy from a 72.0% hand-picking baseline to 94.1%, and its remaining errors pointed back at the packing process.

    Computer vision · accuracy audit · 2023

  • Shipping firmware fixes to a fleet with no rollback

    A change catalogue, a release menu the client could reorder, bench and QA gates ahead of production, and release notes that describe only the release.

    Release engineering · OTA, QA gates · 2026

  • A phone app and a TV display for a radar sensor

    An open-source radar sensor for sports ball tracking got a phone app that receives shots over Bluetooth LE when there is no Wi-Fi, a TV display driven by the TV's own remote, and a security review of its LAN server.

    Open source · React Native, BLE, embedded Linux · 2026

Contact

Email is the fastest way to reach me.

Email
johnragonhall@gmail.com
GitHub
github.com/ragonxdragon
LinkedIn
linkedin.com/in/johnragonhall