unix = {
while(true) {
yield Date.now();
}
}
tick = {
let i = 0;
while (true) {
yield Promises.tick(864, ++i);
}
}
tickTime = tick % 1e5
// http://howardhinnant.github.io/date_algorithms.html#civil_from_days
function unix2dote(unix, zone, offset = 719468) {
return [
(unix ?? Date.now()) / 86400000
+ (zone = zone ?? (10 - Math.round(
(new Date).getTimezoneOffset() / 144)) % 10
) / 10 + offset, zone]
}
function dote2doty(days = 719468, zone = 0) {
const era = Math.floor((days >= 0 ? days : days - 146096) / 146097), dotc = days - era * 146097,
yotc = Math.floor((dotc - Math.floor(dotc / 1460) + Math.floor(dotc / 36524) - Math.floor(dotc / 146096)) / 365);
return [yotc + era * 400, dotc + Math.floor(yotc / 100) - yotc * 365 - Math.floor(yotc / 4), zone];
}
function doty2deco(year = 1969, doty = 306, zone = 0) {
return `${year.toString().padStart(4, "0")}+${Math.floor(doty).toString().padStart(3, "0")}${String(doty % 1 * 10).slice(0, 6)}-${zone}`
}
ydz = dote2doty(...unix2dote(unix))
deco = doty2deco(...ydz)
// https://observablehq.com/@observablehq/text-color-annotations-in-markdown#textcolor
function setStyle(content, style = {}) {
function yiq(color) {
const {r, g, b} = d3.rgb(color);
return (r * 299 + g * 587 + b * 114) / 1000 / 255; // returns values between 0 and 1
}
const {
background,
color = yiq(background) >= 0.6 ? "#111" : "white",
padding = "0 1px",
borderRadius = "4px",
fontWeight = 900,
fontSize = "1em",
...rest
} = typeof style === "string" ? {background: style} : style;
return htl.html`<span style=${{
background,
color,
padding,
borderRadius,
fontWeight,
...rest
}}>${content}</span>`;
}
function year2bool(year = 1970) {
return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
}
decoYear = deco.slice(0, 4)
decoDate = deco.slice(5, 8)
decoTime = deco.slice(8, 14)
decoTimeZone = deco[15]
nDaysInYear = 365 + year2bool(ydz[0] + 1)
fracYear = (ydz[0] + (ydz[1] - ydz[2]) / nDaysInYear).toFixed(8)
styledDecoYear0 = setStyle(decoYear, d3.schemePaired[10])
styledDecoYear1 = setStyle(decoYear, d3.schemePaired[10])
styledFracYear = setStyle(fracYear, d3.schemePaired[10])
styledDecoDate0 = setStyle(decoDate, d3.schemePaired[1])
styledDecoDate1 = setStyle(decoDate, d3.schemePaired[1])
styledNdays = setStyle(nDaysInYear * 10, d3.schemePaired[1])
styledDecoTime0 = setStyle(decoTime, d3.schemePaired[2])
styledDecoTime1 = setStyle(decoTime, d3.schemePaired[2])
styledDecoTime2 = setStyle(decoTime, d3.schemePaired[2])
styledTimeZone0 = setStyle(decoTimeZone, d3.schemePaired[3])
styledTimeZone1 = setStyle(decoTimeZone, d3.schemePaired[3])
styledTimeZone2 = setStyle(decoTimeZone, d3.schemePaired[3])
styledTickTime = setStyle(tickTime, d3.schemePastel2[0])
The Dec measurement system
This section of my blog focuses on Dec, a measurement system that I created to measure⏳time,📍position,🧭orientation,📐angles, and🔄cycles in turns (\(\tau\)) instead of months, weeks, hours, minutes, seconds, and degrees. For time measurement, Dec uses days and years, which are turns of a celestial body on its axis and around the point it orbits, respectively.
Timestamps
The numbers in the top left of the navigation bar (navbar) are components of a Dec timestamp that shows the current time: .
Dec timestamps are inspired by this equation: \(\texttt{y=\lfloor{y}\rfloor+}\frac{\texttt{d-z}}{\texttt{n}}\), where \(\texttt{y}\) is decimal years (), \(\texttt{\lfloor{y}\rfloor}\) is floored years (), \(\texttt{d}\) is decidays (), \(\texttt{z}\) is the Dec time zone (), and \(\texttt{n}\) is the total number of decidays in the year ().
In addition to time, Dec also measuresgeographic andcelestial coordinates: longitude , latitude, azimuth, altitude, etc.
Importantly, Dec time zones are derived from floored decidays of longitude (\(\texttt{z=\lfloor{λ}\rfloor}\)) and can be appended to the time of day (), but not to durations, e.g. the centimillidays since this webpage was loaded: .
Citation
BibTeX citation:
@online{laptev2024,
author = {Laptev, Martin},
title = {The {Dec} Measurement System},
date = {2024},
urldate = {2024},
url = {https://maptv.github.io/blog/dec},
langid = {en}
}
For attribution, please cite this work as:
Laptev, Martin. 2024. “The Dec Measurement System.” 2024.
https://maptv.github.io/blog/dec.