Portfolio, které školní projekty nejen popisuje, ale nechá je i spustit. Většina studentských portfolií končí u odstavce a odkazu na repozitář; tady je záměr jiný - u projektů, kde to dává smysl, si čtenář může sám zadat vstup a nechat běžet ten samý program, který vznikl do školy.
Začalo to jedním souborem index.html a jedním style.css. Ta verze pořád existuje a slouží jako předloha vzhledu, ale statická stránka neumí přijmout zadání a spustit na něj výpočet. Proto vznikla tahle - jako aplikace, která si umí povídat s programy v C++.
Tři vrstvy, každá s jedinou zodpovědností. Podstatné je, co nedělají: web nic nepočítá a server nic nesimuluje.
Důvod tohoto dělení je jednoduchý: kdyby web simulaci počítal sám, musel by ji celou znovu implementovat v JavaScriptu - a od té chvíle by na stránce běželo něco jiného než to, co bylo odevzdané. Takhle čtenář spouští doopravdy ten původní program.
Obě dema jdou stejnou cestou: zadání putuje na server, ten spustí C++ program a vrátí jeho výsledek. Každé k tomu ale mělo jiný důvod:
Cenou za to je, že výpočet HZA zatěžuje server. Prohledávání do šířky z bakalářské práce si pamatuje každou navštívenou konfiguraci a u náročnějších slov si vzalo i gigabajty paměti. Web proto používá prohledávání do hloubky s postupným prohlubováním, které vystačí s desítkami megabajtů, a výpočet omezuje časem - nejvýš minutou. Když slovo přijme, najde tentýž výpočet jako původní verze.
| Vrstva | Čím | Proč zrovna tím |
|---|---|---|
| Web | Next.js, React, TypeScript | Stránky vznikají podle struktury složek a předgenerují se dopředu, takže se načítají jako statické soubory |
| Styly | čisté CSS moduly | Vzhled vychází z ručně psaného CSS původní stránky; utilitní framework by ho jen zaobalil do cizího zápisu |
| Stav | Zustand | Drží jen dvě věci, které přežijí zavření stránky: volbu motivu a vlastní automaty HZA |
| API server | Node.js, Express | Jediný úkol je spustit proces a předat data, na to stačí pár desítek řádků |
| Projekty | C++17 a C++20 | Jazyk, ve kterém byly odevzdané; nic se nepřepisovalo |
| Obrázky | Python, standardní knihovna | Grafy i diagramy vznikají skriptem, ne ručně v editoru |
Fialové pozadí, tyrkysové lišty a bílé bloky se zaoblenými rohy pocházejí z původní statické stránky - ručně psaného HTML a CSS, které vzniklo v kurzu ITW (Tvorba webových stránek). Žádná šablona, žádný generátor.
Tahle stránka na ten vzhled navazuje, nenahrazuje ho. Statická verze zůstala jako závazná předloha: tmavý režim proto přepíná záměrně jen dvě věci - výplň bloků z bílé na černou a text z černé na bílou. Zbytek palety zůstává, jaký byl. Kdyby se přebarvovalo všechno, vznikl by druhý vzhled, který by se s tím prvním rozešel.