Přednačítání dat o rozvrhu na pozadí, detekce kolizí

Na seznam témat a kapitol (obsah)Nadřízená kapitola

V okamžiku, kdy vyhledáte a dáte zobrazit nějaký rozvrh, se rychle načtou a zobrazí rozvrhové akce. Jenže pro další funkce programu je to málo — k právě načtenému rozvrhu je potřeba z databáze dále načíst mnoho dalších informací (buď jen kvůli tomu, že chceme tyto informace uživateli ukázat či změnit, ale pak především také kvůli tomu, že chceme uživateli za běhu ukazovat možné kolize).

Ke každé rozvrhové akci právě zobrazeného rozvrhu je potřeba dále načíst z databáze:

  • Seznamy dalších vyučujících akce. Každá rozvrhová akce může mít i další vyučující kromě toho hlavního

  • Seznamy kroužků akce. Každá rozvrhová akce může patřit do neomezeného (a často velkého) množství kroužků

  • Seznamy studijních plánů předmětu. Každý předmět může patřit do libovolného množství studijních plánů v daném období

  • Zakázané a povolené akce. Každá rozvrhová akce může mít přiřazeno několik zakázaných/povolených akcí

  • Všechny položky časoprostoru týkající se místnosti akce. Teď začíná legrace — pro účely detekce kolizí časoprostoru je potřeba načíst všechny události, které se v dané místnosti během celého zvoleného období dějí.

  • Rozvrhy všech vyučujících, kteří učí rozvrhovou akci. Legrace pokračuje — pro účely detekce kolizí v rozvrzích učitelů je samozřejmě potřeba tyto rozvrhy znát — proto musí aplikace udržovat rozvrhy všech učitelů, kteří jsou u akcí přiřazeni.

  • Rozvrhy všech kroužků rozvrhové akce. Obdobně jako u učitelů je třeba udržovat rozvrhy všech kroužků rozvrhové akce.

  • Rozvrhy všech plánů předmětu rozvrhové akce. Nejkomplikovanější databázové dotazy — je potřeba udržovat nějak rozumně (tj. pouze to, co je skutečně vzhledem k nastavení kolizí potřeba) rozvrhy všech studijních plánů předmětu.

  • Počty narozvrhovaných akcí všech předmětů v rozvrhu. Aby bylo možnost kontrolovat, zda jsou u daného předmětu narozvrhovány všechny akce, které mají být, je potřeba vždy pro každý předmět načíst počty akcí, které jsou v danou chvíli narozvrhovány.

  • Preferované časy všech vyučujících, kteří učí rozvrhovou akci. Pro účely detekce kolizí s preferovanými časy učitelů je samozřejmě potřeba tyto časy znát — proto musí aplikace udržovat preferované časy všech učitelů, kteří jsou u akcí přiřazeni.

  • Preferovaná místa výuky všech předmětů/rozvrhových akcí rozvrhu. Aby mohla aplikace kontrolovat, zda je akce vyučována v místnosti, která souhlasí s doporučením učitele, je potřeba načíst i tyto informace.

Jak je vidět, všechno tohle se musí načíst poté, co si jednoduše zobrazíte nějaký rozvrh. Protože toto načítání může trvat i mnoho vteřin (pro komplikované nastavení kolizí plánů i desítky vteřin), umí aplikace provádět mnoho operací na pozadí, tj. uživatel na to nemusí čekat. To, že aplikace provádí nějaké operace na pozadí je označeno červeným nápisem v pravém dolním rohu aplikace: Pracuji….

Respektive: uživatel nemusí čekat na načtení těchto informací až do okamžiku, kdy chce provést nějakou operaci, která již plně načtené informace potřebuje! Například když chce zobrazit kontextové menu akce či chce začít akci přesouvat a ještě všechny potřebné informace nejsou načtené, musí chvíli vydržet, než se akce provede (menu otevře, při přesouvání se zobrazí prostory s kolizemi) — čeká se na donačtení potřebných informací.

Program pracuje na pozadí

Obrázek 702. Program pracuje na pozadí. 

Všechny zmíněné informace, seznamy, rozvrhy atd. si aplikace samozřejmě ukládá do své vyrovnávací paměti, takže při příštím načtení podobného rozvrhu je již nemusí načítat z databáze všechny. Tyto dynamické informace udržuje aplikace nejvýše 20 minut, pak je aktualizuje stejně (aby nebyly příliš zastaralé). Proto může být poznat, že ze začátku práce trvá načítání informací déle než později, ale zároveň se i může stát, že se aplikace na chvíli zmrazí i později — informace jsou již staré a je nutno je okamžitě (jsou potřeba pro uživatele — třeba při zobrazení menu) obnovit z databáze.

Stejným způsobem funguje i označování místností, učitelů, kroužků a dalších entit v různých místech programu barvičkami podle případné kolize, která by nastala — tyto kolize jsou také počítány na pozadí a teprve až poté, co jsou načtena data z databáze. Jejich zobrazení může trochu trvat.