Compare commits
10 Commits
c6cf861435
...
37f7a0997f
| Author | SHA1 | Date | |
|---|---|---|---|
| 37f7a0997f | |||
| 33ea19257f | |||
| a68eb28877 | |||
| de99b2c58b | |||
| e21fd4823d | |||
| d58fe3c57b | |||
| 2c362a8140 | |||
| b55575e7a8 | |||
| 993ce26f4f | |||
| 806220ccfa |
+26
-2
@@ -44,6 +44,7 @@ _SESSION_COOKIE = "bincio_session"
|
||||
_SAFE_SLUG = re.compile(r"^[a-zA-Z0-9_][a-zA-Z0-9_\-/]*$")
|
||||
_SAFE_HANDLE = re.compile(r"^[a-z][a-z0-9_-]{1,19}$")
|
||||
_SAFE_HASH = re.compile(r"^[0-9a-f]{4,40}$")
|
||||
_SAFE_REL_PATH = re.compile(r"^(pages|blog)/[a-zA-Z0-9_][a-zA-Z0-9_\-/]*\.md$")
|
||||
_ALLOWED_IMAGE_TYPES = {"image/jpeg", "image/png", "image/webp", "image/gif"}
|
||||
_MAX_IMAGE_BYTES = 10 * 1024 * 1024 # 10 MB
|
||||
|
||||
@@ -288,12 +289,15 @@ async def get_wiki_log(user: User = Depends(require_auth)) -> JSONResponse:
|
||||
|
||||
|
||||
@app.get("/api/diff/{commit_hash}")
|
||||
async def get_diff(commit_hash: str, user: User = Depends(require_auth)) -> JSONResponse:
|
||||
async def get_diff(commit_hash: str, file: Optional[str] = None, user: User = Depends(require_auth)) -> JSONResponse:
|
||||
if not _SAFE_HASH.match(commit_hash):
|
||||
raise HTTPException(status_code=400, detail="invalid hash")
|
||||
if file is not None and not _SAFE_REL_PATH.match(file):
|
||||
raise HTTPException(status_code=400, detail="invalid file path")
|
||||
paths = [file] if file else ["pages/", "blog/"]
|
||||
env = _git_env()
|
||||
proc = await asyncio.create_subprocess_exec(
|
||||
"git", "show", commit_hash, "-p", "--no-color", "--format=", "--", "pages/", "blog/",
|
||||
"git", "show", commit_hash, "-p", "--no-color", "--format=", "--", *paths,
|
||||
cwd=str(_ROOT), env=env,
|
||||
stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE,
|
||||
)
|
||||
@@ -303,6 +307,26 @@ async def get_diff(commit_hash: str, user: User = Depends(require_auth)) -> JSON
|
||||
return JSONResponse({"diff": stdout.decode(errors="replace")})
|
||||
|
||||
|
||||
@app.get("/api/history/{slug:path}")
|
||||
async def get_history(slug: str, user: User = Depends(require_auth)) -> JSONResponse:
|
||||
if not _SAFE_SLUG.match(slug):
|
||||
raise HTTPException(status_code=400, detail="invalid slug")
|
||||
env = _git_env()
|
||||
proc = await asyncio.create_subprocess_exec(
|
||||
"git", "log", "--format=%h|%ar|%aN|%s", "--author=@bincio.wiki", "-n", "50",
|
||||
"--", f"pages/{slug}.md", f"blog/{slug}.md",
|
||||
cwd=str(_ROOT), env=env,
|
||||
stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.DEVNULL,
|
||||
)
|
||||
stdout, _ = await proc.communicate()
|
||||
entries = []
|
||||
for line in stdout.decode().strip().splitlines():
|
||||
parts = line.split("|", 3)
|
||||
if len(parts) == 4:
|
||||
entries.append({"hash": parts[0], "date": parts[1], "author": parts[2], "message": parts[3]})
|
||||
return JSONResponse({"log": entries})
|
||||
|
||||
|
||||
@app.get("/api/me")
|
||||
async def me(user: User = Depends(require_auth)) -> JSONResponse:
|
||||
return JSONResponse({
|
||||
|
||||
@@ -21,10 +21,9 @@ indipendentemente dall'essere in pianura, in salita, a manetta o a passeggio.
|
||||
Se la situazione lo richiede (e.g. c'è tanto caldo) si beve un po' di più, ma
|
||||
non si beve mai di meno di quanto si è stabilito.
|
||||
|
||||
### <a id="il_muro" style="scroll-margin-top: 60px;"></a>
|
||||
Il glicogeno muscolare (il carburante per il ciclismo ad alta intensità) si
|
||||
esaurisce in 90-120 minuti di sforzo sostenuto. Dopo quella soglia, se non si
|
||||
ha reintegrato, arriva il "il muro" — crollo energetico
|
||||
ha reintegrato, arriva il <a id="il_muro">muro</a> — crollo energetico
|
||||
improvviso, difficile da recuperare mentre si è in sella.
|
||||
|
||||
---
|
||||
@@ -54,28 +53,73 @@ giri di un'ora e mezza - due si è sempre sicuri di non arrivare al muro.
|
||||
|
||||
---
|
||||
|
||||
## Per uscite più lunghe (3+ ore)
|
||||
## Per uscite più lunghe (2+ ore)
|
||||
|
||||
Si inizia a parlare di strategia:
|
||||
Il carburante utilizzato dai muscoli durante il giro in bici è il glicogeno
|
||||
muscolare; questo si ottiene sostanzialmente dai carboidrati, in particolare
|
||||
dagli zuccheri (si può ottenere anche dai grassi ma sono dettagli che non
|
||||
interessano qui).
|
||||
Di conseguenza, per evitare di finire contro il [muro](#il_muro) bisogna
|
||||
adottare una strategia di reintegro degli zuccheri durante il giro.
|
||||
|
||||
**La borraccia di zucchero** — acqua, zucchero comune (40-60g per 500ml),
|
||||
sale, succo di limone. Economica, pratica, efficace. È la soluzione che
|
||||
molti nel gruppo usano per le rando e le uscite lunghe. Non è isotonica ma si
|
||||
può abbinare a una seconda borraccia d'acqua.
|
||||
Se si ha fame finito il giro, vuol dire che non si è reintegrato abbastanza.
|
||||
Questo va bene se è una cosa voluta (e.g. faccio un bel giro, arrivo al
|
||||
ristorante e mi sfondo di cibo), mentre è un campanello di allarme se invece
|
||||
si pensava di aver reintegrato correttamente.
|
||||
|
||||
### Principali metodi per assumere zuccheri durante il giro
|
||||
|
||||
**La borraccia di zucchero** — acqua, zucchero comune (40-60g per 500ml), un
|
||||
pizzico di sale. Economica, pratica, efficace. Non è isotonica ma si può abbinare a una
|
||||
seconda borraccia d'acqua. Ad alcune persone può causare problemi di stomaco,
|
||||
soprattutto le prime volte: bisogna abituare lo stomaco, per cui si consiglia
|
||||
di provare le prime volte in uscite brevi, o quando si è sicuri di avere un
|
||||
bagno a portata di mano
|
||||
|
||||
**Gel** — rapidi, pratici durante la pedalata, ma costosi e non sempre
|
||||
piacevoli da ingerire. Utili per i momenti di sforzo intenso. I marchi più
|
||||
citati: SiS, Maurten, GU Energy. I Maurten sono considerati i migliori per la
|
||||
tolleranza gastrica ma hanno un costo folle — meglio tenerli per le gare
|
||||
importanti.
|
||||
importanti. In termini di prestazioni forniscono un vantaggio minimo rispetto
|
||||
alla borraccia con sale e zucchero, per cui sono da utilizzaare quando si
|
||||
ricerca la massima efficienza
|
||||
|
||||
**Barrette** — più sazianti dei gel, vanno bene nelle fasi di intensità
|
||||
moderata. Homemade (con fiocchi d'avena, miele, frutta secca) sono molto
|
||||
apprezzate e molto più economiche di quelle in commercio.
|
||||
apprezzate e molto più economiche di quelle in commercio. Quando le si acquista
|
||||
in commercio, controllare sempre l'apporto calorico, e stare sopra le 150kcal
|
||||
per barretta
|
||||
|
||||
**Elettroliti** — importanti nelle uscite lunghe o in estate. Si perdono sali
|
||||
con il sudore (sodio soprattutto). Le pastiglie effervescenti da borraccia
|
||||
funzionano bene.
|
||||
### Esempio di nutrizione per un giro di 4 ore
|
||||
4 ore di sforzo medio-alto = 2.000-2.500kcal bruciate
|
||||
|
||||
Reinegrare con:
|
||||
- 4 borracce da 60g di zucchero (una ogni ora per tutta la durata del giro) = 930kcal
|
||||
- 1 barretta dopo un'ora e mezza/due = 150kcal
|
||||
- pausa al bar dopo due ore e mezza/tre
|
||||
- 2 coca cola da 33cl = 270kcal
|
||||
- 1 pacchetto di patatine piccolo (mangiamo anche qualcosa di salato, se no che palle) = 200kcal
|
||||
- 1 fetta di torta = 250kcal
|
||||
|
||||
|
||||
Totale reintegrato = 1.800kcal
|
||||
|
||||
### Sali
|
||||
Finchè si parla di uscite "normali" (non ultra, non rando, ecc), l'unico sale
|
||||
che bisogna reintegrare durante un giro è il sodio. La fonte più comune di
|
||||
sodio che abbiamo a disposizione è il sale da cucina. Per questo, si consiglia
|
||||
di mettere un pizzico di sale da cucina nella borraccia con lo zucchero (un
|
||||
pizzico non è una quantità molto precisa ma rende bene l'idea. Si consiglia poi
|
||||
di andare a tentativi per trovare la quantità giusta che non renda la bevanda
|
||||
disgustosa nè la faccia legare in bocca, ma che al contempo permetta di
|
||||
reintegrare correttamente). Sale e acqua prevengono i crampi: se durante il
|
||||
giro si hanno i crampi significa che si è bevuto poco o si è reintegrato poco
|
||||
sale (o entrambe), rispetto allo sforzo che si è fatto.
|
||||
D'estate la sudorazione è maggiore e con quella è maggiore la perdita di sali,
|
||||
quindi bisogna aumentare la quantità da mettere nella borraccia.
|
||||
|
||||
**Elettroliti** — possono essere utilizzati nelle uscite lunghe o in estate.
|
||||
Le pastiglie effervescenti da borraccia funzionano bene.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -50,18 +50,6 @@ batteria e cambio, per queste evenienze
|
||||
del cambio dal lato del muro non sia appoggiata al muro, altrimenti può
|
||||
risultare perennemente attiva, scaricando la batteria
|
||||
|
||||
|
||||
## Test
|
||||
|
||||
1. Uno
|
||||
2. Due
|
||||
3. Tre
|
||||
|
||||
- pallino 1
|
||||
- pallino 2
|
||||
- pallino 3
|
||||
|
||||
|
||||
---
|
||||
|
||||
## Le gamme Shimano
|
||||
|
||||
+1
-1
Submodule site updated: 5e024b0f29...e6b9ba56b1
Reference in New Issue
Block a user