\section{Základní popis aplikace pro detekci požárů}
V této sekci jsou popsány základní parametry aplikace, implementované na základě zadání této práce. Dále se budeme věnovat obecnému popisu, šíření, instalaci a její struktuře. Funkce a parametry aplikace budou popsány v následující kapitole.
\subsection{Parametry a popis aplikace}
Tato aplikace byla vyvinuta v jazyce Visual C\#, ve vývojovém studiu Microsoft Visual Studio 2017. Výhodou tohoto nástroje při implementaci byla možnost využití měření paměti a vytížení procesoru již v průběhu implementace. Tento software byl vyvinut jako desktopová aplikace pro operační systém Windows Vista a vyšší, a to z důvodu využití grafického subsystému WPF. Ten byl implementován v .NET Frameworku 3.0 a vyšším, a tím právě disponují tyto operační systémy. Konkrétně byl využit .NET Framework 4.5.2, který je tedy i prerekvizitou tohoto programu. Aplikace byla navržena dle návrhového vzoru MVVM, a~to díky možnosti využít grafickou akceleraci a také pro umožnění využití vícevláknového přístupu, neboli využití více jader procesoru. Dalším důvodem byl předpoklad růstu aplikace, tedy byl při porovnání s modelem MVC model MVVM vyhodnocen jako přehlednější z~hlediska modulárnosti a přehledu implementovaného kódu.

Z pohledu parametrů pro aplikaci, je předpokladem, že aplikace bude použita na 64 bitovém systému Windows, tedy je i pro tento systém sestavena. Důvodem byla paměťová náročnost aplikace z pohledu ukládání snímků do paměti, a tedy nutnost uvolnění co největšího množství paměti systémem. Z pohledu pevného disku je využitý 128GB systém dostačující pro samotnou aplikaci, která po instalaci dosahuje velikosti přibližně 40MB. Z pohledu náročnosti na výkon procesoru byla aplikace v průběhu běhu sledována a její vytěžování bylo určeno průměrně na 30\% rovnoměrného vytížení všech jader.

\subsection{Instalace a šíření aplikace}\label{sec:instalace}

Předpokladem aplikace je její předinstalace na průmyslové PC Vecow, tedy její šíření je svázáno s tímto zařízením. Pro případné nově implementované funkce či opravy je možné stáhnout instalační soubor z webových stránek. Instalační soubor je vytvořen ve formátu ".exe", ve kterém jsou obsaženy kromě vlastní aplikace i prerekvizity, a to hlavně pro případ prvotní instalace, nebo potřeby reinstalace celého zařízení. Další výhodou tohoto souboru je, že není pro instalaci či update třeba internetové připojení zařízení, což u průmyslových počítačů instalovaných v provozu nebývá časté, a tedy lze provést update spuštěním souboru například z flash disku. Tento instalační soubor je obecně nazýván Bootstraper a jeho součásti lze rozdělit do dvou skupin. Obecně je jeho součástí samotný program a jeho prerekvizity, tedy součásti, na kterých je správný běh vlastní aplikace závislý. V tomto případě je jedinou prerekvizitou Microsoft .NET Framework 4.5.2 a tedy v tomto případě instalátor před instalací vlastní aplikace ověřuje, zda je nainstalován příslušný framework a zajišťuje jeho případnou doinstalaci. V případě potřeby lze využít i možnosti ověření architektury vlastního zařízení a~dle toho nainstalovat buď 32-bitovou nebo 64-bitovou verzi dané aplikace. V našem případě tato možnost využita nebyla, jelikož předpokladem celé aplikace je 64-bitová architektura a~operační systém.

Instalátor vlastní aplikace byl vytvořen jako "msi" instalační soubor a druhý pomocný soubor s příponou ".cab", který slouží pro vykreslení grafiky při instalaci. Pro jeho vytvoření i~ následného Bootstrapperu byla využita sada nástrojů WiX \cite{wix} pro vývojové prostředí Microsoft Visual Studio. WiX je zkratkou pro "Windows Installer XML" a jedná se o volně šiřitelný plugin pro vytváření právě těchto instalačních souborů. Jeho výhodou je možnost upravit instalátor dle potřeb aplikace, například úpravou vizualizace či vložením licenčních podmínek, a zároveň tento instalátor poté využívá službu Windows Installer.


\subsubsection{Instalace aplikace}
Instalace aplikace za využití Boostrapperu je rozdělena do sady navazujících dialogových oken, které byly vytvořeny úpravou dostupné standardní sady "WixUI\_InstallDir". Po spuštění instalátoru je uživatel informován o následujících krocích, kterými jsou ověření a případná instalace prerekvizit a následná instalace samotné aplikace. Po potvrzení dojde k ověření potřebných nástrojů za pomocí ověření registrů. Pokud je třeba instalace nebo update prerekvizit, dojde ke spuštění zabaleného externího instalátoru (viz obrázek č. \ref{fig:instalace}). Po instalaci prerekvizit je otevřeno okno instalátoru vlastní aplikace, kde jsou v prvním dialogu uvedeny obecné informace o instalaci. Následují licenční podmínky vlastnictví a šíření aplikace společnosti Workswell s.r.o., po kterých při potvrzení následuje výběr kořenového adresáře pro instalaci a možnost vytvoření zástupce na ploše a v menu Start. Posledním dialogem před samotnou instalací je dialog s možností návratu a změny předchozích zadání a potvrzením k~instalaci. Samotná instalace slouží k vytvoření instalačních a potřebných složek pro spuštění, rozbalení souborů a k zápisu do registrů a vytvoření zástupců. O jejím průběhu je uživatel informován ukazatelem průběhu s informačním textem a je zakončen informací o~dokončení instalace a jejím potvrzením.

