% Definice stylu a použitých balíčků
\documentclass[12pt,a4paper,final]{article}
\usepackage[latin2]{inputenc}\usepackage{czech}
\usepackage{graphicx}
\usepackage{url}\usepackage[colorlinks,plainpages=false,urlcolor=blue]{hyperref}
\begin{document}
% Titulní stránka
\begin{titlepage}
\begin{figure}[h]\includegraphics*{fit-logo.jpg} \end{figure}\vspace*{1cm}
\begin{sffamily}\begin{center}\begin{Huge}\textbf{Emulátor psaní SMS na mobilním telefonu}\\[1cm](projekt do předmětu ITU)\\[3cm]\end{Huge}\today\end{center}
\vfill\begin{large}Kamil Dudka, \href{mailto:xdudka00@stud.fit.vutbr.cz}{xdudka00@stud.fit.vutbr.cz}\\Fakulta informačních technologií\\Vysoké Učení Technické v Brně\end{large}
\vspace*{1cm}\end{sffamily}
\end{titlepage}
% Obsah
%\begin{titlepage}\tableofcontents\end{titlepage}
\section{Zadání}
Implementujte na PC program pro simulaci psaní textu napodobující mobilní telefon na PC pomocí T9 a \uv{standardním způsobem} (slovník T9 nemusí být příliš rozsáhlý). Proveďte experiment s psaním SMS a vyhodnoťte časovou náročnost a množství chyb u několika osob u obou způsobů zápisu. Programovací jazyk libovolný. Pozn. Psaní SMS musí být možné přes klávesnici PC, nejen myší.
\section{Použitý Toolkit}
Jako grafický toolkit jsem použil \href{http://www.trolltech.com/products/qt}{Trolltech Qt}. Jedná se o multiplatformní (nejen) grafický toolkit založený na C++. Aplikace využívajíci výhradně služby toolkitu je možné přeložit na různých platformách (MS Windows, Linux/X11, MAC). Grafické rozhraní aplikace vypadá na všech platformách nativně -- to znamená, že na Windows vypadají aplikace jako běžné aplikace psané pro Windows, na Linuxu vypadají jako aplikace psané přímo pro Linux\footnote{Uživateli velmi oblíbené desktopové prostředí KDE je také založeno na Trolltech Qt. Tím je do jisté míry zaručena budoucnost tohoto toolkitu.}, atd.
Firma Trolltech používá tzv. \textit{duální licenční politiku}. Qt je distribuováno pod komerční i open-source licencí. Open-source licence je omezena pro použití pouze v open-source aplikacích. Aplikace \textbf{emulT9} je také open-source, nic tedy nebránilo použití \textit{Qt Open Source Edition}. Zvolil jsem verzi Qt 4.1.4, což byla v době vzniku aplikace poslední stabilní verze tohoto toolkitu. Pro všechny novější 4.x verze by měla být zajištěna zpětná kompatibilita.
Hlavními stavebními kameny aplikací založených na Qt, jsou \textbf{signály} a \textbf{sloty}, které tvoří univerzální rozhraní (nejen) grafických objektů. Signály a sloty se dají spojovat a odpojovat za běhu aplikace, což se může někdy hodit. Aby bylo možné tohle všechno v jazyku C++ zajistit, používá toolkit vlastní preprocesor před spuštěním C++ překladače. Také je možné použít platformově nezávislý překladač zdrojů (ikony, obrázky, ...). K automatickému provedení všech potřebných operací během sestavování aplikace definuje toolkit vlastní formát platformově nezávislého Makefilu.
Filozofii tohoto toolkitu byl přizpůsoben objektový model a celá koncepce aplikace.
\section{Objektový model}
Objektový model aplikace je nastíněn na obr. \ref{class_EmulT9}. Třída \texttt{EmulT9} zastupuje aplikaci jako celek. Jejím hlavím úkolem je propojení uživatelského rozhraní s aplikační logikou.
Viditelné prvky uživatelského rozhraní jsou definovány v třídě \texttt{Ui::MainWindow}. Zdrojový kód této třídy je automaticky generován na základě XML šablony vytvořené Qt Designerem.
Aplikační logika je zapouzdřena v třídě \texttt{Engine}. Tato třída je vytvořena podle návrhového vzoru \textit{Facade} z cílem vytvoření jednoduchého rozhraní zpřístupňující fukce všech objektů, ze kterých je třída složena.
\begin{figure}[h]\begin{center}\includegraphics[scale=0.5]{class_EmulT9.png}\end{center}\caption{Zjednodušený UML diagram třídy EmulT9}\label{class_EmulT9}\end{figure}
Kompozice třídy \texttt{Engine} z dílčích objektů je znázorněna na obr. \ref{class_Engine}. Kromě samotného \uv{typeru}, je tu také třída \texttt{StopWatch}, která má za úkol vykreslovat statistiky během psaní. Konstantou \texttt{iPeriod} v této třídě je možné nastavit frekvenci vykreslování statistik. Třída \texttt{KeyScan} se stará o enumeraci stisknuté klávesy \uv{mobilního telefonu} a vyslání signálu s odpovídající hodnotou enumerátoru.
\begin{figure}[h]\begin{center}\includegraphics[scale=0.5]{class_Engine.png}\end{center}\caption{Zjednodušený UML diagram třídy Engine (návrhový vzor \textit{Facade})}\label{class_Engine}\end{figure}
V zadání je požadována simulace psaní SMS, jak se slovníkem T9, tak bez něj. Přímo se tedy nabízí udělat abstraktní třídu zastřešující oba způsoby. Touto třídou je třída \texttt{Typer}, z ní jsou pak odvozeny třídy \texttt{TyperStd} a \texttt{TyperT9}.
Během zapínání/vypínání T9 je potřeba udržovat kontext, aby bylo možné prokládat text napsaný pomocí T9 s textem \uv{vyťukaným ručně}. Kontextem je míněno nastavení malá/velká písmena, aktuální obsah slovníku T9, atd. O přepínání T9 a udržení kontextu se stará třída \texttt{TyperWrapper} znázorněná na obr. \ref{class_TyperWrapper}.
\begin{figure}[h]\begin{center}\includegraphics[scale=0.5]{class_TyperWrapper.png}\end{center}\caption{Zjednodušený UML diagram třídy TyperWrapper}\label{class_TyperWrapper}\end{figure}
\section{Sestavení a instalace}
Pro sestavení aplikace ze zdrojových je potřeba mít nainstalované Trolltech Qt 4.1.4+ (Open Source Edition) a kompatibilní C++ překladač.
Na běžných linuxových distribucích je možné obě věci nainstalovat pomocí distribučních balíčků. Často jsou však již nainstalované po základní instalaci distribuce.
Na MS Windows je potřeba stáhnout instalační program ze stránek \href{http://www.trolltech.com/products/qt}{Trolltech Qt} a nainstalovat. Instalace vám umožní automaticky stáhnout a nainstalovat potřebnou verzi MinGW, obsahující GNU překladač a GNU Makefile.
Zde je ukázka sestavení aplikace na Linuxu:
\begin{verbatim}
~$ tar xfz emulT9.tar.gz
~$ cd emulT9
~/emulT9$ qmake
~/emulT9$ make
\end{verbatim}
Stačí tedy rozbalit archiv a spustit překlad. Příkaz \texttt{qmake} vytvoří na základě platformově nezávislého Makefilu (\texttt{emulT9.pro}) platformově závislý Makefile. Příkaz \texttt{make} pak spustí automatický překlad a sestavení aplikace.
Aplikaci emulT9 není potřeba nijak instalovat a kromě toolkitu nemá žádné další závislosti.
Jako slovník se používá soubor \texttt{emulT9.dict} v aktuálním adresáři, pokud existuje. Vzorový slovník (založený na volně šiřitelném Myspell slovníku) je součástí archivu. Slovník můžete vyměnit za svůj vlastní slovník\footnote{Formát slovníku je čistě textový, jednotlivá slova jsou oddělena bílými znaky}. Můžete také spojit slovní zásobu z více slovníků -- stačí napsat jména jednotlivých textových souborů jako parametry při spouštění aplikace.
\section{Návod k použití}
Uživatelské rozhraní aplikace je velice jednoduché a intuitivní.
\begin{figure}[h]\begin{center}\includegraphics[scale=0.5]{snapshot.png}\end{center}\caption{Okno aplikace běžící na X11}\label{screenshot}\end{figure}
Kromě emulovaného displeje a emulované klávesnice mobilního telefonu je tu několik ovládacích prvků navíc, které se nám budou hodit.
Pod displejem se zobrazují základní statistické údaje. Údaj \textit{Hits/min} udává rychlost psaní na emulované klávesnici. Započítáný jsou přitom všechny úhozy na klávesnici, včetně tlačítek pro navigaci kursoru a mazání. Údaj \textit{Letters/min} udává skutečnou rychlost psaní textové zprávy. Tentokrát se berou v úvahu pouze skutečně viditelné znaky na displeji. Vpravo nahoře se zobrazuje uplynutý čas během psaní.
K spuštění/zastavení statistik slouží tlačítko \textit{Start/Pause}. Při zahájení psaní se statistiky spustí automaticky. Při kliknutí na jakýkoliv jiný ovládací prvek než na klávesnici, nebo při opuštění okna aplikace, se měření statistik automaticky zastaví. Tlačítko \textit{Reset} smaže jak statistiky, tak i psaný text a můžete provést experiment znova.
Dále jsou k dispozici tři zaškrtávací políčka, které ovlivňují chování simulátoru. Zaškrtávací políčko \textit{T9} zapíná/vypíná slovník T9. Bloky textu psané se slovníkem a bez něj se mohou prolínat, statistiky pak budou poskytovat souhrnné údaje.
V režimu bez T9 se aktivuje zaškrtávací políčko \textit{Timer}, které zapíná časovač. Pokud píšeme za sebou dvě písmena stejnou klávesou, musíme počkat nějakou dobu, než kursor \uv{odskočí}. Tato doba se dá upravit posuvníkem, vedle zaškrtávacího políčka. Některé mobilní telefony\footnote{např. můj dřívější telefon Motorola T2288}, tuto vlastnost nemají. Chceme-li tuto skutečnost zohlednit, můžeme časovač vypnout.
Poslední zaškrtávací políčko, \textit{PC Keyboard}, přepíná rozložení emulované klávesnice mobilního telefonu. Simulátor je možné ovládat nejen pomocí myši, ale také pomocí klávesnice. Pokud používáte numerickou klávesnici vašeho PC\footnote{Uživatelé NB jsou bohužel trochu více vzdálení realitě, tj. klávesnici mobilního telefonu}, asi vám \uv{telefonní} rozložení tlačítek nevyhovuje. Zaškrtnutím tohoto políčka přepnete rozložení tak, aby odpovídalo rozložení PC klávesnice. Samozřejmě se vždy nastaví správné klávesové zkratky.
Samotnou klávesnici mobilního telefonu jistě každý zná. Funkce třech spodních tlačítek se na různých přístrojích liší. Já jsem se inspiroval mým současným telefonem. Levé dolní tlačítko přepíná malá/velká písmena, prostřední volí mezi různými variantami slov v řežimu T9 a tlačítko vpravo dole funguje jako mezerník.
Při změně okna se odpovídajícím způsobem přizpůsobuje pozicování ovládacích prvků\footnote{Ikdyž to zní jako samozřejmost, tak většina systémových dialogů MS Windows používá absolutní pozicování a neumožňuje měnit rozměry okna.}.
\section{Závěr}
Výsledky měření ukázaly, že efektivita psaní SMS pomocí T9 silně závisí na použitém slovníku. Pokud bychom z T9 chtěli vytěžit maximum, vyplatilo by se vybírat slovník individuálně podle tématiky psaného textu. Pro ideální slovník se počet stisků klávesnice blíží počtu napsaných znaků. Efektivita slovníku je bohužel tím nižší, čím vyšší je slovní zásoba, kterou používáme.
Některým osobám naopak T9 nevyhovuje vůbec. Pokud je někdo zvyklý na \uv{klasický způsob} psaní sms, napíše takto zprávu rychleji. Bez ohledu na způsob psaní je však rychlost dána hlavně pravidelným tréninkem.
% Konec dokumentu
\end{document}