Benchmarking latency across common wireless links for microcontrollers
I was recently trying to quantify the tradeoffs in user-experience for a wireless product and successfully nerd-sniped myself into…
A deep dive into Single Pair Ethernet
Having used a wide range of field device communications busses from simple 4-20mA, classic serial busses like UART and Modbus, and more…
How to move the FreeRTOS heap onto STM32's CCM RAM
Many STM32 microcontrollers have a bank of special core-coupled memory (CCM) with a dedicated connection to the core. This allows the core…
Wishlist for a React Compiler
Recently I've been thinking about the prospects of a React Compiler, and the potential optimisations it could bring. The following is a…
Declarative Setup, Imperative Update: The Key to High-Performance UI Components in React
This is the second post in a two part series on performant React state management Benchmarking Preact Signals versus the React…
Benchmarking Preact Signals Performance versus the React alternatives
This is the first post in a two part series on performant React state management Benchmarking Preact Signals versus the React alternatives…
Why We Switched CDNs: How Google's Core Web Vitals Led Us to Cloudflare Pages
As a quick refresher, the Core Web Vitals are a set of metrics developed by Google used to measure real-world user experience. They define…
Segger J-Link GDB with CLion
Configure CLion to use SEGGER J-Link programmers on Linux, macOS and Windows for flashing and debugging embedded targets including ARM…
Statically typing DataFlows using advanced TypeScript concepts
Electric UI utilises a streaming computation model for performing transformations on inbound data. We call this model DataFlow. By…
Concourse Linux worker with USB for hardware tests
We use Concourse CI for our CI/CD pipelines. Containerisation is the backbone of Concourse's architectural design; tiny specialised…
Fastest possible text updates with or without React
Electric UI is a hardware focused user interface framework, built around a concept of messageIDs that represent specific variables in…
Cross-platform release builds with Github Actions
Using a Cloud CI/CD provider is a easy way to issue release builds of your UI on Windows, macOS and Linux. Running a build for a particular…
Hardware CI Arena
We develop Electric UI with standardised hardware targets to iterate quickly with common ‘known good’ hardware. During testing on some…
Using Electron with Yarn PnP
If you are familiar with Yarn v2 you can skip to our experience migrating here. If you want to see benchmark results you can skip to here. B…
STM32 & CLion
This guide uses CLion 2019.1 with integrated embedded support, and will cover the entire process of creating a new STM32F4 project, setting…
Digicert EV certs and CI/CD
Our arc CLI tooling is written in Go and distributed as a binary+install script for macOS and Linux. On Windows, we provide an installer (we…
A scenic route towards continuous integration
As with most projects, being able to trust your work, validate reliability, and visualise issues, makes the development process far less…
Light-painting with the Delta
We created a robotic light-painting process targeted at creating animations with long-exposure photographs. This post summarises our custom…
Building a Delta Robot
Light painting with CNC precision, designed for practical hologram effects in animation. Motivation The idea first came up while Michael…