Globe
Sphere, radius 6,371 km
-
+
- Map speed
- —
- Speed change
- —
- Signal
- —
- Signal speed
- —
- Cities out of sync now
- —
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..f75949f --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,59 @@ +# Contributing + +Corrections, new measurements and independent re-analyses are welcome, +including ones that disagree with the results. Every figure on pingstats, +fe-map and iss is rebuilt from this repository, so a change accepted here +changes the published numbers. The Shape of Distance is included as published. + +Issues and pull requests: https://github.com/aetherbird/cable-latency-survey +(a mirror of https://git.aethercosmology.com/toby/cable-latency-survey with the same history). + +## Report a problem + +Open an issue that names the page, the pair or value, what you believe is +wrong, and the evidence (a source, a log, a measurement ID). Typical cases: a +server or probe listed in the wrong city, a flight time that does not match its +track log, a cable length that differs from its published figure, or a step in +a method that you think biases the result. + +## Add measurements + +Measurements that anyone can re-fetch are the most useful. Include the raw +output, not only a summary. + +| Kind | What to send | +|---|---| +| Ping or traceroute | A RIPE Atlas or Globalping measurement ID; or the raw output of `ping -c 20` and `mtr -rwc 20` with the UTC time, the target, and the source city (a public anchor, a hosted server, or your city to within 25 km). | +| Flight | Flight number and date for both directions, the track log URL (FlightAware or another ADS-B record), and the aircraft type. | +| Rail or road | The route and its published length, with the source. | +| Satellite pass | SatNOGS observation IDs, or raw recordings with station location and UTC timestamps. | + +Routes in the southern hemisphere are the most informative: South America to +Africa and Australia, Africa to Australia, and New Zealand to anywhere. + +Do not post your home IP address or street address. A city is enough. + +## Change the analysis + +Fork the repository, make the change, run the build of the page it affects and +the browser checks, and open a pull request that states how the published +numbers change. + +| Site | Source | Build | +|---|---|---| +| pingstats.aethercosmology.com | `src/` | `cd src && python3 build.py` | +| fe-map.aethercosmology.com | `femap/` | `cd femap && python3 build.py` (about 10 minutes) | +| iss.aethercosmology.com | `satellites/` | `cd satellites && python3 build.py` | +| distance.aethercosmology.com | `src/handoff/The_Shape_of_Distance_PRESENTATION.html` | single published file | + +Browser checks: `cd tests && npm install && CH=/path/to/chromium ./run.sh`. + +## Rules applied to every contribution + +- Each value traces to a public source, a measurement ID, or a raw log in this + repository. +- A measurement is not removed for disagreeing with a model. Cleaning rules, + such as the one for mislocated servers, are stated in each page's method + section and apply to every measurement alike. +- Code is contributed under the MIT licence (`LICENSE`); data under CC BY 4.0 + (`LICENSE-DATA.md`). diff --git a/LICENSE-DATA.md b/LICENSE-DATA.md index 95e6fa5..402f839 100644 --- a/LICENSE-DATA.md +++ b/LICENSE-DATA.md @@ -10,7 +10,9 @@ portions listed below. This covers: - `src/data/` (Globalping results, Vultr and residential logs, routes, fits, network attribution); - `cable_latency_survey_data.json`, `cable_latency_survey_data_v2.json`; -- `cable_latency_survey_report.html` and `src/site/index.html`. +- `cable_latency_survey_report.html` and `src/site/index.html`; +- `femap/data/`, `femap/site/`, `satellites/data/sync.json`, `satellites/site/`; +- `src/handoff/The_Shape_of_Distance_PRESENTATION.html`. Attribution: *Cable Latency Survey (2026), https://pingstats.aethercosmology.com*. @@ -23,6 +25,9 @@ Attribution: *Cable Latency Survey (2026), https://pingstats.aethercosmology.com | RIPE Atlas (RIPE NCC) | Anchor metadata (`src/raw/ripe_anchors*.json`), traceroute results (`src/data/trace.json`, `src/raw/trace/`). | RIPE NCC terms for RIPE Atlas data. Attribution: RIPE Atlas, RIPE NCC. | | RIPEstat (RIPE NCC) | RPKI validation results, `src/data/rpki.json`. | RIPE NCC terms. | | Globalping (jsDelivr) | Probe results in `src/data/live_*.json`; probe list `src/raw/gp_probes.json`. | Globalping terms. Attribution: Globalping. | +| FlightAware, flightsfrom.com | Flight times in The Shape of Distance and `femap/`: per-direction median airborne times derived from FlightAware track logs (each linked), schedules from flightsfrom.com (each route linked). The logs themselves are not redistributed. | © FlightAware; © flightsfrom.com; their terms apply to the underlying records. | +| CelesTrak | ISS orbital elements, `satellites/data/iss_25544_20261028.tle` | CelesTrak (data from the U.S. Space Force, space-track.org); CelesTrak's terms apply. | +| SatNOGS (Libre Space Foundation) | ISS recordings and their timings in The Shape of Distance; `satellites/data/satnogs_20261003.json` and the values derived from them in `satellites/` | CC BY-SA 4.0. Attribution: SatNOGS Network, Libre Space Foundation. | | GeoNames | `src/raw/geonames/cities15000.txt` | CC BY 4.0, https://www.geonames.org | | Natural Earth, via world-atlas | `src/raw/geo/land-110m.json` | Natural Earth: public domain. world-atlas: ISC. | | d3 | `src/raw/lib/d3.min.js`, embedded in the report | ISC, Mike Bostock. | diff --git a/README.md b/README.md index 02f660b..9a1fcb7 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,16 @@ # 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. +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` | -- 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`). +- Corrections, new measurements and re-analyses: `CONTRIBUTING.md`. Issues and pull requests on the GitHub mirror, https://github.com/aetherbird/cable-latency-survey. ## Files @@ -18,7 +20,10 @@ that model. | `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`). | +| `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 diff --git a/cable_latency_survey_report.html b/cable_latency_survey_report.html index 49ae723..70ac4b6 100644 --- a/cable_latency_survey_report.html +++ b/cable_latency_survey_report.html @@ -222,7 +222,6 @@ summary{cursor:pointer;font:600 14px var(--display);text-transform:uppercase;let
Measured round-trip times between cities, compared with the minimum propagation time along submarine-cable routes on four models of the Earth's surface.
The code, the raw measurement logs and the derived data are public. Code is released under the MIT licence; the measurements and derived data under CC BY 4.0. Third-party inputs remain under their own terms and are downloaded by a script rather than redistributed.
+The code, the raw measurement logs and the derived data are public. Code is released under the MIT licence; the measurements and derived data under CC BY 4.0. Third-party inputs remain under their own terms and are downloaded by a script rather than redistributed. Corrections, new measurements and re-analyses are welcome, including ones that disagree with the results.
Every measured flight, ping, rail line and satellite pass on one plane
+Rule. The surface is a plane. Each of the 219 cities may sit anywhere on it. No latitude, longitude, radius, projection or spherical formula enters the solver.
+Measurements. Flight times give lengths: 1,344 routes, cruise speed × time in the air, both directions. Pings (6,958), rail and road lengths (70) and satellite passes (56) give limits: no farther apart than this.
+Tolerance. A flight holds between 75% and 110% of its length. Shorter means a route over a third longer than the straight line; longer means an aircraft above its top speed the whole way.
+Solver. From a starting flat map it moves the cities to keep as many measurements as it can and marks the rest red (faster than possible) or amber (far off the straight line). Coastlines follow the cities like a rubber sheet.
+Best of 311 starting maps (North-pole and dual-pole AE, the layout of the flight times alone, and AE maps centred on 308 other points): 9 measurements broken. The plane keeps almost the whole northern network, but it cannot close the ring of routes around the southern oceans: Auckland–Santiago ×2.07, Mauritius–Perth ×1.85, Santiago–Sydney ×1.84, Melbourne–Santiago ×1.77, São Paulo–Johannesburg ×1.72, Johannesburg–Perth ×1.64, Johannesburg–Sydney ×1.50, Johannesburg–Singapore ×1.22. Each of those needs its aircraft faster than it can fly. To keep the rest, the plane squeezes 254 flights below 80% of their timed length; on the globe 18 are.
+On the globe, by the same rules: 1 flight longer than its aircraft can fly (San Salvador–San José, a short hop where the 15-minute allowance for climb and descent is too generous), 0 limits broken, and 8 flights below 75%: detours around closed airspace, indirect airways, and short hops where climb and approach take most of the time (Istanbul–Moscow, Dubai–Baku, Kuala Lumpur–Singapore, Doha–Baku). Surveyed triangles do not depend on the layout: a plane gives every triangle exactly 180°, and 232 of the 935 measured triangles exceed that by more than four times their survey's angle noise (3 on the globe; The Triangle Test).
+Released into 3D, the same cities and measurements close into a ball. The cities wrap 160° round its centre, with 0 measurements broken.
+The further short a flight may fall, the more of the network the plane can squeeze to make room for the southern routes. It keeps everything once flights may fall to 50% of their timed length, which means routes up to twice as long as its straight lines. That layout has 601 flights below 75% and 285 below 60%. The globe has 8 and 1.
+| Flights kept between | Plane: too long | Plane: too short | Plane: limits | Plane: below 75% | Globe: too long | Globe: too short | Globe: limits |
|---|
A ping only caps a distance, and internet routes run well past the straight line, so the caps are loose. With pings alone a flat map can shrink until every cap holds; turn off Flight times to see it. Scale comes from lengths, and the flights supply them.
+ +fit.py) ran from 311 starting maps and then refined the 20 best layouts with twelve rounds.Every measured flight, ping, rail line and satellite pass on one plane
+Rule. The surface is a plane. Each of the {{N_CITIES}} cities may sit anywhere on it. No latitude, longitude, radius, projection or spherical formula enters the solver.
+Measurements. Flight times give lengths: {{N_FLIGHTS}} routes, cruise speed × time in the air, both directions. Pings ({{N_RT}}), rail and road lengths ({{N_RAIL}}) and satellite passes ({{N_SAT}}) give limits: no farther apart than this.
+Tolerance. A flight holds between {{LO_PCT}}% and {{HI_PCT}}% of its length. Shorter means a route over a third longer than the straight line; longer means an aircraft above its top speed the whole way.
+Solver. From a starting flat map it moves the cities to keep as many measurements as it can and marks the rest red (faster than possible) or amber (far off the straight line). Coastlines follow the cities like a rubber sheet.
+Best of {{N_STARTS}} starting maps (North-pole and dual-pole AE, the layout of the flight times alone, and AE maps centred on {{N_STARTS_AE}} other points): {{BEST_BROKEN}} measurements broken. The plane keeps almost the whole northern network, but it cannot close the ring of routes around the southern oceans: {{LONG_LIST}}. Each of those needs its aircraft faster than it can fly. To keep the rest, the plane squeezes {{BEST_B80}} flights below 80% of their timed length; on the globe {{GLOBE_B80}} are.
+On the globe, by the same rules: {{GLOBE_LONG}} flight longer than its aircraft can fly (San Salvador–San José, a short hop where the 15-minute allowance for climb and descent is too generous), {{GLOBE_LIM}} limits broken, and {{GLOBE_SHORT}} flights below {{LO_PCT}}%: detours around closed airspace, indirect airways, and short hops where climb and approach take most of the time ({{GLOBE_SHORT_LIST}}). Surveyed triangles do not depend on the layout: a plane gives every triangle exactly 180°, and {{TRI_FLAT}} of the {{N_TRI}} measured triangles exceed that by more than four times their survey's angle noise ({{TRI_GLOBE}} on the globe; The Triangle Test).
+Released into 3D, the same cities and measurements close into a ball. The cities wrap {{WRAP3}}° round its centre, with {{BROKEN3}} measurements broken.
+The further short a flight may fall, the more of the network the plane can squeeze to make room for the southern routes. It keeps everything once flights may fall to {{FIT_LO}}% of their timed length, which means routes up to twice as long as its straight lines. That layout has {{FIT_B75}} flights below 75% and {{FIT_B60}} below 60%. The globe has {{GLOBE_B75}} and {{GLOBE_B60}}.
+| Flights kept between | Plane: too long | Plane: too short | Plane: limits | Plane: below 75% | Globe: too long | Globe: too short | Globe: limits |
|---|
A ping only caps a distance, and internet routes run well past the straight line, so the caps are loose. With pings alone a flat map can shrink until every cap holds; turn off Flight times to see it. Scale comes from lengths, and the flights supply them.
+ +fit.py) ran from {{N_STARTS}} starting maps and then refined the 20 best layouts with twelve rounds.ISS position and a spoofed radio signal on four maps
+Hypothesis. The radio signals attributed to the International Space Station come from ground transmitters along its track, imitating a source that moves at the measured speed, 7.07 km/s.
+Test. The station is placed where the published orbit puts it, which is where it is seen to pass at the predicted times (Spot the Station); its speed across each map follows from that map's distances. The spoofed signal is the source those transmitters imitate, moving along the same track at 7.07 km/s, lined up with the station at each northbound equator crossing, or at any moment with Line up signal now. A city turns red when the station is above its horizon and the signal is not, or the reverse.
+Sphere, radius 6,371 km
Centred on the North Pole
Centred on 0°N 0°E
True on the equator, edges joined
On the globe the signal stays level with the station by construction: both come from the published orbit (numerically within 0.06 km over 16 orbits). On each flat map the station's track per orbit is longer than the 39,400 km the signal covers in the same time: 65,400 km on the North-pole map, 48,200 km on Mercator and 60,700–93,600 km on the dual-pole map. One orbit after it is lined up, at whatever moment, the signal is 19–55 min behind on the North-pole map, 14–20 min on Mercator and 7–91 min on the dual-pole map. Restarted level every minute instead, it is still up to 44 s adrift on the North-pole map. The recordings show no such drift: in 57 SatNOGS recordings of three passes on 3 October 2026, the S-curves are centred within 0.6–2.1 s (rms per pass) of the closest approaches the published orbit predicts.
+Corrected in real time (Real-time correction, above): transmitters that track the station and steer the signal to where it was a latency earlier keep it that latency behind. To stay with the station the signal must then cross the map at the map speed, up to 3.9 times the 7.07 km/s its Doppler shift shows on the North-pole map. The recordings allow neither: their S-curves are centred within 0.6–2.1 s of the predicted closest approaches, and their shifts give 7.10 km/s over South America and Australia, where the North-pole map needs 13–15 km/s.
+Ground transmitters timed to the station can keep in step with it, but a transmitter sends one frequency to every receiver in range. At 12:18:55 UTC on 3 October 2026, 44 receivers from Ireland to Belarus were recording the station's UHF signal at the same instant: 22 heard it shifted up and 22 down, from −9.1 to +9.6 kHz, each within about 56 Hz of the shift the published orbit predicts for its own position. Imitating that takes a separate transmitter for each receiver, heard by no other. The signal also arrives from where the transmitter is, which a directional antenna or a pair of antennas measures, not from the station's place in the sky.
+The station adjusting its own signal over a flat map: the signal then arrives from the right direction, and the station can give one receiver the shift the globe predicts, but every other receiver hears the correction meant for that one. Over the North-pole map, adjusted for VK4JBE in Brisbane two minutes before closest approach on its highest pass in this window, it is 409 Hz off for a receiver 100 km east and 2.6 kHz off 1,000 km north (437.55 MHz). Unadjusted, its shift would show the map speed: 13–15 km/s where the recordings from South America and Australia show 7.10 km/s, and 7.4 km/s where those from Europe show 7.07 km/s.
+ +| Globe | North-pole AE | Dual-pole AE | Mercator | |
|---|---|---|---|---|
| Map speed, km/s | 6.88–6.91 | 7.40–27.43 | 6.86–690 | 6.92–11.10 |
| Fastest ÷ slowest, each orbit | ×1.00 | ×3.70 | ×2.53–101 | ×1.60 |
| Speed gained and lost per orbit, km/s | 0.06 | 40 | 22–1,367 | 17 |
| Largest speed change along the track, g | 0.00 | 2.65 | 1,563 | 0.53 |
| Station's track per orbit, map km | 38,400 | 65,400 | 60,700–93,600 | 48,200 |
| Signal's distance per orbit, map km | 38,400 | 39,400 | 39,400 | 39,400 |
| Lag one orbit after lining up, any start | level | 19–55 min | 7–91 min | 14–20 min |
| Gap one orbit after lining up, map km | 0.06 | 26,000–26,000 | 13,700–57,600 | 8,800–8,800 |
| Largest lag, restarted every minute | level | 44 s | 58 s | 21 s |
CelesTrak GP elements · sgp4 (Python) · Natural Earth 1:110m land · GeoNames cities15000 · SatNOGS recordings of 3 October 2026 as analysed in The Shape of Distance, Listening to the ISS · NASA Spot the Station.
+ +ISS position and a spoofed radio signal on four maps
+Hypothesis. The radio signals attributed to the International Space Station come from ground transmitters along its track, imitating a source that moves at the measured speed, {{V_SIG}} km/s.
+Test. The station is placed where the published orbit puts it, which is where it is seen to pass at the predicted times (Spot the Station); its speed across each map follows from that map's distances. The spoofed signal is the source those transmitters imitate, moving along the same track at {{V_SIG}} km/s, lined up with the station at each northbound equator crossing, or at any moment with Line up signal now. A city turns red when the station is above its horizon and the signal is not, or the reverse.
+Sphere, radius 6,371 km
Centred on the North Pole
Centred on 0°N 0°E
True on the equator, edges joined
On the globe the signal stays level with the station by construction: both come from the published orbit (numerically within {{GLOBE_DRIFT}} km over {{N_ORBITS}} orbits). On each flat map the station's track per orbit is longer than the {{SIG_TRACK}} km the signal covers in the same time: {{AE_TRACK}} km on the North-pole map, {{ME_TRACK}} km on Mercator and {{DP_TRACK}} km on the dual-pole map. One orbit after it is lined up, at whatever moment, the signal is {{AE_LAG1}} behind on the North-pole map, {{ME_LAG1}} on Mercator and {{DP_LAG1}} on the dual-pole map. Restarted level every minute instead, it is still up to {{AE_LAG60}} adrift on the North-pole map. The recordings show no such drift: in {{SN_N}} SatNOGS recordings of three passes on 3 October 2026, the S-curves are centred within {{SN_RMS}} s (rms per pass) of the closest approaches the published orbit predicts.
+Corrected in real time (Real-time correction, above): transmitters that track the station and steer the signal to where it was a latency earlier keep it that latency behind. To stay with the station the signal must then cross the map at the map speed, up to {{AE_XSIG}} times the {{V_SIG}} km/s its Doppler shift shows on the North-pole map. The recordings allow neither: their S-curves are centred within {{SN_RMS}} s of the predicted closest approaches, and their shifts give {{REC_V_SOUTH}} km/s over South America and Australia, where the North-pole map needs {{REC_AE_SOUTH}} km/s.
+Ground transmitters timed to the station can keep in step with it, but a transmitter sends one frequency to every receiver in range. At {{BURST_UTC}}, {{BURST_N}} receivers from Ireland to Belarus were recording the station's UHF signal at the same instant: {{BURST_UP}} heard it shifted up and {{BURST_DOWN}} down, from {{BURST_MIN}} to {{BURST_MAX}} kHz, each within about {{SN_OFFSET}} Hz of the shift the published orbit predicts for its own position. Imitating that takes a separate transmitter for each receiver, heard by no other. The signal also arrives from where the transmitter is, which a directional antenna or a pair of antennas measures, not from the station's place in the sky.
+The station adjusting its own signal over a flat map: the signal then arrives from the right direction, and the station can give one receiver the shift the globe predicts, but every other receiver hears the correction meant for that one. Over the North-pole map, adjusted for VK4JBE in Brisbane two minutes before closest approach on its highest pass in this window, it is {{ONE_E100}} Hz off for a receiver 100 km east and {{ONE_N1000}} kHz off 1,000 km north (437.55 MHz). Unadjusted, its shift would show the map speed: {{REC_AE_SOUTH}} km/s where the recordings from South America and Australia show {{REC_V_SOUTH}} km/s, and {{REC_AE_EU}} km/s where those from Europe show {{REC_V_EU}} km/s.
+ +| Globe | North-pole AE | Dual-pole AE | Mercator | |
|---|---|---|---|---|
| Map speed, km/s | {{G_VR}} | {{AE_VR}} | {{DP_VR}} | {{ME_VR}} |
| Fastest ÷ slowest, each orbit | {{G_RATIO}} | {{AE_RATIO}} | {{DP_RATIO}} | {{ME_RATIO}} |
| Speed gained and lost per orbit, km/s | {{G_SWING}} | {{AE_SWING}} | {{DP_SWING}} | {{ME_SWING}} |
| Largest speed change along the track, g | {{G_AMAX}} | {{AE_AMAX}} | {{DP_AMAX}} | {{ME_AMAX}} |
| Station's track per orbit, map km | {{G_TRACK}} | {{AE_TRACK}} | {{DP_TRACK}} | {{ME_TRACK}} |
| Signal's distance per orbit, map km | {{G_TRACK}} | {{SIG_TRACK}} | {{SIG_TRACK}} | {{SIG_TRACK}} |
| Lag one orbit after lining up, any start | level | {{AE_LAG1}} | {{DP_LAG1}} | {{ME_LAG1}} |
| Gap one orbit after lining up, map km | {{GLOBE_DRIFT}} | {{AE_GAP1}} | {{DP_GAP1}} | {{ME_GAP1}} |
| Largest lag, restarted every minute | level | {{AE_LAG60}} | {{DP_LAG60}} | {{ME_LAG60}} |
CelesTrak GP elements · sgp4 (Python) · Natural Earth 1:110m land · GeoNames cities15000 · SatNOGS recordings of 3 October 2026 as analysed in The Shape of Distance, Listening to the ISS · NASA Spot the Station.
+ +Measured round-trip times between cities, compared with the minimum propagation time along submarine-cable routes on four models of the Earth's surface.
The code, the raw measurement logs and the derived data are public. Code is released under the MIT licence; the measurements and derived data under CC BY 4.0. Third-party inputs remain under their own terms and are downloaded by a script rather than redistributed.
+The code, the raw measurement logs and the derived data are public. Code is released under the MIT licence; the measurements and derived data under CC BY 4.0. Third-party inputs remain under their own terms and are downloaded by a script rather than redistributed. Corrections, new measurements and re-analyses are welcome, including ones that disagree with the results.
Measured round-trip times between cities, compared with the minimum propagation time along submarine-cable routes on four models of the Earth's surface.
The code, the raw measurement logs and the derived data are public. Code is released under the MIT licence; the measurements and derived data under CC BY 4.0. Third-party inputs remain under their own terms and are downloaded by a script rather than redistributed.
+The code, the raw measurement logs and the derived data are public. Code is released under the MIT licence; the measurements and derived data under CC BY 4.0. Third-party inputs remain under their own terms and are downloaded by a script rather than redistributed. Corrections, new measurements and re-analyses are welcome, including ones that disagree with the results.