\begin{figure} [h]
	\centering
	\includegraphics[width=0.7\linewidth]{fig/Install.png}
	\caption{Náhled instalátoru aplikace}
	\label{fig:instalace}
\end{figure}

\subsection{Struktura aplikace a zdrojového kódu} \label{sec:struktura}
V této kapitole je popsána struktura aplikace z pohledu spuštění, rozdělení grafického rozhraní na základě WPF a třídní hierarchie na základě návrhového vzoru MVVM. Jak již bylo uvedeno pro implementaci aplikace, bylo využito vývojové prostředí Microsoft Visual Studio 2017, včetně jeho nástrojů pro debuggování, sledování výkonu a správy projektu.

\subsubsection{Struktura spuštění}
Klíčovým souborem, a zároveň objektem pro spuštění aplikace, je "App", jenž je potomkem modelu WPF aplikace ("Application"). V jeho přidruženém souboru s kódem v pozadí "App.cs"~je definován hlavní aplikační model a zároveň vytvořena instance objektu "ApplicationBase". Při vytvoření této instance objektu jsou ověřeny a načteny jazykové mutace programu, dále ověřeny a vytvořeny struktury složek potřebné pro následný běh programu a~také inicializována ikona celé aplikace. V dřívějších verzích se v této instanci dále řešilo taktéž licencování aplikace jako celku, které bylo poté reimplementováno. V neposlední řadě je zde vytvořena instance hlavního okna aplikace a taktéž jsou v následujícím sledu vytvořeny klíčové objekty hlavního objektu "ApplicationViewModelu"~aplikace, které jsou jeho potomky.

\subsubsection{Struktura grafického rozhraní}
Jak již bylo uvedeno, grafická část aplikace byla implementována s pomocí WPF. Pro implementaci některých grafických prvků bylo využito sady knihoven Telerik \cite{telerik}, které jsou "nadstavbou"~WPF komponent. Respektive upravují jejich funkcionalitu a vizuální podobu.
Grafické rozhraní aplikace lze rozložit primárně na hlavní okno, ve kterém jsou využité panely. Tyto panely mají dokovací funkci s možností uložení a resetování jejich rozložení. Díky této funkci si může uživatel přizpůsobit aplikaci dle svých potřeb, a to hlavně z pohledu přehlednosti. Výhodou tohoto rozhraní z pohledu implementace je možnost vytvoření vlastních grafických objektů, se kterými lze poté pracovat stejně jako s objekty knihovními, a které jsou poté vkládány do jednotlivých panelů. Kombinací těchto vlastností bylo docíleno modifikovatelného, přehledného a uživatelsky přívětivého rozhraní pro koncové zákazníky a~uživatele aplikace.

\subsubsection{Hierarchie zdrojového kódu}
Při implementaci aplikace bylo cíleno na udržení přehlednosti a modulárnosti implementace. Z pohledu přehlednosti se jedná hlavně o třídění souvisejících tříd do vhodně pojmenovaných složek, a to taktéž i kvůli vlastnosti vývojového prostředí, které na základě pojmenování těchto rozdělujících složek a jejich zanoření vytváří tzv. namespace, neboli obal pro určitou část zdrojových kódů. Jelikož úkolem pro implementaci této aplikace bylo využití návrhového vzoru MVVM, bylo logickým krokem vytvoření pojmenování složek na základě konceptu tohoto modelu. Jmenovitě se tedy jedná o složky s názvy Models, View, ViewModels a Utils jejichž členění můžeme vidět na obrázku č. \ref{fig:namespaces}. V projektu ještě můžeme nalézt složku Resources, která slouží pro uchování grafických objektů, jako jsou například miniatury loga, statické obrázky, či vlastní grafika ovládacích prvků. Samozřejmé je, že tyto jmenované složky jsou kořenové, a že dále dochází k dalšímu větvení na základě logických souvislostí mezi obsaženými prvky. Podrobnější mapa tříd je uvedena v příloze \ref*{apendix:RozdeleniTrid}. Pro dosažení modulárnosti programu byla jednak snaha o oddělení spolu nesouvisejících prvků kódu, jednak také o co největší možné využití kódu společného. 

\begin{figure} [h]
	\centering
	\includegraphics[width=0.9\linewidth]{fig/namespaces.pdf}
	\caption{Členění aplikace do tzv. "namespace"}
	\label{fig:namespaces}
\end{figure}


