2026-10-30 18:58:45 -04:00

Cable Latency Survey

Measurements, code and data behind four sites:

Site Contents Source
https://pingstats.aethercosmology.com Measured round-trip times between cities, compared with the minimum propagation time along submarine-cable routes on a sphere, a North-pole azimuthal equidistant (AE) map, an AE map centred on 0°N 0°E ("dual-pole") and a flat Mercator map src/
https://fe-map.aethercosmology.com The best layout of 219 cities on a plane that a solver can find from timed flights, pings, rail and road lengths and satellite passes, and the same solve released into 3D femap/
https://iss.aethercosmology.com The Sync Test: the ISS at its published-orbit position on the globe and three flat maps, with a spoofed radio signal moving at the speed measured by SatNOGS stations satellites/
https://distance.aethercosmology.com The Shape of Distance: flights, triangles and satellite recordings src/handoff/The_Shape_of_Distance_PRESENTATION.html
  • Code: MIT (LICENSE). Measurements and derived data: CC BY 4.0, with third-party terms (LICENSE-DATA.md).
  • Corrections, new measurements and re-analyses: CONTRIBUTING.md. Issues and pull requests on the GitHub mirror, https://github.com/aetherbird/cable-latency-survey.

Files

Path Contents
cable_latency_survey_data_v2.json Current data hand-off. 29,341 measurements, 305 sites, every routed path and cable geometry ([lon, lat]). The revision block lists the changes from v1.
cable_latency_survey_data.json v1: the same measurements without coordinates. Kept for reference.
cable_latency_survey_report.html The report, identical to the website.
src/ Pipeline code, raw logs and derived data (below).
femap/ fe-map: solver (fit.py), build (build.py, template.html), result (data/femap.json), page (site/).
satellites/ iss: build (build.py, template.html), orbital elements and SatNOGS timings (data/), page (site/).
src/handoff/The_Shape_of_Distance_PRESENTATION.html The Shape of Distance as published; the flights, limits and triangles used by femap/ and the SatNOGS timings used by satellites/ are read from it.
tests/ Headless-browser checks of the sites (tests/run.sh).

Raw measurements

Source File
Globalping probes, runs 1 and 2 src/data/live_20261023T1812Z.json, src/data/live_run2.json (each result with its Globalping measurement ID)
Vultr servers (8, 2026-10-23 21:23–22:30 UTC) src/data/vps/<server>/ping.log, src/data/vps/<server>/mtr.log (traceroutes)
Residential connection, Michigan src/data/home/ping.log (location withheld)
RIPE Atlas sea crossings src/data/trace.json (hops, timings, measurement and probe IDs)
WonderNetwork, 2020-07-19/20 per-pair statistics src/data/wn_clean.json; archive downloaded by src/fetch_raw.sh

Pipeline

Run from src/. The measurement steps contact external services and are not needed to rebuild the report.

Step Script Output
Distance on each model, constants models.py —
Globalping measurements measure.py data/live_*.json
Vultr servers: create, measure, collect, delete vps.py data/vps/
Vultr logs to measurements vps_analyze.py data/vps_cells.json
WonderNetwork archive: statistics, mislocated servers analyze_wn.py data/wn_clean.json
Published cable lengths on each model cables.py data/cables.json
RIPE Atlas sea crossings trace.py data/trace.json
Cable-and-land routing on each model network.py data/network.json
Best attainable flat arrangements flatfit.py data/flatfit.json
Network attribution from public BGP data asmap.py data/asmap.json, data/rpki.json
Shape fit without positions pingmap.py data/pingmap.json
North-pole AE longitude solver (hand-off only) solver.py data/solver.json
Report build.py site/index.html, web/index.html
Data hand-off export.py handoff/cable_latency_survey_data_v2.json

Reproduce

git clone https://git.aethercosmology.com/toby/cable-latency-survey.git
cd cable-latency-survey/src
pip install -r requirements.txt
./fetch_raw.sh          # TeleGeography, WonderNetwork and BGP inputs (not redistributed)
python3 build.py        # the report, from the files in data/
python3 flatfit.py      # flat arrangements
python3 export.py       # the data hand-off

build.py needs only data/ and the TeleGeography files; it does not contact any measurement service. fetch_raw.sh reports whether the TeleGeography data it downloads matches the snapshot used (src/raw/tg.sha256).

Browser checks: cd tests && npm install && CH=/path/to/chromium ./run.sh.

S
Description
Measurements, code and data behind pingstats, fe-map, iss-spoofing and distance.aethercosmology.com. Corrections, new measurements and re-analyses welcome: see CONTRIBUTING.md.
https://pingstats.aethercosmology.com
Readme MIT 35 MiB
Languages
HTML 47.2%
Python 41.7%
JavaScript 10.2%
Shell 0.9%