Adam DePrince in a woodcut software workshop with Silkie chickens wearing pants

Market data / databases / systems engineering

Adam DePrince.

I build market-data pipelines and the systems that serve them.

Historical-data processing, compact database structures, tiered storage, and live feed ingestion. I work from parsing and memory layout through event distribution and operational measurement.

Selected work: massive-speedup for historical market data, Goblin Core for compact database structures, and Goblin Store for the storage hierarchy.

Production software since 1989

Experience behind the code

My work spans quantitative and market-data systems at Quantlab and Massive.com, financial data at scale at S&P Global, and engineering at Google and Amazon. The projects below make my current work in ingestion, transport, replay, and system operation available to inspect. My data-system work uses C++ and Python; my terminal word processor is written in Rust.

Selected open source / market data and databases

Market data, from storage to delivery

Start with massive-speedup, Goblin Core, and Goblin Store: historical data, database internals, and the storage hierarchy. The feed and messaging projects below carry that work into live systems.

Historical market data / storage / causal replay

massive-speedup

Read Processes compressed Massive historical data and builds timestamp-ordered stores.

Replay Advances through market events in time order, with configurable latency and bid/ask-aware order simulation.

Semantics Strategy code cannot inspect a future fill price. Orders use the bid or ask visible after the configured delay.

In context The reference system pairs this historical path with Goblin Slurp for live ingestion and RTTA for streaming analytics.

Database internals / compact indexes / C++23

Goblin Core

Structures Redis-compatible operations with typed packed sorted sets, a Swiss hash table, and an arena-indexed B+ tree.

Measured 80.8 million INT32/FLOAT32 page counters in 2.10 GiB final process RSS in the Wikipedia replay, with full-state mapping verification.

Inspect Read the layout, workload, and results. RESP/SBE transports and Pub/Sub also support the live event bus.

Storage hierarchy / memory and I/O / C++23

Goblin Store

Design A NUMA-aware, Memcached-compatible large-object cache and HTTP server.

Data path Keeps latency-sensitive object heads in RAM, streams warm data from SSD, and reads cold tails ahead from HDD.

Evidence Published comparisons with Memcached and extstore include workload, latency, memory, and storage-cost context.

Live feed ingestion / C++23

Goblin Slurp

Ingest A native bridge consumes an authorized commercial WebSocket market-data feed and splits source frames into individual events.

Normalize Publishes JSON or SBE events into Goblin Core for downstream subscribers.

Flow control A bounded queue and explicit backpressure make the handoff between ingestion and publication part of the design.

In use The live ingestion component in my research and intraday trading reference system. Goblin Core handles the internal fan-out.

Messaging / multicast / Python integration

Aeron over InfiniBand

Transport An InfiniBand media extension for Aeron with UD and RC, multicast, zero-copy sends, and published hardware benchmarks.

Integration pyaeron adds native CPython bindings for IPC and UDP, an optional embedded media driver, and direct Python buffer handling.

Downstream consumers / streaming state

RTTA

State 319 public causal algorithms for indicators, online models, and streaming research signals behind C++23 and Python APIs.

Semantics Updates advance one observation at a time in replay and live operation.

Evidence Published benchmarks include algorithm coverage, CPU context, and separate state-only and Python-result measurements.

The components in operation

One complete reference system

Massive historical and live data enter through massive-speedup and Goblin Slurp. Goblin Core distributes live events; RTTA advances analytical state; Jinghong routes position intent; Hyperion provides operator control.

The deployment uses Massive and Alpaca for research and intraday strategies. The architecture documents the data paths, heartbeat contract, warm-up after restart, and deliberate operator intervention.

Read the architecture and operating behavior

Engineering notes

Investigations, with the evidence

Correctness and operational behavior need more than a fast median. These write-ups follow a problem through instrumentation, controlled experiments, and the limits of the result.

Clock behavior

Faster isn’t better

Faster packet paths worsened clock jitter. A study of timing, contention, and recovery across four network paths.

Tail-latency diagnosis

The bootstrap listener

Sequence and delivery checks ruled out lost messages; tracing found a nonblocking accept loop stalling the server.

Benchmark validation

The noisy benchmark machine

How a negative compiler result changed when controlled measurements exposed noise in the test environment.

Database internals

80.8 million IDs in 2.10 GiB

Typed records, compact indexes, and full-state verification in a 1.48-billion-update Wikipedia replay.

More performance work / cppdjango

Django 6.0.7.
Ported to C++.

cppdjango keeps the familiar Django API and normal import django surface, while moving measured PostgreSQL ORM terminals into native code.

Across a balanced suite of point selects, ordered IN queries, and point updates, the framework-side ORM work is 436% faster and uses 81.4% less CPU than stock Django 6.0.7. The database did not become faster, and the project does not claim that every Django API did.

Runtimes / storage / algorithms

Systems work across the rest of the stack

The same attention to parsing, memory, state, and measurement runs through my runtime work, storage servers, and numerical libraries.

