- Go 100%
| cmd/api | ||
| .gitignore | ||
| calendar.go | ||
| calendar_test.go | ||
| go.mod | ||
| LICENSE | ||
| README.md | ||
| TODO.md | ||
lllaetu-data
lllaetu-data yra Go API religinei mėnulio kalendoriaus versijai tirti ir generuoti.
Projektas šiuo metu yra tyrimo stadijoje: taisyklės dar nėra galutinės, todėl API leidžia lyginti kelis 13-ojo mėnesio pridėjimo būdus.
Nuorodos:
- Šaltinio kodas: g.arns.lt/zordsdavini/lllaetu-data
- Gyvas pavyzdys: lllaetu.arns.lt/day
Metų numeracija
Dabartiniai metai yra 30.38.
Skaitinė reikšmė yra 3038, bet rodymui naudojamas taškas, kad šie metai nesusimaišytų su grigališkais metais.
2026 grigališki metai patenka į 3038 kalendoriaus metus = 30.38
religious_year = gregorian_year + 1012
API grąžina abu laukus:
{
"year": 3038,
"year_text": "30.38"
}
Pagal dabartinį modelį 30.38 prasideda 2025-12-14 kaip 30.37.XII.13 ir baigiasi 2026-12-31. Tai yra Uosio metai.
Pagrindinės kalendoriaus taisyklės
Ši versija modeliuoja tokias taisykles:
- patikimas atskaitos taškas:
30.00kalendorius prasideda1987-12-22, tai yra29.99.XII.13; 30.00nėra Uosio metai;- kalendoriaus metai pradedami nuo ankstesnių metų paskutinio mėnesio 13 dienos:
XII.13arba, jei ankstesni metai turėjo Uosį,XIII.13; - mėnuo neprasideda jaunatimi;
- astronominė jaunatis modelyje laikoma 11 mėnesio dieną;
- matoma jaunatis modelyje laikoma 13 mėnesio dieną;
- nelyginiai mėnesiai turi 29 dienas;
- lyginiai mėnesiai turi 30 dienų;
- 12 pirmų mėnesių vardai sutampa su lietuviškais mėnesių vardais:
Sausis,Vasaris,Kovas,Balandis,Gegužė,Birželis,Liepa,Rugpjūtis,Rugsėjis,Spalis,Lapkritis,Gruodis; - 13-asis mėnuo vadinamas
Uosis; Uosispagal nutylėjimą turi 30 dienų;- tyrimui galima naudoti
uosis=29, tadaUosisturi 29 dienas; Uosispridedamas pagal pasirinktą tyrimo taisyklę.
Žiemos saulėgrįža yra svarbi religinė atrama, bet šiame modelio etape ji dar nėra aktyvi API taisyklė. Dabar pagrindinis klausimas yra, kaip dažnai reikia pridėti Uosį, kad kalendorius per daug nenutoltų nuo Saulės metų.
Tikras matomumas priklausytų nuo horizonto, debesuotumo ir religinės patvirtinimo tvarkos. Dabartiniame modelyje tai supaprastinta: 11 diena yra jaunatis, 13 diena yra matoma jaunatis.
Uosio pridėjimo taisyklės
API palaiko šias taisykles:
| Taisyklė | Reikšmė |
|---|---|
every4 |
tradiciškai paprasta: Uosis kas ketvirti metai |
4x3 |
kartojami tarpai tarp Uosio metų: 4, 3, 3, 4 metai |
metonic19 |
7 Uosio metai per 19 metų ciklą |
solar |
skaičiuojamas geriausias priartėjimas prie Saulės metų |
perskaiciuojant |
solar Uosio metai, bet Uosyje dienos pernumeruojamos taip, kad XIII.13 būtų 2 dienos po astronominės jaunaties |
none |
be Uosio, tik baziniam palyginimui |
Saulės metų artinimas:
paprasti metai = 354 dienos
Uosio metai, kai uosis=30 = 384 dienos
Uosio metai, kai uosis=29 = 383 dienos
reikalinga Uosio metų dalis = (365.2425 - 354) / 30 = apie 0.37475
Tai reiškia, kad per 1000 metų reikia maždaug 374.733 Uosio metų. Taisyklė every4 duoda tik 250, todėl ji yra per reta, jei norime laikytis arti Saulės kalendoriaus.
Jei tiriama su uosis=29, solar taisyklė perskaičiuoja dažnį pagal 29 dienų papildomą mėnesį. Nuo 30.38 tai duoda 38 Uosio metus per 100 metų ir 387 Uosio metus per 1000 metų; skirtumas nuo Saulės intervalo yra apie -22 dienos per 100 metų ir -19 dienų per 1000 metų.
perskaiciuojant taisyklė Uosio metus parenka kaip solar, bet pačiame Uosyje ieško artimiausios datos aplink planuotą XIII.13, kuri yra 2 dienos po astronominės jaunaties. Ta data tampa XIII.13. Jei ji ateina anksčiau, dalis Uosio dienų numerių praleidžiama, pvz. po XIII.07 gali eiti XIII.13.
Tyrimo rezultatai
Pradžia: 30.38 (2026 grigališki metai).
| Taisyklė | 100 metų skirtumas | 100 metų Uosiai | 1000 metų skirtumas | 1000 metų Uosiai | Didžiausias nuokrypis per 1000 metų |
|---|---|---|---|---|---|
every4 |
-374 dienos | 25 | -3742 dienos | 250 | 3743 dienos |
4x3 |
-284 dienos | 28 | -2692 dienos | 285 | 2690 dienų |
metonic19 |
-14 dienų | 37 | -172 dienos | 369 | 194 dienos |
solar |
+16 dienų | 38 | +8 dienos | 375 | 22 dienos |
Išvada: every4 yra paprasta istorinė taisyklė, bet Saulės metų atžvilgiu ji per trumpa. 4x3 prideda Uosį dažniau, tačiau per 1000 metų vis tiek atsilieka apie 2692 dienas. Per 1000 metų every4 atsiliktų apie 3742 dienas, tai yra daugiau nei 10 metų.
Šiuo metu geriausias kandidatas tyrimui yra solar: per 1000 metų jis baigia tik +8 dienomis nuo grigališko intervalo, o didžiausias susikaupęs nuokrypis yra apie 22 dienas.
Pirmi solar Uosio metai nuo 30.38:
30.38, 30.41, 30.44, 30.46, 30.49, 30.52,
30.54, 30.57, 30.60, 30.62, 30.65, 30.68,
30.70, 30.73, 30.76, 30.78, 30.81, 30.84,
30.86, 30.89, 30.92, 30.94, 30.97, 31.00
Matoma jaunatis ir 13-oji mėnesio diena
Papildomai API skaičiuoja, kaip modelyje laikoma jaunatis siejasi su mėnesio dienomis.
Dabartinė taisyklė:
- 11 mėnesio diena - jaunatis (
🌑); - 13 mėnesio diena - matoma jaunatis;
- 18 mėnesio diena - priešpilnis (
🌓); - 26 mėnesio diena - pilnatis (
🌕); - 3 mėnesio diena - delčia (
🌗).
Pagal dabartinį modelį:
12 mėnesių metai:
12 * 29.530588853 - 354 = +0.367 dienos
13 mėnesių metai, kai uosis=30:
13 * 29.530588853 - 384 = -0.102 dienos
13 mėnesių metai, kai uosis=29:
13 * 29.530588853 - 383 = +0.898 dienos
Interpretacija:
- paprastais 12 mėnesių metais tikra mėnulio eiga yra apie
0.367dienos ilgesnė už fiksuotą 30/29 kalendorių, todėl matoma jaunatis slenka vėliau prieš fiksuotas kalendoriaus dienas; - Uosio metais su
uosis=30fiksuotas kalendorius yra apie0.102dienos ilgesnis už 13 tikrų mėnulio ciklų, todėl matoma jaunatis truputį slenka anksčiau; - Uosio metais su
uosis=29fiksuotas kalendorius yra apie0.898dienos trumpesnis už 13 tikrų mėnulio ciklų, todėl matoma jaunatis slenka vėliau; - pačiame taisyklių modelyje matoma jaunatis yra tiksliai 13 dieną, todėl
day13_moon_drift.average_difference_days = 0.
Pavyzdžiai nuo 30.38 pradžios:
| Metai | Mėnuo | 13-oji diena | Artimiausia matoma jaunatis | Skirtumas |
|---|---|---|---|---|
| 30.37 | 12 | 2025-12-14 | 2025-12-14 | 0 |
| 30.38 | 1 | 2026-01-13 | 2026-01-13 | 0 |
| 30.38 | 2 | 2026-02-11 | 2026-02-11 | 0 |
| 30.38 | 3 | 2026-03-13 | 2026-03-13 | 0 |
Šis skaičiavimas padeda atskirai matyti du dalykus: Saulės metų tikslumą ir teorinį 30/29 mėnesių santykį su sinodiniu mėnesiu. Uosio taisyklė pirmiausia sprendžia Saulės metų artumą, o ne tikro dangaus stebėjimo protokolą.
HTML kalendorius
Žmogui skaitomas kalendorius pasiekiamas:
GET /calendar?year=3038&leap_rule=solar
HTML matrica:
- X ašis: 14 mėnulio laipsnių stulpelių, ne mėnesiai;
- Y ašis: 4 grigališkos savaitės, kiekviena prasideda sekmadieniu
Sv; - kalendorius pradedamas ankstesnių metų paskutinio mėnesio 13 diena;
- langelyje rodoma
kalendoriaus data - grigališka data; - visos datos yra išrašomos, jos nėra praleidžiamos;
- metai rašomi tik ten, kur prasideda metų atkarpa;
- mėnuo rašomas tik ten, kur prasideda mėnesio atkarpa;
- ta pati trumpinimo taisyklė taikoma ir grigališkai datai: grigališki metai ir mėnuo rodomi tik naujų metų arba naujo mėnesio pradžioje;
- metų ir mėnesio pradžios HTML vaizde paryškinamos abiejose datose;
- jei datos atkarpa prasideda ne sekmadienį, prieš ją įdedami tušti
<br>: antradieniui dedami 2<br>, trečiadieniui 3 ir t. t.; - dešinėje fazė rodoma tik tada, kai fazė prasideda: 3 dieną
🌗, 11 dieną🌑, 18 dieną🌓, 26 dieną🌕; - laipsnio stulpelis turi 4 savaites, t. y. 28 grigališkas dienas.
- metų pabaigoje paskutinis mėnuo rodomas pilnas;
- jei paskutinio mėnesio likutis nebetelpa paskutiniame mėnulio laipsnyje, jis keliamas į
0laipsnio viršų; - jei perkeltas likutis persidengia su einamojo kalendoriaus pradžia, ankstesnės savaitės rodomos pilnai;
- pjūvis taikomas tik savaitei, kurioje prasideda einamasis kalendorius;
- perkelto likučio savaitės po pjūvio neberodomos;
- paskutinė neperdengta perkelto likučio data pjūvio savaitėje gauna
3pxraudonąborder-bottom, kad matytųsi padalijimas.
HTML puslapis turi nuorodas į ankstesnius ir kitus metus. Nuorodos išsaugo pasirinktą leap_rule. Puslapyje taip pat galima perjungti solar, perskaiciuojant, metonic19, 4x3, every4 ir none taisykles.
30.00 pavyzdys:
0 laipsnis, Sv 4, antradienis: 29.99.XII.13 - 1987.XII.22
0 laipsnyje lieka tik 5 datos: XII.13-XII.17
1 laipsnis tęsia nuo 29.99.XII.18
30.00.I.01 patenka į 1 laipsnį, Sv 2 savaitę: 1988.I.09
Paleidimas
go run ./cmd/api
Pagal nutylėjimą API klausosi 8080 porto.
Kitas portas:
PORT=8081 go run ./cmd/api
Maršrutai
HTML puslapiai:
GET /day
GET /day?date=2023-04-01
GET /calendar?year=3038
JSON API:
GET /api/health
GET /api/today
GET /api/convert?date=2026-06-15
GET /api/year?year=3038
GET /api/research?start=3038&years=100&leap_rule=solar
GET /api/research/compare?start=3038&years=1000
Bendri parametrai:
leap_rule=solar|perskaiciuojant|metonic19|4x3|every4|noneepoch_year=3000visible_delay_days=1uosis=30|29
Pavyzdžiai:
curl 'http://localhost:8080/day'
curl 'http://localhost:8080/day?date=2023-04-01'
curl 'http://localhost:8080/calendar?year=3038'
curl 'http://localhost:8080/api/today'
curl 'http://localhost:8080/api/year?year=3038'
curl 'http://localhost:8080/api/research?start=3038&years=1000&leap_rule=every4'
curl 'http://localhost:8080/api/research/compare?start=3038&years=1000'
Go versija
Projektas taiko:
go 1.26.4
Lokali naudota versija:
go version go1.26.4-X:nodwarf5 linux/amd64
Testai
go test ./...
Jei Go negali rašyti į standartinį cache katalogą:
GOCACHE=/tmp/lllaetu-go-cache go test ./...