Contributions through git.aethercosmology.com (sign-up with admin activation); links updated on the three sites

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Toby
2026-10-30 19:24:32 -04:00
parent 6ffeabb6d7
commit b9f8d913ad
9 changed files with 17 additions and 16 deletions
+3 -2
View File
@@ -5,8 +5,9 @@ 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 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. changes the published numbers. The Shape of Distance is included as published.
Issues and pull requests: https://github.com/aetherbird/cable-latency-survey Issues and pull requests: https://git.aethercosmology.com/toby/cable-latency-survey. Register at
(a mirror of https://git.aethercosmology.com/toby/cable-latency-survey with the same history). https://git.aethercosmology.com/user/sign_up; a new account can post once an
administrator has activated it.
## Report a problem ## Report a problem
+1 -1
View File
@@ -10,7 +10,7 @@ Measurements, code and data behind four sites:
| https://distance.aethercosmology.com | The Shape of Distance: flights, triangles and satellite recordings | `src/handoff/The_Shape_of_Distance_PRESENTATION.html` | | 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`). - 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. - Corrections, new measurements and re-analyses: `CONTRIBUTING.md`. Issues and pull requests: https://git.aethercosmology.com/toby/cable-latency-survey.
## Files ## Files
+3 -3
View File
@@ -352,7 +352,7 @@ const MNAME=Object.fromEntries(MODELS),NK={globe:"globe",ae:"ae",dp:"dualpole",m
const reduce=matchMedia("(prefers-reduced-motion: reduce)").matches; const reduce=matchMedia("(prefers-reduced-motion: reduce)").matches;
const S={src:"all",view:"ae",sel:null,hover:null,site:null,onlyBad:false,pulses:!reduce,mode:"cable",tab:"route"}; const S={src:"all",view:"ae",sel:null,hover:null,site:null,onlyBad:false,pulses:!reduce,mode:"cable",tab:"route"};
const MODE={cable:"sea-cable route",line:"straight line"}; const MODE={cable:"sea-cable route",line:"straight line"};
const GH="https://github.com/aetherbird/cable-latency-survey",GIT="https://git.aethercosmology.com/toby/cable-latency-survey",SRCV=GIT+"/src/branch/main/",RAWV=GIT+"/raw/branch/main/"; const GIT="https://git.aethercosmology.com/toby/cable-latency-survey",SRCV=GIT+"/src/branch/main/",RAWV=GIT+"/raw/branch/main/";
const lnk=(href,t)=>`<a href="${href}" target="_blank" rel="noopener">${t}</a>`; const lnk=(href,t)=>`<a href="${href}" target="_blank" rel="noopener">${t}</a>`;
const netName=n=>/^home/.test(n)?"residential connection, Michigan":n.replace(/^our /,""); const netName=n=>/^home/.test(n)?"residential connection, Michigan":n.replace(/^our /,"");
const fmt=(x,d=1)=>x.toLocaleString("en-US",{minimumFractionDigits:d,maximumFractionDigits:d}); const fmt=(x,d=1)=>x.toLocaleString("en-US",{minimumFractionDigits:d,maximumFractionDigits:d});
@@ -914,8 +914,8 @@ function renderCode(){
["analyze_wn.py","WonderNetwork archive: statistics, mislocated servers"],["cables.py","published cable lengths on each model"],["network.py","cable-and-land routing on each model"],["trace.py","RIPE Atlas sea crossings"], ["analyze_wn.py","WonderNetwork archive: statistics, mislocated servers"],["cables.py","published cable lengths on each model"],["network.py","cable-and-land routing on each model"],["trace.py","RIPE Atlas sea crossings"],
["asmap.py","network attribution from public BGP data"],["pingmap.py","shape fit without positions"],["build.py","this page"],["export.py","JSON data hand-off"]]; ["asmap.py","network attribution from public BGP data"],["pingmap.py","shape fit without positions"],["build.py","this page"],["export.py","JSON data hand-off"]];
document.getElementById("code").innerHTML=` document.getElementById("code").innerHTML=`
<div>Repository</div><div>${lnk(GIT,GIT.replace("https://",""))} · mirror ${lnk(GH,GH.replace("https://",""))}</div> <div>Repository</div><div>${lnk(GIT,GIT.replace("https://",""))}</div>
<div>Contribute</div><div>${lnk(GH+"/blob/main/CONTRIBUTING.md","How to contribute")} · ${lnk(GH+"/issues","issues")} · ${lnk(GH+"/pulls","pull requests")}</div> <div>Contribute</div><div>${lnk(SRCV+"CONTRIBUTING.md","How to contribute")} · ${lnk(GIT+"/issues","issues")} · ${lnk(GIT+"/pulls","pull requests")}</div>
<div>Data hand-off</div><div>${lnk(RAWV+"cable_latency_survey_data_v2.json","cable_latency_survey_data_v2.json")} (every measurement, site, route and cable path) · ${lnk(RAWV+"cable_latency_survey_data.json","version 1")}</div> <div>Data hand-off</div><div>${lnk(RAWV+"cable_latency_survey_data_v2.json","cable_latency_survey_data_v2.json")} (every measurement, site, route and cable path) · ${lnk(RAWV+"cable_latency_survey_data.json","version 1")}</div>
<div>Globalping</div><div>${gp.map((r,i)=>f(r.file,`run ${i+1}`)).join(" · ")}: raw results; each carries its Globalping measurement ID</div> <div>Globalping</div><div>${gp.map((r,i)=>f(r.file,`run ${i+1}`)).join(" · ")}: raw results; each carries its Globalping measurement ID</div>
<div>Vultr servers</div><div>${vps.map(v=>`${v}: ${f(`data/vps/${v}/ping.log`,"ping")}, ${f(`data/vps/${v}/mtr.log`,"traceroute")}`).join(" · ")}</div> <div>Vultr servers</div><div>${vps.map(v=>`${v}: ${f(`data/vps/${v}/ping.log`,"ping")}, ${f(`data/vps/${v}/mtr.log`,"traceroute")}`).join(" · ")}</div>
+1 -1
View File
@@ -244,7 +244,7 @@ footer{padding-block:18px 30px;color:var(--faint);font-size:13px}
<button type="button" class="btn" id="dl">Download data (JSON)</button> <button type="button" class="btn" id="dl">Download data (JSON)</button>
</section> </section>
<footer class="wrap">Built 2026-10-30 22:37 UTC. <a href="https://github.com/aetherbird/cable-latency-survey">Code and data</a> (MIT, CC BY 4.0) · <a href="https://github.com/aetherbird/cable-latency-survey/blob/main/CONTRIBUTING.md">Contribute</a> · Part of <a href="https://distance.aethercosmology.com/">The Shape of Distance</a>.</footer> <footer class="wrap">Built 2026-10-30 22:37 UTC. <a href="https://git.aethercosmology.com/toby/cable-latency-survey">Code and data</a> (MIT, CC BY 4.0) · <a href="https://git.aethercosmology.com/toby/cable-latency-survey/src/branch/main/CONTRIBUTING.md">Contribute</a> · Part of <a href="https://distance.aethercosmology.com/">The Shape of Distance</a>.</footer>
<div id="tip" hidden></div> <div id="tip" hidden></div>
+1 -1
View File
@@ -244,7 +244,7 @@ footer{padding-block:18px 30px;color:var(--faint);font-size:13px}
<button type="button" class="btn" id="dl">Download data (JSON)</button> <button type="button" class="btn" id="dl">Download data (JSON)</button>
</section> </section>
<footer class="wrap">Built {{BUILT}}. <a href="https://github.com/aetherbird/cable-latency-survey">Code and data</a> (MIT, CC BY 4.0) · <a href="https://github.com/aetherbird/cable-latency-survey/blob/main/CONTRIBUTING.md">Contribute</a> · Part of <a href="https://distance.aethercosmology.com/">The Shape of Distance</a>.</footer> <footer class="wrap">Built {{BUILT}}. <a href="https://git.aethercosmology.com/toby/cable-latency-survey">Code and data</a> (MIT, CC BY 4.0) · <a href="https://git.aethercosmology.com/toby/cable-latency-survey/src/branch/main/CONTRIBUTING.md">Contribute</a> · Part of <a href="https://distance.aethercosmology.com/">The Shape of Distance</a>.</footer>
<div id="tip" hidden></div> <div id="tip" hidden></div>
+1 -1
View File
@@ -258,7 +258,7 @@ footer{padding-block:18px 30px;color:var(--faint);font-size:13px}
<button id="dl" type="button">Download the data (JSON)</button> <button id="dl" type="button">Download the data (JSON)</button>
</section> </section>
<footer class="wrap"><a href="https://github.com/aetherbird/cable-latency-survey">Code and data</a> (MIT, CC BY 4.0) · <a href="https://github.com/aetherbird/cable-latency-survey/blob/main/CONTRIBUTING.md">Contribute</a> · Related: <a href="https://pingstats.aethercosmology.com">Cable Latency Survey</a> · <a href="https://distance.aethercosmology.com">The Shape of Distance</a></footer> <footer class="wrap"><a href="https://git.aethercosmology.com/toby/cable-latency-survey">Code and data</a> (MIT, CC BY 4.0) · <a href="https://git.aethercosmology.com/toby/cable-latency-survey/src/branch/main/CONTRIBUTING.md">Contribute</a> · Related: <a href="https://pingstats.aethercosmology.com">Cable Latency Survey</a> · <a href="https://distance.aethercosmology.com">The Shape of Distance</a></footer>
<div id="tip" hidden></div> <div id="tip" hidden></div>
<script>// https://d3js.org v7.9.0 Copyright 2010-2023 Mike Bostock <script>// https://d3js.org v7.9.0 Copyright 2010-2023 Mike Bostock
+1 -1
View File
@@ -258,7 +258,7 @@ footer{padding-block:18px 30px;color:var(--faint);font-size:13px}
<button id="dl" type="button">Download the data (JSON)</button> <button id="dl" type="button">Download the data (JSON)</button>
</section> </section>
<footer class="wrap"><a href="https://github.com/aetherbird/cable-latency-survey">Code and data</a> (MIT, CC BY 4.0) · <a href="https://github.com/aetherbird/cable-latency-survey/blob/main/CONTRIBUTING.md">Contribute</a> · Related: <a href="https://pingstats.aethercosmology.com">Cable Latency Survey</a> · <a href="https://distance.aethercosmology.com">The Shape of Distance</a></footer> <footer class="wrap"><a href="https://git.aethercosmology.com/toby/cable-latency-survey">Code and data</a> (MIT, CC BY 4.0) · <a href="https://git.aethercosmology.com/toby/cable-latency-survey/src/branch/main/CONTRIBUTING.md">Contribute</a> · Related: <a href="https://pingstats.aethercosmology.com">Cable Latency Survey</a> · <a href="https://distance.aethercosmology.com">The Shape of Distance</a></footer>
<div id="tip" hidden></div> <div id="tip" hidden></div>
<script>/*D3*/</script> <script>/*D3*/</script>
+3 -3
View File
@@ -352,7 +352,7 @@ const MNAME=Object.fromEntries(MODELS),NK={globe:"globe",ae:"ae",dp:"dualpole",m
const reduce=matchMedia("(prefers-reduced-motion: reduce)").matches; const reduce=matchMedia("(prefers-reduced-motion: reduce)").matches;
const S={src:"all",view:"ae",sel:null,hover:null,site:null,onlyBad:false,pulses:!reduce,mode:"cable",tab:"route"}; const S={src:"all",view:"ae",sel:null,hover:null,site:null,onlyBad:false,pulses:!reduce,mode:"cable",tab:"route"};
const MODE={cable:"sea-cable route",line:"straight line"}; const MODE={cable:"sea-cable route",line:"straight line"};
const GH="https://github.com/aetherbird/cable-latency-survey",GIT="https://git.aethercosmology.com/toby/cable-latency-survey",SRCV=GIT+"/src/branch/main/",RAWV=GIT+"/raw/branch/main/"; const GIT="https://git.aethercosmology.com/toby/cable-latency-survey",SRCV=GIT+"/src/branch/main/",RAWV=GIT+"/raw/branch/main/";
const lnk=(href,t)=>`<a href="${href}" target="_blank" rel="noopener">${t}</a>`; const lnk=(href,t)=>`<a href="${href}" target="_blank" rel="noopener">${t}</a>`;
const netName=n=>/^home/.test(n)?"residential connection, Michigan":n.replace(/^our /,""); const netName=n=>/^home/.test(n)?"residential connection, Michigan":n.replace(/^our /,"");
const fmt=(x,d=1)=>x.toLocaleString("en-US",{minimumFractionDigits:d,maximumFractionDigits:d}); const fmt=(x,d=1)=>x.toLocaleString("en-US",{minimumFractionDigits:d,maximumFractionDigits:d});
@@ -914,8 +914,8 @@ function renderCode(){
["analyze_wn.py","WonderNetwork archive: statistics, mislocated servers"],["cables.py","published cable lengths on each model"],["network.py","cable-and-land routing on each model"],["trace.py","RIPE Atlas sea crossings"], ["analyze_wn.py","WonderNetwork archive: statistics, mislocated servers"],["cables.py","published cable lengths on each model"],["network.py","cable-and-land routing on each model"],["trace.py","RIPE Atlas sea crossings"],
["asmap.py","network attribution from public BGP data"],["pingmap.py","shape fit without positions"],["build.py","this page"],["export.py","JSON data hand-off"]]; ["asmap.py","network attribution from public BGP data"],["pingmap.py","shape fit without positions"],["build.py","this page"],["export.py","JSON data hand-off"]];
document.getElementById("code").innerHTML=` document.getElementById("code").innerHTML=`
<div>Repository</div><div>${lnk(GIT,GIT.replace("https://",""))} · mirror ${lnk(GH,GH.replace("https://",""))}</div> <div>Repository</div><div>${lnk(GIT,GIT.replace("https://",""))}</div>
<div>Contribute</div><div>${lnk(GH+"/blob/main/CONTRIBUTING.md","How to contribute")} · ${lnk(GH+"/issues","issues")} · ${lnk(GH+"/pulls","pull requests")}</div> <div>Contribute</div><div>${lnk(SRCV+"CONTRIBUTING.md","How to contribute")} · ${lnk(GIT+"/issues","issues")} · ${lnk(GIT+"/pulls","pull requests")}</div>
<div>Data hand-off</div><div>${lnk(RAWV+"cable_latency_survey_data_v2.json","cable_latency_survey_data_v2.json")} (every measurement, site, route and cable path) · ${lnk(RAWV+"cable_latency_survey_data.json","version 1")}</div> <div>Data hand-off</div><div>${lnk(RAWV+"cable_latency_survey_data_v2.json","cable_latency_survey_data_v2.json")} (every measurement, site, route and cable path) · ${lnk(RAWV+"cable_latency_survey_data.json","version 1")}</div>
<div>Globalping</div><div>${gp.map((r,i)=>f(r.file,`run ${i+1}`)).join(" · ")}: raw results; each carries its Globalping measurement ID</div> <div>Globalping</div><div>${gp.map((r,i)=>f(r.file,`run ${i+1}`)).join(" · ")}: raw results; each carries its Globalping measurement ID</div>
<div>Vultr servers</div><div>${vps.map(v=>`${v}: ${f(`data/vps/${v}/ping.log`,"ping")}, ${f(`data/vps/${v}/mtr.log`,"traceroute")}`).join(" · ")}</div> <div>Vultr servers</div><div>${vps.map(v=>`${v}: ${f(`data/vps/${v}/ping.log`,"ping")}, ${f(`data/vps/${v}/mtr.log`,"traceroute")}`).join(" · ")}</div>
+3 -3
View File
@@ -342,7 +342,7 @@ const MNAME=Object.fromEntries(MODELS),NK={globe:"globe",ae:"ae",dp:"dualpole",m
const reduce=matchMedia("(prefers-reduced-motion: reduce)").matches; const reduce=matchMedia("(prefers-reduced-motion: reduce)").matches;
const S={src:"all",view:"ae",sel:null,hover:null,site:null,onlyBad:false,pulses:!reduce,mode:"cable",tab:"route"}; const S={src:"all",view:"ae",sel:null,hover:null,site:null,onlyBad:false,pulses:!reduce,mode:"cable",tab:"route"};
const MODE={cable:"sea-cable route",line:"straight line"}; const MODE={cable:"sea-cable route",line:"straight line"};
const GH="https://github.com/aetherbird/cable-latency-survey",GIT="https://git.aethercosmology.com/toby/cable-latency-survey",SRCV=GIT+"/src/branch/main/",RAWV=GIT+"/raw/branch/main/"; const GIT="https://git.aethercosmology.com/toby/cable-latency-survey",SRCV=GIT+"/src/branch/main/",RAWV=GIT+"/raw/branch/main/";
const lnk=(href,t)=>`<a href="${href}" target="_blank" rel="noopener">${t}</a>`; const lnk=(href,t)=>`<a href="${href}" target="_blank" rel="noopener">${t}</a>`;
const netName=n=>/^home/.test(n)?"residential connection, Michigan":n.replace(/^our /,""); const netName=n=>/^home/.test(n)?"residential connection, Michigan":n.replace(/^our /,"");
const fmt=(x,d=1)=>x.toLocaleString("en-US",{minimumFractionDigits:d,maximumFractionDigits:d}); const fmt=(x,d=1)=>x.toLocaleString("en-US",{minimumFractionDigits:d,maximumFractionDigits:d});
@@ -904,8 +904,8 @@ function renderCode(){
["analyze_wn.py","WonderNetwork archive: statistics, mislocated servers"],["cables.py","published cable lengths on each model"],["network.py","cable-and-land routing on each model"],["trace.py","RIPE Atlas sea crossings"], ["analyze_wn.py","WonderNetwork archive: statistics, mislocated servers"],["cables.py","published cable lengths on each model"],["network.py","cable-and-land routing on each model"],["trace.py","RIPE Atlas sea crossings"],
["asmap.py","network attribution from public BGP data"],["pingmap.py","shape fit without positions"],["build.py","this page"],["export.py","JSON data hand-off"]]; ["asmap.py","network attribution from public BGP data"],["pingmap.py","shape fit without positions"],["build.py","this page"],["export.py","JSON data hand-off"]];
document.getElementById("code").innerHTML=` document.getElementById("code").innerHTML=`
<div>Repository</div><div>${lnk(GIT,GIT.replace("https://",""))} · mirror ${lnk(GH,GH.replace("https://",""))}</div> <div>Repository</div><div>${lnk(GIT,GIT.replace("https://",""))}</div>
<div>Contribute</div><div>${lnk(GH+"/blob/main/CONTRIBUTING.md","How to contribute")} · ${lnk(GH+"/issues","issues")} · ${lnk(GH+"/pulls","pull requests")}</div> <div>Contribute</div><div>${lnk(SRCV+"CONTRIBUTING.md","How to contribute")} · ${lnk(GIT+"/issues","issues")} · ${lnk(GIT+"/pulls","pull requests")}</div>
<div>Data hand-off</div><div>${lnk(RAWV+"cable_latency_survey_data_v2.json","cable_latency_survey_data_v2.json")} (every measurement, site, route and cable path) · ${lnk(RAWV+"cable_latency_survey_data.json","version 1")}</div> <div>Data hand-off</div><div>${lnk(RAWV+"cable_latency_survey_data_v2.json","cable_latency_survey_data_v2.json")} (every measurement, site, route and cable path) · ${lnk(RAWV+"cable_latency_survey_data.json","version 1")}</div>
<div>Globalping</div><div>${gp.map((r,i)=>f(r.file,`run ${i+1}`)).join(" · ")}: raw results; each carries its Globalping measurement ID</div> <div>Globalping</div><div>${gp.map((r,i)=>f(r.file,`run ${i+1}`)).join(" · ")}: raw results; each carries its Globalping measurement ID</div>
<div>Vultr servers</div><div>${vps.map(v=>`${v}: ${f(`data/vps/${v}/ping.log`,"ping")}, ${f(`data/vps/${v}/mtr.log`,"traceroute")}`).join(" · ")}</div> <div>Vultr servers</div><div>${vps.map(v=>`${v}: ${f(`data/vps/${v}/ping.log`,"ping")}, ${f(`data/vps/${v}/mtr.log`,"traceroute")}`).join(" · ")}</div>