SIMD sequence algorithms

stride-align

Problem Alignment and distance algorithms are expensive inner loops with very different instruction sets across CPUs.

Work Smith-Waterman, Needleman-Wunsch, edit distance, phonetics, and time-series distance for C++ and Python across several architecture families.

Evidence The benchmark suite publishes backend, scoring, width, workload, and CPU context rather than one universal speedup.

LoongArch optimization

DragonArray

Problem Useful hardware remains slow when upstream packages stop at generic code or narrower vector extensions.

Work Installable LoongArch wheels, NumPy LASX work, SIMD transcendental functions, and a BLAKE3 LoongArch port.

Evidence Patches and benchmarks are published together so architecture support is something users can run, not a slide.

Small-state estimation

fast-kalman

Problem Tiny state-space models should not pay dynamic-matrix or per-tick Python overhead.

Work Fixed-size C++23 Kalman variants, direct Python bindings, and batched updates with irregular time and observation variance.

Measured The published batched two-state, one-observation linear case runs at about 43 ns per measurement on its documented test machine.

External sorting

bsort

Problem Fixed-record data sets larger than RAM turn locality and cache behavior into the algorithm.

Work A C++ and Python external sorter designed around local access, predictable records, and LRU-friendly behavior.

History The experiment became the technical basis for a startup and remains available as open source.

Iðunn / open-source terminal tools

Tools for a life in the terminal

Iðunn brings together my terminal, remote connection, mail, word processor, desktop tools, and e-paper and Android environments. Built for medium- and narrow-band links. Read how the terminal projects fit together.

Terminal emulator / macOS and Linux

Silkie

My kitty fork adds pen and touch input, vector graphics, HDR color, and display timing protocols so terminal applications have richer ways to draw and interact.

Remote sessions / narrow links

Goblin Skiff

My extended Mosh fork for slow and unreliable links. Agent forwarding, file transfer, kitty and Silkie graphics, compression, and bandwidth pacing keep remote sessions useful when every byte matters.

Mail / Alpine fork

Skaði

An Alpine fork with inline images, rich-text composition, offline mail, and kitty and Silkie support. Keyboard-driven mail with a little of Pine’s spirit.

Terminal desktop / persistent sessions

Hliðskjál (Odin)

Formerly GoblinView. A terminal multiplexer with DESQview-style overlapping windows, movable and resizable workspaces, persistent sessions, and full kitty graphics inside the windows.

E-paper terminal / reMarkable 2

Inkline

A terminal emulator for reMarkable 2, bringing shells, text applications, and terminal graphics to e-paper with Type Folio or external keyboard input. Its terminal proxy keeps unrelated tablet traffic off narrow links.

Graphical desktop viewer

Goblin Scry

View RDP, VNC, and local X11 or Wayland desktops inside a terminal with kitty graphics. Scry resends only the character-sized cells that change, and also works inside Hliðskjál (Odin).

Linux on Android / Debian

GoblinReactor for Android

An Android Linux environment running Debian with a real User-Mode Linux kernel and a native Silkie terminal. Supports kitty graphics, multiple terminal sessions, and pen and touch input; Linux files survive app updates.

More systems work

Experiments, ports, and useful tools

More work in radio links, runtime internals, architecture support, and useful tools.

Narrow links / mesh radio

Goblin Modem

Interface-level traffic control for slow or metered links on macOS using pf, a radio network using goTenna Mesh hardware with peer discovery and shared Internet uplinks, and Goblin Mosh carried across two radios with DjVu-compressed terminal graphics. Development preview for macOS and Debian/Ubuntu.

LaTeX in terminal Emacs

ghostty-tex

Compile LaTeX with C-c C-c and keep the PDF beside the source inside Ghostty, using Emacs DocView and Kitty graphics.

Interpreter internals

CPython SIMD

Runtime SIMD experiments for codecs, text, bytes, JSON, CSV, URLs, and hash tables.

Numerical computing

NumPy LASX

A proof-of-concept 256-bit LASX port for Loongson systems.

Incremental graph search

negcycle

SIMD Bellman-Ford paths for exact currency-cycle analysis after individual quote changes.

Simulated channel / HF skywave

Goblin Cannon

An open HF skywave market-data path for a Chicago–Shanghai route peaking near 71°N. 908 recorded simulated-channel runs across BPSK, QPSK and 8-PSK; 24 of 24 configurations inside the 2.1 ms processing budget; remaining defects listed on the page. No over-the-air transmission yet.

Goblin Reactor

Bring me a difficult systems problem

I build open systems that demonstrate the capability. Goblin Reactor brings that capability into client systems: application runtimes, databases, memory, storage, networking, native code, and production behavior.

Tell me what is slow
Email
f"{given_name.lower()}.{family_name.lower()}@gmail.com"
Phone
f'{2**8}-{2*3**2*37}-{13*101}'
GitHub
github.com/adamdeprince
Field notes
adamdeprince.com/blog