Notes

Technical notes

Short notes on the subjects I work on. Embedded signal, technical direction, AI in production.

Embedded signal and acquisition

12

June 2026

The accelerometer disabled in 16-channel mode

Switching to 16 channels, the onboard accelerometer is multiplexed in firmware and clocked intermittently. How to recover it on the library side.

Read →

May 2026

Getting a microcontroller out of a bootloop

Force the ROM bootloader, fully erase flash, reflash a minimal firmware with no radio or exotic PSRAM to isolate hardware from software. The PSRAM mode trap.

Read →

May 2026

Powering a microcontroller without USB

Choosing the supply pin according to the regulated source, anticipating radio current spikes, and avoiding conflicts when USB stays plugged in parallel.

Read →

May 2026

Recording a full night without the GUI giving out

Long-format streaming breaks acquisition GUIs. LabRecorder, XDF and a custom loop against automatic staging and the drift of a wet montage.

Read →

May 2026

When radio range kills the live stream

A proprietary 2.4 GHz link tops out at 2 to 3 m, the body attenuates, 16-channel throughput is fragile. Choosing between WiFi, ESP-NOW and onboard logging.

Read →

May 2026

Gel is not an accessory, it is the contact mechanism

Dry, wet or semi-dry electrodes: gel establishes the electrochemical interface. Without it, you need an active buffer stage to handle the impedance.

Read →

May 2026

Reference and active ground under an EEG cap: the frontal tradeoff

Placing REF and BIAS frontally simplifies the montage but degrades common mode on posterior channels. Why BIAS is a driven-right-leg, not a ground.

Read →

May 2026

Routing electrode cables on a stretch textile

How to secure electrode cables on an elastic textile cap without piercing or gluing, while keeping the slack needed to suppress traction artifacts.

Read →

April 2026

Remote displays over MQTT

Local broker, one topic per screen, JSON publishing at about 10 Hz. Why MQTT beats WebSocket and polling for decoupled multi-screen setups.

Read →

April 2026

The USB timestamp lies

A timestamp stamped on USB arrival reflects host reception, not the instant of acquisition. Consequences for sub-millisecond multimodal sync.

Read →

March 2026

Rejecting EEG artifacts outside the lab

In the field, the useful signal drowns under movement, blinks and mains. ASR, ICA templates and online ORICA, and the risk of over-cleaning.

Read →

February 2026

Minimal tooling to start an embedded prototype

A soldering iron and a multimeter cover 95% of an embedded prototype. Why the oscilloscope and logic analyzer can usually wait.

Read →

AI in production

9

May 2026

Having an LLM debrief telemetry data

An LLM does not read a chart, it reads structured text. Turning telemetry into a useful debrief is about framing, not the model.

Read →

May 2026

Briefing an autonomous agent

A good agent brief enforces zero questions before delivery, forces a multi-agent confrontation on architecture before code, and stays minimal to preserve design freedom.

Read →

May 2026

Validating in a controlled environment before the field

The simulator is not a fallback for lack of field access, it is the right sequencing. It isolates variables and frames the narrative between product proof and materials R&D.

Read →

May 2026

Graceful degradation as an architecture requirement

A system that relies on optional sensors must run without them. Graceful degradation is not an option, it is a design constraint set from the very first diagram.

Read →

April 2026

Generating labels without manual annotation

Manual annotation does not scale. By correlating two streams, the degradation read on one provides the ground-truth for the other. Mid-level fusion for a multimodal context.

Read →

March 2026

Diagnosing an API error on an image

An image rejected by a multimodal API almost always has a mundane cause. Format, path versus base64, size or a misdeclared media_type. An ordered diagnosis method.

Read →

March 2026

Reconstructing a 90 % missing signal with a foundation model

When 90 % of a signal is absent, reconstruction becomes a problem of structural inference. Short tokenization, 4D positional encoding and edge inference make the approach viable.

Read →

February 2026

Edge inference on state-space architectures (SSM)

On a constrained device, inference hits memory, energy and latency. State-space models process continuous signals at constant memory cost, where Transformers break down.

Read →

January 2026

Broadcasting real-time data at scale

For a live leaderboard watched by thousands, polling kills the server. Push delivery and rooms change the scale entirely.

Read →

Infrastructure and operations

12

June 2026

Prerendering a Vue SPA for SEO

A client-rendered SPA serves an empty page to crawlers and social previews. Static prerendering fixes SEO without changing framework.

Read →

May 2026

Debugging a boot crash on a corrupted settings file

A service that refuses to start on a malformed settings file. Read the real stack trace instead of guessing, isolate the bad JSON, regenerate it.

Read →

May 2026

Returning a server to a vanilla state

After months of tinkering, a server accumulates manual packages and third-party repos. Audit, purge and upgrade to get back to a clean, reproducible base.

Read →

May 2026

What an image rollback does not save

Rolling back to the previous image does not restore writes made after deployment. They live in the container or the volume, never in the image.

Read →

May 2026

Protecting object-storage media from hotlinking

CORS does not block hotlinking, it only filters cross-origin JS. A Worker with a Referer check for public content, presigned URLs for private content.

Read →

May 2026

The redirect loop behind a tunnel

The reverse proxy force-HTTPS conflicts with upstream TLS termination and loops. A config flag resolves it without touching the routing.

Read →

May 2026

Excluding your LAN from VPN routing without dropping the tunnel

A VPN set to 0.0.0.0/0 swallows all traffic, including access to the local network. The right AllowedIPs keeps the tunnel up and hands the LAN back.

Read →

April 2026

A Turbo monorepo for a real-time platform

When front, back, connectors and a data pipeline share types and logic, a well-tooled monorepo avoids drift between packages.

Read →

March 2026

Unblocking a task runner that times out

A task times out since a separate runner executes the code. The variable must go on the right container, and a manual run differs from the worker.

Read →

March 2026

Auditing exposed ports and finding the next free ones

Choosing the next port for a service means telling host ports from internal ports. A host binding skews the calculation of the next available one.

Read →

March 2026

Extending an LVM partition

Growing an LVM disk takes a few steps. The recurring trap is forgetting the filesystem resize after the logical volume one.

Read →

January 2026

Everything in one container: SPA, API and database

For a human-sized project, a single container serving the front, the API and talking to Postgres simplifies deployment without sacrificing much.

Read →