Educational Module SCI MUNI

Interactive Optimization Visualizer

Documentation for running and deploying the application.


1. About the Project and System Requirements

The application runs in an isolated Debian 13 (XFCE) virtual environment with a numerical optimization engine written in Julia. The virtual machine is completely self-contained and operates fully offline without requiring network connectivity.

2. Variant A: Quick Start via Virtual Appliance (.ova)

The recommended approach for students. No installation of Julia or configuration of mathematical libraries is required on the host system:

  1. Install and launch VirtualBox on your computer.
  2. From the top menu, select File → Import Appliance... (or press Ctrl + I).
  3. Click the folder icon and select the downloaded Debian-OptVisualizer.ova file.
  4. Keep the default settings in the summary dialog and click Finish (or Import). Disk extraction takes about 1–3 minutes.
Selecting the OVA file during appliance import Confirming virtual machine settings
  1. Once import is complete, select Debian-OptVisualizer from the list on the left and click the green Start button.
Launching the visualizer

3. Application Operation and Controls

The virtual machine boots immediately without bootloader delays and logs in automatically to the desktop as user student without requiring a password.

Screen Resolution (Full Screen): VirtualBox Guest Additions are pre-installed. The desktop resolution automatically adapts when resizing the window. To toggle full-screen mode, press Right Ctrl + F.

Launching the Visualizer

Double-click the Optimization Visualizer icon on the desktop.

Startup Progress: A progress dialog will appear on the desktop. Initializing the Julia backend and loading optimization modules in offline mode typically takes 30 to 60 seconds. Once ready, Firefox will automatically open at http://localhost:8080. Do not click the launcher repeatedly while loading.
Application starting with progress dialog Application running in the browser

Troubleshooting and Application Restart

If an optimization algorithm gets stuck or the user interface becomes unresponsive:

4. Shutting Down

When finished, shut down the virtual machine safely by clicking the button on the right end of the XFCE panel and selecting Shut Down.

5. Variant B: Environment Replication and Development (for Administrators and Developers)

This procedure describes how to build a clean Debian 13 system from scratch.

Step 5.1: Virtual Machine Setup and OS Installation

Step 5.2: Privileges and System Dependencies

Log in as student, open a terminal, and grant passwordless sudo privileges:

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

Install build tools, runtime packages, and desktop utilities:

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

Step 5.3: Guest Additions and Accessibility Removal

Insert the VirtualBox Guest Additions ISO (Devices → Insert Guest Additions CD image...) and compile the kernel drivers:

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

Purge the Orca screen reader and speech synthesizers to ensure silent operation:

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

Step 5.4: Autologin and Bootloader Optimization

# Configure automatic login for 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

# Set GRUB timeout to 0 for instant boot
sudo sed -i 's/^GRUB_TIMEOUT=.*/GRUB_TIMEOUT=0/' /etc/default/grub
sudo update-grub

Step 5.5: Julia Environment and Repository Setup

# 1. Install Juliaup package manager
curl -fsSL https://install.julialang.org | sh -s -- --default-channel 1.10.2 -y
export PATH="$HOME/.juliaup/bin:$PATH"

# 2. Clone the application repository
cd ~
git clone https://github.com/TomasHalmazna/optimization_visualizer.git
cd ~/optimization_visualizer/backend

# 3. Clear executable stack flag for older shared binaries
patchelf --clear-execstack ~/.julia/juliaup/julia-1.10.2+0.x64.linux.gnu/lib/julia/libopenlibm.so 2>/dev/null || true

# 4. Precompile packages for offline usage
julia +1.10.2 --project=. -e 'using Pkg; Pkg.instantiate(); Pkg.precompile()'

Step 5.6: Launch Scripts and Desktop Shortcuts

Create the startup script ~/start_app.sh with a Zenity progress indicator:

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" "Starting Julia backend..." -i preferences-system

(
    echo "10" ; echo "# Initializing environment..."
    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 "# Loading numerical modules..."
    
    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 "# Opening application..."
        sleep 1
    else
        echo "# Server failed to respond. Check ~/server.log"
        sleep 3
        exit 1
    fi
) | zenity --progress --title="Optimization Visualizer" --text="Starting..." --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

Create the restart script ~/restart_app.sh and desktop launchers:

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

cat << 'EOF' > ~/Desktop/OptimizationVisualizer.desktop
[Desktop Entry]
Version=1.0
Type=Application
Name=Optimization Visualizer
Comment=Launch optimization application
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=Restart optimization application
Exec=/home/student/restart_app.sh
Icon=view-refresh
Terminal=false
StartupNotify=true
EOF

chmod +x ~/Desktop/*.desktop

Step 5.7: Desktop Cleanup and Appliance Export

# 1. Limit workspaces to a single desktop
xfconf-query -c xfwm4 -p /general/workspace_count -s 1

# 2. Hide default system desktop icons (Trash, Home, Filesystem)
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. Disable desktop wallpaper image in favor of a neutral solid color
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. Clean up logs and shut down before export
pkill -f "server.jl"
rm -f ~/server.log
sudo poweroff

Once powered off, disable the virtual network adapter in VirtualBox settings (Settings → Network → uncheck Enable Network Adapter) and export the appliance via File → Export Appliance... (OVF 1.0 format with new MAC address generation).

License and Legal Terms

1. Optimization Visualizer Application: Created as a school work pursuant to Section 60 of Act No. 121/2000 Coll. (the Czech Copyright Act) at the Faculty of Science, Masaryk University. The author grants Masaryk University and the public the right to use and distribute the software under the open-source MIT License.

Author: Mgr. Tomáš Halmazňa (Department of Mathematics and Statistics, Faculty of Science, Masaryk University)

Thesis Supervisor: doc. Mgr. Petr Zemánek, Ph.D.

2. Julia Language Environment: Distributed under the open-source Julia MIT License (Copyright © 2009–2026 Julia contributors).

3. Debian GNU/Linux Operating System: The underlying system and its components are distributed in accordance with the Debian Free Software Guidelines (DFSG).

4. Warranty and Support: The software is provided "AS IS", without warranty of any kind, express or implied. User support is provided as part of teaching optimization courses at the Department of Mathematics and Statistics, SCI MUNI.

This project was supported by the Specific Research in Pure, Applied, and Pedagogical Mathematics 2026 (SV matematika 2026), project no. MUNI/A/1648/2025.