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:
+3
-2
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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
@@ -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>
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user