# Cable Latency Survey Measured round-trip times between cities, compared with the minimum propagation time along submarine-cable routes on four models of the Earth's surface: 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. A round-trip time below the fibre propagation floor along a model's route is inconsistent with that model. - Report: https://pingstats.aethercosmology.com (also `cable_latency_survey_report.html`, a single file that works offline) - Code: MIT (`LICENSE`). Measurements and derived data: CC BY 4.0, with third-party terms (`LICENSE-DATA.md`). ## 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). | | `tests/` | Headless-browser checks of the report (`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//ping.log`, `src/data/vps//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 ```bash 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`.