Výukový modul PřF MU

Webový optimalizační visualizér

Dokumentace pro provoz a nasazení aplikace.


1. O projektu a systémové požadavky

Aplikace běží v izolovaném virtuálním prostředí Debian 13 (XFCE) s optimalizačním výpočetním jádrem v jazyce Julia. Virtuální stroj je plně autonomní a po importu funguje offline bez nutnosti síťového připojení.

2. Varianta A: Rychlé spuštění z hotového obrazu (.ova)

Nejjednodušší cesta pro studenty a výuku. Na hostitelském počítači není potřeba instalovat jazyk Julia ani nastavovat žádné knihovny:

  1. Nainstalujte a spusťte VirtualBox.
  2. V horním menu zvolte Soubor → Importovat appliance... (klávesová zkratka Ctrl + I).
  3. Klepněte na ikonu žluté složky a vyberte stažený soubor Debian-OptVisualizer.ova.
  4. V souhrnném dialogu parametrů ponechte výchozí nastavení a klepněte na Dokončit (nebo Importovat). Rozbalení virtuálního disku trvá přibližně 1–3 minuty.
Výběr souboru OVA při importu appliance Potvrzení parametrů virtuálního stroje
  1. Po dokončení importu vyberte v levém seznamu stroj Debian-OptVisualizer a spusťte jej zeleným tlačítkem Spustit.
Spuštění vizualizéru

3. Práce s aplikací a ovládání

Virtuální stroj je nakonfigurován pro okamžitý start – systém se automaticky přihlásí přímo na pracovní plochu uživatele student bez dotazu na heslo.

Přizpůsobení obrazovky (Full Screen): Ve virtuálním stroji jsou nainstalovány Přídavky pro hosta (VirtualBox Guest Additions). Rozlišení plochy se automaticky přizpůsobuje tažení okna myší. Pro přepnutí do celoobrazovkového režimu stiskněte Pravý Ctrl + F.

První spuštění vizualizéru

Na ploše dvakrát klepněte na ikonu Optimization Visualizer.

Průběh načítání: Na ploše se zobrazí stavové okno s ukazatelem průběhu. Inicializace výpočetního backendu Julie a načtení matematických modulů v offline režimu trvá obvykle 30 až 60 sekund. Po dokončení se webový prohlížeč automaticky otevře sám na adrese http://localhost:8080. Během načítání neklikejte na ikonu opakovaně.
Spuštění aplikace s načítacím oknem Ukázka spuštěné aplikace v prohlížeči

Řešení problémů a restart aplikace

Pokud se numerický výpočet zacyklí nebo webové rozhraní přestane reagovat:

4. Ukončení práce

Po skončení práce virtuální stroj bezpečně vypněte kliknutím na tlačítko v pravém rohu lišty XFCE a volbou Vypnout (Shut Down).

5. Varianta B: Replikace prostředí a developing (pro správce a vývojáře)

Následující postup slouží k sestavení čistého systému Debian 13 od nuly.

Krok 5.1: Založení virtuálního stroje a instalace OS

Krok 5.2: Systémová práva a potřebné balíčky

Po prvním přihlášení otevřete terminál a povolte uživateli student oprávnění správce bez hesla:

su -
usermod -aG sudo student
echo "student ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/student-nopasswd
chmod 0440 /etc/sudoers.d/student-nopasswd
exit

Nainstalujte vývojové nástroje a grafické doplňky:

sudo apt update
sudo apt install -y build-essential dkms linux-headers-$(uname -r) git patchelf zenity curl firefox-esr

Krok 5.3: Instalace Guest Additions a vypnutí asistence

Vložte do virtuální mechaniky obraz přídavků (Zařízení → Vložit obraz CD s přídavky pro hosta...) a zkompilujte ovladače pro dynamické škálování obrazovky:

