Compare commits

...

10 Commits

Author SHA1 Message Date
claude2010 37f7a0997f claude2010: edited nutrizione 2026-05-24 05:13:51 -04:00
claude2010 33ea19257f claude2010: edited nutrizione 2026-05-24 05:12:09 -04:00
brutsalvadi a68eb28877 Add per-page history endpoint and file-scoped diff filter 2026-05-21 22:42:20 +02:00
root de99b2c58b Remove manual scroll-margin-top hack from nutrizione anchor 2026-05-17 02:58:58 -04:00
brutsalvadi e21fd4823d Update site submodule: scroll-padding-top for sticky nav anchor fix 2026-05-17 08:55:48 +02:00
claude2010 d58fe3c57b claude2010: edited nutrizione 2026-05-16 18:01:09 -04:00
claude2010 2c362a8140 claude2010: edited nutrizione 2026-05-16 17:59:39 -04:00
claude2010 b55575e7a8 claude2010: edited nutrizione 2026-05-16 17:51:24 -04:00
brutsalvadi 993ce26f4f Update site submodule: fix list markers in prose 2026-05-16 23:37:15 +02:00
claude2010 806220ccfa claude2010: edited trasmissione-e-catena 2026-05-16 17:27:57 -04:00
4 changed files with 87 additions and 31 deletions
+29 -5
View File
@@ -41,9 +41,10 @@ _SESSION_DOMAIN = os.environ.get("SESSION_DOMAIN") or None
_SESSION_TTL = 30 * 24 * 3600 # 30 days (matches bincio_activity)
_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_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({
+57 -13
View File
@@ -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