Stáhni a spusť: jednosouborová binárka pro Linux, uvnitř Python, Flask, šablony i styly. Staví se ./build.sh v kontejneru na AlmaLinux 8, protože binárka slinkovaná proti glibc z Fedory 44 by nešla spustit nikde se starším systémem. Databáze tím dostává dvě různá místa. Ze zdrojáků zůstává dice.db v pracovním adresáři, ať se dá mít víc sad vedle sebe. Z binárky jde do ~/.local/share/kostky/ — binárka se rozbaluje do dočasného adresáře a pouští se odkudkoli, takže relativní cesta by databázi rozsypala po disku. DICE_DB přebije obojí. Server teď cestu k databázi vypisuje při startu, ať se na ni nemusí ptát. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Počitadlo v kostkách
Doprovod k fyzickým kostkám: telefon zapisuje skóre, notebook ukazuje zápisník a hry se pamatují mezi večery.
Hráči se napříč hrami poznávají podle jména — Adam ze středečního večera je ten samý Adam jako z minulého měsíce. Žádné účty, žádná hesla.
Spuštění
Stáhni binárku z releases a spusť ji:
chmod +x kostky
./kostky
Nic se neinstaluje — Python, Flask i šablony jsou uvnitř. Zatím jen pro Linux na x86-64; postavené proti glibc 2.28, takže jede na všem od RHEL 8, Debianu 10 a Ubuntu 20.04 výš.
Ze zdrojáků to je stejně krátké:
uv run web.py
Závislosti si skript nese v hlavičce (PEP 723) a uv je obstará sám.
Server vypíše všechny adresy, na kterých je dostupný:
Počitadlo je dostupné na:
→ http://10.186.234.182:8000 místní síť
http://100.91.0.24:8000 přes Tailscale
http://172.17.0.1:8000 virtuální síť
Na notebooku otevři /board, naskenuj QR kód telefonem a hraj. Tabule
zobrazuje i zbylé adresy — když jedna nefunguje, zkus další. Zastavuje se
Ctrl+C.
| Proměnná | K čemu je | Výchozí |
|---|---|---|
DICE_DB |
soubor s databází | podle způsobu spuštění, viz níž |
DICE_PORT |
port | 8000 |
DICE_HOST |
pevná adresa; vypne hledání | hledá se za běhu |
Kde jsou data
Jeden soubor SQLite. Založí se sám při prvním načtení stránky, cestu k němu server vypíše při startu.
| Spuštěno | Databáze |
|---|---|
| binárkou | ~/.local/share/kostky/dice.db |
| ze zdrojáků | dice.db v pracovním adresáři |
Binárka se při každém spuštění rozbaluje do dočasného adresáře a pouští se odkudkoli, takže relativní cesta by databázi rozsypala po disku — proto napevno domovský adresář. Ze zdrojáků zůstává relativní, ať se dá mít víc sad vedle sebe.
Zálohovat i stěhovat jde prostým zkopírováním souboru; DICE_DB si ho
najde kdekoli.
Počítá se s domácí sítí — appka nemá přihlašování a kdokoli na stejné WiFi může zapisovat.
Když se telefon nepřipojí
Adresy se hledají při každém načtení tabule, takže přechod z domácí WiFi na hotspot a zpátky si tabule pohlídá sama a načte se znovu.
Zbývají tři důvody, proč se telefon nedostane na notebook:
- Telefon je na mobilních datech, notebook na WiFi. Různé sítě, nepotkají se. Připoj telefon na stejnou WiFi, nebo notebook na hotspot telefonu — to funguje taky.
- Zapnutý hotspot na telefonu shodil jeho WiFi. Většina Androidů to dělá. Pak je řešením připojit na ten hotspot i notebook.
- VPN nebo Tailscale exit node na telefonu posílá veškerý provoz mimo místní síť. V Tailscale to řeší přepínač „Allow local network access"; případně použij tailnet adresu notebooku, ta funguje odkudkoli.
Pravidla
Skóre se zadává ručně po tazích, hází se doopravdy. Tři nulové tahy za sebou
vynulují hráči skóre; indikátor x / xx ukazuje, jak blízko k tomu je.
Vítěz se vyhlašuje až po dokončeném kole, aby měli všichni stejný počet tahů —
při remíze na prvním místě se hraje dál.
Co kde je
| Soubor | Role |
|---|---|
core.py |
pravidla hry, žádný vstup ani výstup |
net.py |
hledání adres, na kterých je počitadlo dostupné |
storage.py |
SQLite: hráči, hry, tahy |
stats.py |
síň slávy a kariérní statistiky |
web.py |
Flask aplikace |
dice.py |
totéž v terminálu, bez ukládání |
build.sh, kostky.spec |
stavba binárky |
Terminálová verze zůstává funkční jako záloha:
uv run dice.py
Bez uv
Když uv po ruce není, jde to postaru:
python -m venv .venv
.venv/bin/pip install -r requirements.txt
.venv/bin/python web.py
Na Fedoře stačí i systémové balíčky, pak se nemusí řešit vůbec nic:
sudo dnf install python3-flask python3-qrcode python3-tabulate
python3 web.py
Vlastní binárka
./build.sh
Staví se v kontejneru (podman nebo docker) na AlmaLinux 8, ne na hostiteli.
Binárka slinkovaná proti glibc z Fedory 44 by nešla spustit nikde se starším
systémem — glibc drží zpětnou kompatibilitu, ne dopřednou. Výsledek je
v dist/kostky.
Terminálová verze součástí binárky není; ta se pouští ze zdrojáků.
Testy
uv run --with-requirements requirements.txt --no-project pytest
Nebo z připraveného prostředí prostě pytest.