sudo mkdir -p /media/cdrom
sudo mount /dev/cdrom /media/cdrom
sudo sh /media/cdrom/VBoxLinuxAdditions.run
sudo umount /media/cdrom

Odstraňte čtečku obrazovky (Orca) a hlasový syntezátor pro tichý chod systému:

sudo apt purge -y orca speech-dispatcher
xfconf-query -c xfce4-session -p /general/AssistiveTechnologies -s false 2>/dev/null

Krok 5.4: Konfigurace autologinu a zrychlení zavaděče

# Nastavení automatického přihlášení uživatele student
sudo groupadd -r autologin 2>/dev/null || true
sudo gpasswd -a student autologin
sudo sed -i 's/^#autologin-user=.*/autologin-user=student/' /etc/lightdm/lightdm.conf
sudo sed -i 's/^#autologin-user-timeout=.*/autologin-user-timeout=0/' /etc/lightdm/lightdm.conf

# Nulový odpočet zavaděče GRUB pro okamžitý start
sudo sed -i 's/^GRUB_TIMEOUT=.*/GRUB_TIMEOUT=0/' /etc/default/grub
sudo update-grub

Krok 5.5: Příprava prostředí Julia a optimalizačního repozitáře

# 1. Instalace oficiálního správce Juliaup
curl -fsSL https://install.julialang.org | sh -s -- --default-channel 1.10.2 -y
export PATH="$HOME/.juliaup/bin:$PATH"

# 2. Stažení repozitáře projektu
cd ~
git clone https://github.com/TomasHalmazna/optimization_visualizer.git
cd ~/optimization_visualizer/backend

# 3. Ošetření spustitelného zásobníku u starších C knihoven
patchelf --clear-execstack ~/.julia/juliaup/julia-1.10.2+0.x64.linux.gnu/lib/julia/libopenlibm.so 2>/dev/null || true

# 4. Předkompilace balíčků pro offline provoz
julia +1.10.2 --project=. -e 'using Pkg; Pkg.instantiate(); Pkg.precompile()'

Krok 5.6: Skripty a zástupci na ploše

Vytvořte spouštěcí skript ~/start_app.sh se stavovým oknem Zenity:

cat << 'EOF' > ~/start_app.sh
#!/bin/bash
export PATH="$HOME/.juliaup/bin:$HOME/.local/bin:$PATH"

if timeout 1 bash -c "/dev/null; then
    firefox http://localhost:8080 &
    exit 0
fi

notify-send "Optimization Visualizer" "Startuji backend Julie..." -i preferences-system

(
    echo "10" ; echo "# Inicializace prostředí..."
    cd /home/student/optimization_visualizer/backend
    
    if ! pgrep -f "server.jl" > /dev/null; then
        julia +1.10.2 --project=. server.jl > /home/student/server.log 2>&1 &
    fi

    echo "30" ; echo "# Načítání optimalizačních modulů..."
    
    SERVER_UP=0
    for i in {1..90}; do
        if timeout 1 bash -c "/dev/null; then
            SERVER_UP=1
            break
        fi
        PROGRESS=$(( 30 + (i * 65 / 90) ))
        echo "$PROGRESS"
        sleep 1
    done

    if [ $SERVER_UP -eq 1 ]; then
        echo "100" ; echo "# Otevírám aplikaci..."
        sleep 1
    else
        echo "# Server neodpovídá. Prohlédněte ~/server.log"
        sleep 3
        exit 1
    fi
) | zenity --progress --title="Optimization Visualizer" --text="Spouštění..." --percentage=0 --auto-close --no-cancel --width=400 2>/dev/null

if timeout 1 bash -c "/dev/null; then
    firefox http://localhost:8080 &
fi
EOF
chmod +x ~/start_app.sh

Vytvořte restartovací skript ~/restart_app.sh a zástupce na ploše:

cat << 'EOF' > ~/restart_app.sh
#!/bin/bash
pkill -f "server.jl"
sleep 2
/home/student/start_app.sh
EOF
chmod +x ~/restart_app.sh

