Jeden formát pro intervaly, série i repeatery

Repeater na hangboardu a kolo Tabaty spolu na papíře nemají moc společného. První je sedm sekund visu na liště a tři sekundy pauzy, šestkrát za sebou, pak dlouhý odpočinek a další série. Druhé je dvacet sekund práce naplno a deset sekund odpočinku, osm kol. Trenér, který je sportovci popisuje, u každého použije úplně jiná slova. Sestava obojí odměřuje jedním jádrem časovače, a tak jsme si ještě než jsme napsali první řádek obrazovky tréninku, museli odpovědět na menší otázku: co zbude z tréninku, když z něj odečtete sport?
Naše odpověď je sestava.plan/1, otevřený formát v JSON s variantou CSV pro tabulky. Úplný popis
najdete na stránce Formát plánu; tenhle článek je prohlídka.
Části, položky a čtyři způsoby, jak je odcvičit
Plán je buď jednotlivý trénink, nebo vícetýdenní program rozdělený na týdny a dny. Den obsahuje části, každou s vlastním názvem, třeba Rozcvička nebo Hlavní část, a část obsahuje položky. Položka je jednoho ze čtyř druhů a o tom, kterého, rozhodují její klíče:
- časovaná, s
time: odpočítá se a sama přejde dál; - silová, se
setsareps: sportovec klepne na Série hotová a pak začne odpočinek (rest); - odpočinek, jen s
rest; - vis, s
hangarepeats: intervaly na hangboardu.
Část má také režim a ty jsou přesně čtyři. normal, výchozí, projde položky popořadě, tolikrát, kolik
udává rounds. superset střídá silové položky sérii po sérii. amrap vměstná do časového limitu co nejvíc
kol seznamu cviků a sportovec kola počítá. fortime projde seznam jednou, co nejrychleji, dokud
sportovec neklepne na Hotovo nebo nevyprší limit. Položky části amrap a fortime jsou pátý,
jednodušší druh: jeden řádek seznamu cviků, třeba „Běh, 400 m“.
Režim EMOM ani Tabata neexistuje. Nejde o opomenutí: ani jeden vlastní režim nepotřebuje.
Tabata je obyčejná část
Tohle je příklad jednotlivého tréninku přímo ze specifikace formátu, beze změny:
{
"format": "sestava.plan/1",
"name": "Tabata Blast",
"id": "k7Qx2mV9pL4wT8zR",
"version": 2,
"category": "hiit",
"note": "Eight rounds, all out. Scale to squat thrusts if burpees break your form.",
"blocks": [
{
"section": "Tabata",
"rounds": 8,
"items": [
{ "exercise": "Burpees", "time": 20, "cue": "Max effort" },
{ "rest": 10 }
]
}
]
}
Jedna část, osm kol, časovaná položka a odpočinek. Aplikace z toho udělá 16 kroků a čtyři minuty.
Poslední desetisekundový odpočinek proběhne také, protože formát s posledním kolem nezachází
jinak. Časovaná položka nemůže mít vlastní rest; odpočinek je samostatná položka, a tak je každá
položka jen jednoho druhu.
Položka pro hangboard
Repeatery jsou jediný tvar, který se do časovaných položek nevešel bez stránek opakování, a tak dostaly vlastní druh:
{
"exercise": "Half Crimp Repeaters",
"prep": 5,
"hang": 7,
"off": 3,
"repeats": 6,
"sets": 5,
"setRest": 180,
"grip": "Half crimp",
"edge": "20 mm",
"load": "+5 kg"
}
Pět sekund na přípravu, pak pět sérií po šesti visech na sedm sekund se třemi sekundami pauzy mezi nimi a tři minuty odpočinku mezi sériemi. Formát přesně říká, kolik kroků z toho vznikne: jedna příprava, 30 visů, 25 pauz a 4 odpočinky mezi sériemi, 60 kroků z jediné položky. Úchop, lištu a zátěž sportovec uvidí tak, jak je trenér napsal.
Jeden plochý seznam
Ať je režim jakýkoli, den nakonec skončí jako plochý seznam kroků a jádro časovače vždycky přehrává jen tenhle seznam. Kroky supersetu dostanou značky A1, A2 a tak dál; z AMRAPu se stane jeden krok „AMRAP 6 min“, který nese svůj seznam cviků. Díky tomu, že v jádru žádný sport není, zvládne jeden časovač všechny.
Z tabulky
Hodně trenérů má plány v tabulce, a tak má formát variantu CSV s jedním řádkem na položku.
Povinných je dvanáct sloupců
(week,day,day_name,section,rounds,exercise,time,sets,reps,load,rest,cue), ostatní jsou
nepovinné a tabulka bez nich se čte, jako by byly prázdné. Oddělovač se pozná z řádku záhlaví:
čárka, středník nebo tabulátor, takže tabulka uložená se středníky, jak to tabulkové programy
s českým nastavením často dělají, se naimportuje tak, jak je. Hodnoty pro jednotlivé série se píšou přes
lomítko, 12/10/8. Aplikace naimportuje soubor .csv jako každý jiný plán.
Přísný tam, kde na tom záleží
Formát, který čte víc programů, musí být u chyb přesný. Klíč, který formát zná, ale daný druh
položky ho nepovoluje, třeba rest u časované položky, je chyba, která uvede své místo
(blocks[0].items[0].rest), a nikdy se tiše nepřeskočí. Klíč, který formát nezná, se přeskočí,
takže plán z novější aplikace se ve starší otevře, jen s upozorněním.
Programy, které plán zapisují, vytvářejí jediný kanonický tvar: stejné pořadí klíčů, stejné odsazení, na konci nový řádek. Stejný plán tak dá vždy stejné bajty a stejné bajty dají stejný odkaz.
Dva čtenáři, stejné odpovědi
Formát dnes čtou dva programy: jádro aplikace ve Swiftu a modul v TypeScriptu v Sestava Studiu, trenérském editoru v prohlížeči. Aby se od sebe nevzdálily, jsou v repozitáři testovací vektory: pro 25 plánů, které se dají otevřít, kanonický tvar, počet kroků, odhad délky a řádky kontroly; pro 75 chybných první chyba, její místo a zpráva. Jádro je zapisuje a testy Studia ověřují každý jednotlivý trénink i každou chybu (Studio upravuje jen jednotlivé tréninky, a tak jediný program mezi nimi záměrně odmítne). Sestavení selže, když je některý vektor zastaralý.
Co do formátu nepatří
Formát říká, co se stane a kdy. Neříká proč: periodizace, progrese a historie sportovce patří trenérovi, ne souboru, který telefonu říká, kdy má pípnout. Nemá ani nastavení zvuku; hlas, pípání a haptickou odezvu si sportovec volí v aplikaci.
Pár omezení, o kterých je dobré vědět:
- Název je rozhodnutý. Projekt začínal pod jménem Setlist, proto se první návrhy formátu
jmenovaly
setlist.plan/1; formát vyšel jakosestava.plan/1a soubory končí na.sestava, bez aliasu pro pracovní název. - „Popsat trénink“ zapíše méně, než formát umí. Import přes Apple Intelligence žádá model v zařízení jen o časované, silové položky a odpočinky. O tom, jestli je výsledek platný plán, rozhoduje aplikace, ne model, a vy ho zkontrolujete jako každý jiný import.
- Jeden formát souboru, ne všechny služby. Aplikace tento formát importuje ze souboru, odkazu nebo QR kódu a k tomu soubory CSV. Z jiných tréninkových služeb dnes neimportuje.
Format/
v repozitáři, takže se od specifikace, kterou čte aplikace, nemůže rozejít. Najdete na ní schéma
JSON, popis sloupců CSV a seznam změn; testovací vektory jsou přímo v té složce.Úvodní fotografie: Isaac Smith, Unsplash.