\documentclass[a4paper, 11pt]{scrreprt} \usepackage[utf8]{inputenc} \usepackage[german]{babel} \usepackage[T1]{fontenc} \usepackage{amsmath} \usepackage{amsfonts} \usepackage{amssymb} \usepackage{graphicx} \usepackage{lmodern} \usepackage{enumitem} \usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm]{geometry} \PassOptionsToPackage{hyphens}{url} \usepackage{hyperref} \usepackage{longtable} \usepackage{subcaption} \usepackage{scrlayer-scrpage} \usepackage{pdfpages} \usepackage{verbatim} \usepackage{ifsym} %Figures \usepackage{float} \usepackage[export]{adjustbox} \usepackage{wrapfig} \newcommand*{\source}[1]{\par\raggedleft\footnotesize Quelle:~#1} %source command fuer bildunterschriften % Code \usepackage{listings} \usepackage{xcolor} \definecolor{dkgreen}{rgb}{0,0.6,0} \definecolor{gray}{rgb}{0.5,0.5,0.5} \definecolor{mauve}{rgb}{0.58,0,0.82} \lstset{literate=% {Ö}{{\"O}}1 {Ä}{{\"A}}1 {Ü}{{\"U}}1 {ß}{{\ss}}1 {ü}{{\"u}}1 {ä}{{\"a}}1 {ö}{{\"o}}1 } \lstset{ frame=tblr, frameround=tttt, aboveskip=3mm, belowskip=3mm, showstringspaces=false, columns=flexible, basicstyle={\small\ttfamily}, numbers=none, numberstyle=\tiny\color{gray}, keywordstyle=\color{blue}, commentstyle=\color{dkgreen}, stringstyle=\color{mauve}, breaklines=true, breakatwhitespace=true, tabsize=3, xleftmargin=1.0ex, xrightmargin=1.0ex } \lstdefinelanguage{docker}{ keywords={FROM, RUN, COPY, ADD, ENTRYPOINT, CMD, ENV, ARG, WORKDIR, EXPOSE, LABEL, USER, VOLUME, STOPSIGNAL, ONBUILD, MAINTAINER}, keywordstyle=\color{blue}\bfseries, identifierstyle=\color{black}, sensitive=false, comment=[l]{\#}, commentstyle=\color{purple}\ttfamily, stringstyle=\color{red}\ttfamily, morestring=[b]', morestring=[b]", } \lstdefinelanguage{docker-compose}{ keywords={VERSION, SERVICES, CONTAINER\_NAME, BUILD, CONTEXT, PORTS, DEPENDS\_ON, RESTART, VOLUMES, ENVIRONMENT}, keywordstyle=\color{blue}\bfseries, identifierstyle=\color{black}, sensitive=false, comment=[l]{\#}, commentstyle=\color{purple}\ttfamily, stringstyle=\color{red}\ttfamily, morestring=[b]', morestring=[b]", } \lstdefinelanguage{Kotlin}{ comment=[l]{//}, commentstyle={\color{gray}\ttfamily}, emph={delegate, filter, first, firstOrNull, forEach, lazy, map, mapNotNull, println, return@}, emphstyle={\color{mauve}}, identifierstyle=\color{black}, keywords={abstract, actual, as, as?, break, by, class, companion, continue, data, do, dynamic, else, enum, expect, false, final, for, fun, get, if, import, in, interface, internal, is, null, object, override, package, private, public, return, set, super, suspend, this, throw, true, try, typealias, val, var, vararg, when, where, while}, keywordstyle={\color{blue}\bfseries}, morecomment=[s]{/*}{*/}, morestring=[b]", morestring=[s]{"""*}{*"""}, ndkeywords={@Deprecated, @JvmField, @JvmName, @JvmOverloads, @JvmStatic, @JvmSynthetic, Array, Byte, Double, Float, Int, Integer, Iterable, Long, Runnable, Short, String}, ndkeywordstyle={\color{orange}\bfseries}, sensitive=true, stringstyle={\color{dkgreen}\ttfamily}, } \colorlet{punct}{red!60!black} \definecolor{delim}{RGB}{20,105,176} \colorlet{numb}{magenta!60!black} \lstdefinelanguage{json}{ basicstyle=\normalfont\ttfamily, stepnumber=1, numbersep=8pt, showstringspaces=false, breaklines=true, literate= *{0}{{{\color{numb}0}}}{1} {1}{{{\color{numb}1}}}{1} {2}{{{\color{numb}2}}}{1} {3}{{{\color{numb}3}}}{1} {4}{{{\color{numb}4}}}{1} {5}{{{\color{numb}5}}}{1} {6}{{{\color{numb}6}}}{1} {7}{{{\color{numb}7}}}{1} {8}{{{\color{numb}8}}}{1} {9}{{{\color{numb}9}}}{1} {:}{{{\color{punct}{:}}}}{1} {,}{{{\color{punct}{,}}}}{1} {\{}{{{\color{delim}{\{}}}}{1} {\}}{{{\color{delim}{\}}}}}{1} {[}{{{\color{delim}{[}}}}{1} {]}{{{\color{delim}{]}}}}{1}, } \lstdefinelanguage{JavaScript}{ keywords={typeof, new, true, false, catch, function, return, null, catch, switch, var, if, in, while, do, else, case, break}, keywordstyle=\color{blue}\bfseries, ndkeywords={class, export, boolean, throw, implements, import, this}, ndkeywordstyle=\color{darkgray}\bfseries, identifierstyle=\color{black}, sensitive=false, comment=[l]{//}, morecomment=[s]{/*}{*/}, commentstyle=\color{purple}\ttfamily, stringstyle=\color{red}\ttfamily, morestring=[b]', morestring=[b]" } \usepackage{setspace} \setstretch{1.2} %Zeilenabstand \setlength\parindent{0pt} %keine Paragrapheneinrueckung %Schriftart Arial (kommt von Linux dort heisst sie Helvetica) \usepackage{helvet} \renewcommand*{\familydefault}{\sfdefault} %Anfuehrungszeichen \usepackage[autostyle=true,german=quotes]{csquotes} \MakeOuterQuote{"} %Todos \usepackage{todonotes} %\missingfigure[figwidth=6cm]{Testing a long text string} %Tiefe des Inhaltsverzeichnisses \setcounter{tocdepth}{1} % Metadaten \author{Simon Kellner, Marcel Schwarz, Tobias Wieck, Tim Zieger} \title{Ubiquitous Computing \\ Projektarbeit \\ GeoTime} \begin{document} \include{parts/titlepage} \tableofcontents \listoffigures \lstlistoflistings \include{parts/einleitung} \include{parts/projektplanung} \include{parts/entwicklungsumgebung} \include{parts/backend} \include{parts/frontend} \include{parts/android} \chapter{Vollständiger Application Stack} \begin{figure}[H] \centering \includegraphics[width=0.9\linewidth]{img/ApplicationStack} \caption{Application Stack} \end{figure} Das Deployment von Geotime ist in drei große Schichten aufgeteilt. Zunächst wäre hier die Backend Schicht, die Schicht der Datenhaltung und der API. Dieser Teil der Anwendung braucht am meisten Schutz, da er der wichtigste ist und dort alle Daten gespeichert werden. Der Zugriff auf die Datenbank ist nur auf das Backend beschränkt. Um nun die Applikation zu Nutzen gibt es zwei Möglichkeiten: Eine Android App oder ein Webbrowser.\\ Die Android App implementiert die View Schicht selbst und fragt nur für Daten den Backend-Dienst an. Diese Anfragen gehen zunächst an den Server, der die App hostet und werden dann von dem darauf laufenden Docker Deamon an den entsprechenden Container weitergeleitet.\\ Beim Zugriff über den Webbrowser funktioniert die Kommunikation geringfügig anders. Zunächst wird vom Client der nginx Container nach dem statischen Teil der Website gefragt, dieser lädt dann über ähnliche Anfragen wie in der Android App die Daten vom Backend. Das global gesprochene Protokoll ist hierbei immer HTTP. \chapter{Projektjournal} \chapter{Projektfazit und Ausblick} Bei dem Projekt im Rahmen von Ubiquitous/Pervasive Computing konnten wir Bekanntes anwenden und Neues lernen. Wir alle konnten uns gut einbringen und zusammen auf unser gemeinsames Ziel hinarbeiten. Im Rückblick auf die vergangenen 5 Sprints lässt sich sagen, dass diese erfolgreich verlaufen sind. Die Verteilung der Aufgaben war gleichmäßig und funktionierte reibungslos. Die Idee des Projekts konnte vollständig umgesetzt werden, zudem konnten Anfangs nicht geplante Features umgesetzt werden. Hierzu zählen z.B.: Tagesübergreifende Time Records. Wir alle sind mit dem Ergebnis unserer Arbeit zufrieden und können das Projekt als erfolgreich bezeichnen.\\ Ebenso sehen wir ein großes Potential in der Weiterentwicklung unseres Endprodukts. Hier haben wir Ideen wie: Zuordnung der Benutzer in Gruppen, Benutzerprofile mit Daten über den Benutzer und dessen Tätigkeit oder auch Zuweisung von Kernarbeitszeit und Zeitrahmen um TimeTracking nur in einem festgelegten Zeitfenster zu erlauben. Mit ein paar Verbesserungen könnte unser Produkt von kleinen Unternehmen verwendet werden, die ein auf Vertrauen basiertes Zeitmeldesystem suchen. \end{document}