# Vytvoření ikon na ploše
cat << 'EOF' > ~/Desktop/OptimizationVisualizer.desktop
[Desktop Entry]
Version=1.0
Type=Application
Name=Optimization Visualizer
Comment=Spustit optimalizační aplikaci
Exec=/home/student/start_app.sh
Icon=system-run
Terminal=false
StartupNotify=true
EOF

cat << 'EOF' > ~/Desktop/RestartVisualizer.desktop
[Desktop Entry]
Version=1.0
Type=Application
Name=Restart Visualizer
Comment=Restartovat aplikaci
Exec=/home/student/restart_app.sh
Icon=view-refresh
Terminal=false
StartupNotify=true
EOF

chmod +x ~/Desktop/*.desktop

Krok 5.7: Vyčištění prostředí XFCE a příprava na export

# 1. Nastavení pouze jedné pracovní plochy
xfconf-query -c xfwm4 -p /general/workspace_count -s 1

# 2. Skrytí výchozích systémových ikon na ploše (Koš, Domů, Disky)
xfconf-query -c xfce4-desktop -p /desktop-icons/file-icons/show-home -n -t bool -s false
xfconf-query -c xfce4-desktop -p /desktop-icons/file-icons/show-trash -n -t bool -s false
xfconf-query -c xfce4-desktop -p /desktop-icons/file-icons/show-filesystem -n -t bool -s false
xfconf-query -c xfce4-desktop -p /desktop-icons/file-icons/show-removable -n -t bool -s false

# 3. Vypnutí obrázkové tapety a nastavení čistého neutrálního pozadí
xfconf-query -c xfce4-desktop -p /backdrop/screen0/monitorVirtual1/workspace0/image-style -n -t int -s 0 2>/dev/null || true
xfconf-query -c xfce4-desktop -p /backdrop/screen0/monitor0/workspace0/image-style -n -t int -s 0 2>/dev/null || true

# 4. Vyčištění logů a vypnutí systému před exportem
pkill -f "server.jl"
rm -f ~/server.log
sudo poweroff

Po vypnutí virtuálního stroje odeberte v jeho nastavení ve VirtualBoxu síťový adaptér (Nastavení → Síť → odškrtnout Povolit síťový adaptér) a stroj vyexportujte přes Soubor → Exportovat appliance... (formát OVF 1.0 s generováním nových MAC adres).

Licence a právní ujednání

1. Výuková aplikace Optimization Visualizer: Projekt vznikl jako školní dílo ve smyslu § 60 zákona č. 121/2000 Sb. (autorský zákon) na Přírodovědecké fakultě Masarykovy univerzity. Autor poskytuje Masarykově univerzitě i veřejnosti právo na užití a šíření softwaru pod svobodnou licencí MIT License.

Autor aplikace: Mgr. Tomáš Halmazňa (Ústav matematiky a statistiky PřF MU)

Vedoucí diplomové práce: doc. Mgr. Petr Zemánek, Ph.D.

2. Výpočetní jazyk Julia: Jazyk a standardní knihovny jsou šířeny pod otevřenou licencí Julia MIT License (Copyright © 2009–2026 Julia contributors).

3. Operační systém Debian GNU/Linux: Základní operační systém a systémové komponenty jsou distribuovány v souladu s pravidly Debian Free Software Guidelines (DFSG).

4. Záruka a podpora: Software je poskytován „tak, jak je“ (AS IS), bez jakékoli výslovné nebo předpokládané záruky. Uživatelská podpora je zajišťována v rámci výuky příslušných optimalizačních předmětů na ÚMS PřF MU.

Projekt vznikl za finanční podpory v rámci projektu Specifického výzkumu v odborné, aplikované a učitelské matematice 2026 (SV matematika 2026), číslo projektu MUNI/A/1648/2025.