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.

Packet captures / latency and loss

Latency Lab

Inputs PCAP, PCAPNG, and Nasdaq-style binary captures.

Analysis Models rate, framing, queueing, and compression stages; reports per-layer latency distributions, percentiles through p99.99, and exact drop attribution.

Scope Compression compute time is not modeled. The published model makes that assumption explicit.

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 / Rust / storage / algorithms

Systems work across the rest of the stack

The same attention to parsing, memory, state, and measurement runs through my Rust terminal software, storage servers, and numerical libraries.

Rust / terminal software

Goblin Purrfect

Editor A WordPerfect-inspired, Unicode-native word processor written in Rust.

Implementation Equation parsing and interactive previews run inside the editor, using real font outlines and Kitty, Sixel, or Unicode Braille rendering.

Formats Images, Markdown interchange, and LaTeX/PDF output. Read the project and file-compatibility limits.

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.

More systems work

Experiments, ports, and useful tools

More work in terminal sessions, runtime internals, architecture support, and useful tools. What If the Terminal Had Won? connects Goblin Mosh, GoblinView, and the Rust-based Goblin Purrfect editor above.

Remote terminal sessions

Goblin Mosh

A Mosh fork with roaming sessions, predictive local echo, static Kitty graphics, and background file transfers that prioritize interactive input.

Terminal window manager

GoblinView

Persistent sessions with overlapping, movable terminal windows, mouse interaction, and Kitty/Sixel graphics support and conversion.

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.

Under development

Goblin Cannon

A long-haul modem design tested only in its unit-test environment; no field result is claimed.

Recommendation systems

Goblin Recommends

A live demonstration that reranks available stories as each preference signal arrives, with controls for interest separation and result variety.

Wikimedia activity

Wiki Pulse

A live view of edit rates, byte impact, contributors, and activity across Wikimedia projects.

FAA navigation data

CIFP Atlas

Explore georeferenced ARINC records and compare FAA publication cycles in place.

Procurement and classification

Search tools

NAICS and CPV semantic code finders.

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