From 52312fd8047cd9ed183ed26c8432dcb892e44424 Mon Sep 17 00:00:00 2001 From: Andreas Zweili Date: Tue, 25 Dec 2018 17:06:31 +0100 Subject: [PATCH] rename the document and other various fixes --- .../Makefile | 14 +- .../Projektdokumentation_Andreas_Zweili.tex | 4 +- .../Zeitplanung_Andreas_Zweili.html | 0 .../dokumentations_historie.org | 0 .../general | 0 .../latexmkrc | 0 .../pictures/hello_world.png | Bin .../pictures/istrisiko.svg | 0 .../pictures/kontextdiagramm.xml | 0 .../pictures/meld.png | Bin .../pictures/sollrisiko.svg | 0 .../pictures/stakeholder_diagramm.svg | 0 .../pictures/swot_analyse.svg | 0 .../plannung.planner | 0 .../projektdokumentation.org | 7 +- projektdokumentation/projektdokumentation.tex | 1297 +++++++++++++++++ .../projektdokumentation_titlepage.tex | 0 projekthandbuch/pictures/kontextdiagramm.pdf | Bin 19294 -> 0 bytes 18 files changed, 1310 insertions(+), 12 deletions(-) rename {projekthandbuch => projektdokumentation}/Makefile (79%) rename projekthandbuch/Projekthandbuch_Andreas_Zweili.tex => projektdokumentation/Projektdokumentation_Andreas_Zweili.tex (94%) rename {projekthandbuch => projektdokumentation}/Zeitplanung_Andreas_Zweili.html (100%) rename {projekthandbuch => projektdokumentation}/dokumentations_historie.org (100%) rename {projekthandbuch => projektdokumentation}/general (100%) rename {projekthandbuch => projektdokumentation}/latexmkrc (100%) rename {projekthandbuch => projektdokumentation}/pictures/hello_world.png (100%) rename {projekthandbuch => projektdokumentation}/pictures/istrisiko.svg (100%) rename {projekthandbuch => projektdokumentation}/pictures/kontextdiagramm.xml (100%) rename {projekthandbuch => projektdokumentation}/pictures/meld.png (100%) rename {projekthandbuch => projektdokumentation}/pictures/sollrisiko.svg (100%) rename {projekthandbuch => projektdokumentation}/pictures/stakeholder_diagramm.svg (100%) rename {projekthandbuch => projektdokumentation}/pictures/swot_analyse.svg (100%) rename {projekthandbuch => projektdokumentation}/plannung.planner (100%) rename projekthandbuch/projekthandbuch.org => projektdokumentation/projektdokumentation.org (99%) create mode 100644 projektdokumentation/projektdokumentation.tex rename projekthandbuch/projekthandbuch_titlepage.tex => projektdokumentation/projektdokumentation_titlepage.tex (100%) delete mode 100644 projekthandbuch/pictures/kontextdiagramm.pdf diff --git a/projekthandbuch/Makefile b/projektdokumentation/Makefile similarity index 79% rename from projekthandbuch/Makefile rename to projektdokumentation/Makefile index 425f705..7201b66 100644 --- a/projekthandbuch/Makefile +++ b/projektdokumentation/Makefile @@ -1,6 +1,6 @@ ALL=$(wildcard *.sty *.tex *.org pictures/*.svg pictures/*.eps pictures/*.dot \ pictures/*.tex pictures/*.puml) -PAPER=Projekthandbuch_Andreas_Zweili.tex +PAPER=Projektdokumentation_Andreas_Zweili.tex SHELL=/bin/bash FIGURES_SVG=$(wildcard pictures/*.svg) @@ -15,9 +15,9 @@ DOT_PDF=$(FIGURES_DOT:.dot=.pdf) TEX_PDF=$(FIGURES_TEX:.tex=.pdf) PUML_PDF=$(FIGURES_PUML:.puml=.svg) -all: Projekthandbuch_Andreas_Zweili.pdf ## Build full thesis (LaTeX + figures) +all: Projektdokumentation_Andreas_Zweili.pdf ## Build full thesis (LaTeX + figures) -Projekthandbuch_Andreas_Zweili.pdf: $(SVG_PDF) $(EPS_PDF) $(DOT_PDF) $(TEX_PDF) \ +Projektdokumentation_Andreas_Zweili.pdf: $(SVG_PDF) $(EPS_PDF) $(DOT_PDF) $(TEX_PDF) \ $(PUML_PDF) projekthandbuch.tex general/ibzlogo.pdf $(BIBLIOGRAPHY) latexmk -quiet -pdf -pdflatex="pdflatex -interaction=nonstopmode" \ -use-make $(PAPER) @@ -46,7 +46,7 @@ clean: ## Clean LaTeX and output figure files rm -f projekthandbuch.tex distclean: - rm -f Projekthandbuch_Andreas_Zweili.pdf + rm -f Projektdokumentation_Andreas_Zweili.pdf pictures/%.pdf: pictures/%.svg ## Figures for the manuscript inkscape -C -z --file=$< --export-pdf=$@ @@ -67,7 +67,7 @@ pictures/%.pdf: pictures/%.tex ## Figures for the manuscript pictures/%.svg: pictures/%.puml java -jar ~/bin/plantuml.jar -tsvg $< -projekthandbuch.tex: projekthandbuch.org +projekthandbuch.tex: projektdokumentation.org emacs -l general/thesis.el --batch \ - --eval="(progn (find-file \"projekthandbuch.org\") (org-latex-export-to-latex nil nil nil t))" - replace-listings.sh projekthandbuch.tex + --eval="(progn (find-file \"projektdokumentation.org\") (org-latex-export-to-latex nil nil nil t))" + replace-listings.sh projektdokumentation.tex diff --git a/projekthandbuch/Projekthandbuch_Andreas_Zweili.tex b/projektdokumentation/Projektdokumentation_Andreas_Zweili.tex similarity index 94% rename from projekthandbuch/Projekthandbuch_Andreas_Zweili.tex rename to projektdokumentation/Projektdokumentation_Andreas_Zweili.tex index 0250c90..6bcb0a1 100644 --- a/projekthandbuch/Projekthandbuch_Andreas_Zweili.tex +++ b/projektdokumentation/Projektdokumentation_Andreas_Zweili.tex @@ -4,7 +4,7 @@ \include{general/glossary} \begin{document} -\include{projekthandbuch_titlepage} +\include{projektdokumentation_titlepage} \newpage \renewcommand{\abstractname}{Management Summary} @@ -24,7 +24,7 @@ aufgetretenen Probleme. \newpage -\include{projekthandbuch} +\include{projektdokumentation} \newpage \nocite{*} diff --git a/projekthandbuch/Zeitplanung_Andreas_Zweili.html b/projektdokumentation/Zeitplanung_Andreas_Zweili.html similarity index 100% rename from projekthandbuch/Zeitplanung_Andreas_Zweili.html rename to projektdokumentation/Zeitplanung_Andreas_Zweili.html diff --git a/projekthandbuch/dokumentations_historie.org b/projektdokumentation/dokumentations_historie.org similarity index 100% rename from projekthandbuch/dokumentations_historie.org rename to projektdokumentation/dokumentations_historie.org diff --git a/projekthandbuch/general b/projektdokumentation/general similarity index 100% rename from projekthandbuch/general rename to projektdokumentation/general diff --git a/projekthandbuch/latexmkrc b/projektdokumentation/latexmkrc similarity index 100% rename from projekthandbuch/latexmkrc rename to projektdokumentation/latexmkrc diff --git a/projekthandbuch/pictures/hello_world.png b/projektdokumentation/pictures/hello_world.png similarity index 100% rename from projekthandbuch/pictures/hello_world.png rename to projektdokumentation/pictures/hello_world.png diff --git a/projekthandbuch/pictures/istrisiko.svg b/projektdokumentation/pictures/istrisiko.svg similarity index 100% rename from projekthandbuch/pictures/istrisiko.svg rename to projektdokumentation/pictures/istrisiko.svg diff --git a/projekthandbuch/pictures/kontextdiagramm.xml b/projektdokumentation/pictures/kontextdiagramm.xml similarity index 100% rename from projekthandbuch/pictures/kontextdiagramm.xml rename to projektdokumentation/pictures/kontextdiagramm.xml diff --git a/projekthandbuch/pictures/meld.png b/projektdokumentation/pictures/meld.png similarity index 100% rename from projekthandbuch/pictures/meld.png rename to projektdokumentation/pictures/meld.png diff --git a/projekthandbuch/pictures/sollrisiko.svg b/projektdokumentation/pictures/sollrisiko.svg similarity index 100% rename from projekthandbuch/pictures/sollrisiko.svg rename to projektdokumentation/pictures/sollrisiko.svg diff --git a/projekthandbuch/pictures/stakeholder_diagramm.svg b/projektdokumentation/pictures/stakeholder_diagramm.svg similarity index 100% rename from projekthandbuch/pictures/stakeholder_diagramm.svg rename to projektdokumentation/pictures/stakeholder_diagramm.svg diff --git a/projekthandbuch/pictures/swot_analyse.svg b/projektdokumentation/pictures/swot_analyse.svg similarity index 100% rename from projekthandbuch/pictures/swot_analyse.svg rename to projektdokumentation/pictures/swot_analyse.svg diff --git a/projekthandbuch/plannung.planner b/projektdokumentation/plannung.planner similarity index 100% rename from projekthandbuch/plannung.planner rename to projektdokumentation/plannung.planner diff --git a/projekthandbuch/projekthandbuch.org b/projektdokumentation/projektdokumentation.org similarity index 99% rename from projekthandbuch/projekthandbuch.org rename to projektdokumentation/projektdokumentation.org index d938ecd..3abc024 100644 --- a/projekthandbuch/projekthandbuch.org +++ b/projektdokumentation/projektdokumentation.org @@ -346,7 +346,7 @@ des Eintreffens bewertet und entsprechend der Tabelle: ([[tab:auswirkung]]) nach seiner Auswirkung bewertet. #+CAPTION: Projektrisiken -#+ATTR_LATEX: :environment longtable :align |p{5cm}|p{5cm}| :placement [H] +#+ATTR_LATEX: :environment longtable :align |p{0.45\textwidth}|p{0.45\textwidth}| :placement [H] #+NAME: tab:projektrisiken |--------------------------------+--------------------------------| | <30> | <30> | @@ -462,7 +462,7 @@ Arbeit reduzieren kann. | 3 = hoch | Hohe Auswirkung auf die Nützlichkeit | #+CAPTION: Risikobeschreibung -#+ATTR_LATEX: :align |>{\columncolor[HTML]{EFEFEF}}p{0.8cm}|p{8cm}| :placement [H] +#+ATTR_LATEX: :align |>{\columncolor[HTML]{EFEFEF}}p{0.1\textwidth}|p{0.8\textwidth}| :placement [H] #+NAME: tab:risikobeschreibung |------------+--------------------------------| | <10> | <30> | @@ -489,6 +489,7 @@ Arbeit reduzieren kann. #+NAME: fig:sollrisiko [[file:pictures/sollrisiko.pdf]] +#+LATEX:\newpage ** SWOT-Analyse Die SWOT-Analyse ist eine Methode, die Stärken, Schwächen, Chancen und @@ -501,7 +502,7 @@ Abbildung:([[fig:swot]]) zu sehen. #+caption: SWOT Analyse des Projektes #+name: fig:swot [[file:pictures/swot_analyse.pdf]] -#+attr_latex: :center +#+attr_latex: :center :width 0.9\textwidth * TODO Konzept diff --git a/projektdokumentation/projektdokumentation.tex b/projektdokumentation/projektdokumentation.tex new file mode 100644 index 0000000..3749b68 --- /dev/null +++ b/projektdokumentation/projektdokumentation.tex @@ -0,0 +1,1297 @@ + +\section{Über dieses Dokument} +\label{sec:org8394a2a} + +Im nachfolgenden Abschnitt finden Sie allgemeine Informationen zu +diesem Dokument. + +\subsection{Beschreibung} +\label{sec:org7e61b0f} + +Diese Arbeit hat zum Ziel die Planung und Erstellung einer grafischen +Oberfläche zum einfachen Bedienen der Software \gls{borg} \footcite{borgbackup} +sowie deren Konfiguration, durchzuführen. + +\subsection{Zweck und Inhalt} +\label{sec:org5e0fb2f} + +Zweck dieses Dokumentes ist die vollständige und nachvollziehbare Dokumentation +zur Diplomarbeit von Andreas Zweili. + +\subsection{Aufbau} +\label{sec:org9632371} + +Alle Inhalte sind chronologisch sortiert, vom ältesten zum jüngsten +Ereignis, und nach Kapiteln getrennt. + +\subsection{Lizenz} +\label{sec:org6f468a4} + +Dieses Dokument wurde von Andreas Zweili im Rahmen der Diplomarbeit an der IBZ +Schule erstellt und steht unter der \gls{cc} BY-SA 4.0 \footcite{cc} Lizenz. +Dadurch darf die Arbeit unter beibehalten der Lizenz kopiert und +weiterverarbeitet werden. Zusätzlich muss der Urheber gennant werden. + +\section{Initialisierung} +\label{sec:org71a0502} +\subsection{Vision} +\label{sec:orgb55d3a4} + +Die Software soll \gls{borg} für den durschnittlichen Computer User zugänglich +machen. Die Backups sollen dabei schnell und unkompliziert erstellt werden +können. Die Möglichkeit automatischer im Hintergrund laufender Backups soll dem +User gegeben sein damit die Hürde für Backups so tief wie möglich gehalten wird. + +Die besten Backups sind solche bei denen man gar nicht mehr weiss das man sie +hat bis man sie braucht. + +\subsection{Ausgangslage} +\label{sec:orgb9a4fdf} + +\gls{borg} ist deshalb interessant weil es wärend einem Backup relativ +wenig Ressource im Vergleich zu anderen Systemen benötigt und schon relativ +lange aktiv entwickelt wird. Dadurch ist es im Altag geprüft worden. +Desweiteren bietet \gls{borg} die Funktion für Verschlüsselung was es einem User +ermöglicht die Daten auf einem unsicheren Cloud Speicher abzulegen. + +Desweiteren speichert \gls{borg} die Daten mit blockbasierter \gls{dedup} ab. Dies +hat den riesigen Vorteil das bei einem Backup nur die Änderungen auf +Block-Ebene gespeichert werden und nicht jedes Mal die ganze Datei kopiert +werden muss. + +Damit ermöglicht die Software auch Backups von sehr grossen Dateien, wie Videos +oder Disk Images von virtuellen Maschinen, in mehreren Version. Ohne dabei +jedoch signifikant mehr an Speicher zu benötigen. Zusätzlich werden die Backups +dadurch rasend schnell ausgeführt. Gerade dieses Feature macht \gls{borg} in den +Augen des Authors besonders interessant da sich der durschnittliche User +möglichst wenig mit Dingen wie Backups ausseinander setzen möchte. Umsobesser +also wenn sie schnell gehen und so wenig Speicherplatz wie möglich verbrauchen. + +\gls{borg} wird jedoch komplett über die Kommandozeile bedient. Somit ist es für +normale Benutzer eher schwierig den Zugang zu der Software zu finden geschweige +denn sie zu bedienen. + +\gls{borg} bietet Entwicklern eine \gls{json}, \gls{api}, mit welcher sie, von \gls{borg} +ausgegebenen Dateinen einfach weiterverarbeiten können. + +\gls{borg} steht unter einer \gls{bsd} \footcite{bsd} Lizenz zur Verfügung und ist somit +\gls{libre}. + +Das Projekt muss dabei vom Studenten in Eigenarbeit und einer Zeit von 250 +Stunden bis zum 18. März 2019 erarbeitet werden. + +\subsection{Projektziele} +\label{sec:orgb764186} + +Das Hauptziel der Arbeit soll es sein eine einfach nutzbare grafische +Oberfläche für \gls{borg} zu entwickeln. Da \gls{borg} selber freie Software ist und +der Author mit \gls{libre} viel gute Erfahrungen gemacht hat soll das Projekt +selber auch wieder \gls{libre} sein. Zum einen um der Community etwas +zurückzugeben des weiteren um anderen Entwicklern die Möglichkeit zu geben die +Software zu verbessern und weiterzu entwickeln. + +Als nebenläufiges Ziel soll mit dieser Arbeit auch die Verbreitung von freier +Software gefördert werden. Dies wird insbesondere dadurch erreicht, dass die +Software selbst unter der \gls{gpl} Version 3 \footcite{gplv3} +veröffentlicht wird. Wenn möglich sollen während der Entwicklung auch +hauptsächlich freie Software verwendet werden. Die gesamte Arbeit wird zudem zu +jedem Zeitpunkt öffentlich einsehbar sein. Der Quelltext der Dokumentation ist +unter diesem Link erreichbar: \url{https://git.2li.ch/Nebucatnetzer/thesis} + +Die Entwicklung wird hauptsächlich auf einem Linux System stattfinden. Da +BorgBackup einerseits hauptsächlich auf Unix Systeme ausgelegt ist und +anderseits die Hauptzielgruppe des Projektes auch auf Linux Usern liegt. +Trotzdem sollen im Projekt Cross-Plattform fähige Technologien eingesetzt werden +damit es in der Zukunft möglich ist das Projekt auf andere Plattformen +auszuweiten. + +\subsubsection{Ziele inklusive Gewichtung} +\label{sec:org2d2a3a5} + +Im Projektantrag wurden vorgängig vollgende Ziele definiert und entsprechend +gewichtet. Die Gewichtung wurde dabei so vorgenommen, dass Ziele mit einer +Muss-Gewichtung den Minimalanforderungen der Software entsprechen. +Die weiteren Ziele wurden dann mit Ziffern von 5 - 1 gewichtet. Eine 5 bedeutet +dabei dass, das Ziel in naher Zukunft sehr nützlich/wichtig für die Software +wär ist. Eine tiefe Zahl sollte dabei wenn möglich auch einmal in die Software +integriert werden und ist nicht unwichtig. + +\begin{longtable}{|p{1cm}|p{9cm}|p{1.5cm}|p{2cm}|} +\hline +\textbf{Ziel-Nr.}\cellcolor[HTML]{C0C0C0} & \textbf{Zielsetzung}\cellcolor[HTML]{C0C0C0} & \textbf{Muss}\cellcolor[HTML]{C0C0C0} & \textbf{Wunsch}\newline (1-5, 5=sehr wichtig)\cellcolor[HTML]{C0C0C0}\\ +\hline +\endfirsthead +\multicolumn{4}{l}{Fortsetzung von vorheriger Seite} \\ +\hline + +\textbf{Ziel-Nr.}\cellcolor[HTML]{C0C0C0} & \textbf{Zielsetzung}\cellcolor[HTML]{C0C0C0} & \textbf{Muss}\cellcolor[HTML]{C0C0C0} & \textbf{Wunsch}\newline (1-5, 5=sehr wichtig)\cellcolor[HTML]{C0C0C0} \\ + +\hline +\endhead +\hline\multicolumn{4}{r}{Fortsetzung nächste Seite} \\ +\endfoot +\endlastfoot +\hline +1. & Die Anwendung setzt auf Cross-Plattform (Linux, Windows, OSX) fähige Technologien. & x & \\ +\hline +2. & Die Anwendung steht unter der \gls{gpl} v3 der Öffentlichkeit zur Verfügung. & x & \\ +\hline +3. & Der User kann mit weniger als 3 Klicks ein Backup ausführen. & x & \\ +\hline +4. & Der User kann ein Archiv mit 3 Klicks löschen. & x & \\ +\hline +5. & Der User kann unter Linux ein Archiv mit zwei Klicks "`read-only"' als Laufwerk mounten. & x & \\ +\hline +6. & Der User kann ein Archiv wieder herstellen. & x & \\ +\hline +7. & Der User kann den zu sichernden Pfad manuell in der Anwendung definieren. & x & \\ +\hline +8. & Die Applikation holt ihre Konfiguration aus einer Plain-Text Datei. & x & \\ +\hline +9. & Der User kann sein Repository auf einer Harddisk ablegen. & x & \\ +\hline +10. & Die Anwendung exkludiert für einen Linux Computer sinnvolle Pfade bereits zu Beginn. & x & \\ +\hline +11. & Die Archivliste wird nach einer Aktion automatisch aktualisiert. & x & \\ +\hline +12. & Der User kann sein Repository auf einem über SSH erreichbaren Server ablegen. & & 5\\ +\hline +13. & Der User kann den Namen eines Archives selbst bestimmen. & & 5\\ +\hline +14. & Die Anwendung meldet transparent, wenn das Repository nicht erreichbar ist. & & 5\\ +\hline +15. & Die Anwendung meldet dem User, wenn noch ein Hypervisor am Laufen ist. & & 5\\ +\hline +16. & Die Anwendung leitet Meldungen von \gls{borg} transparent weiter. & & 5\\ +\hline +17. & Die Anwendung zeigt transparent an das \gls{borg} im Hintergrund bereits läuft. & & 5\\ +\hline +18. & Das Repository wird nach jedem Backup bereinigt. & & 4\\ +\hline +19. & Der User kann automatische Hintergrundbackups in der Anwendung konfigurieren. & & 4\\ +\hline +20. & Die Anwendung gibt dem User die Möglichkeit ein passendes Repository zu erstellen, wenn keines gefunden wird, die Anwendung jedoch bereits konfiguriert ist. & & 4\\ +\hline +21. & Die Applikation verwendet, wann immer möglich allgemeingültige Umgebungsvariablen. & & 4\\ +\hline +22. & Die Anwendung cached/speichert (evtl. zusätzliche) Informationen in einer Datenbank. & & 3\\ +\hline +23. & Die Anwendung zeigt beim ersten Starten einen Setup Wizard. & & 3\\ +\hline +24. & Der User kann sich mit 3 Klicks das Log eines Archives anschauen. Nur möglich mit einer zusätzlichen DB. & & 3\\ +\hline +25. & Die Anwendung kann Systembenachrichtigungen auslösen. & & 3\\ +\hline +26. & Der User kann die Anwendung grafisch konfigurieren. & & 3\\ +\hline +27. & Der User kann entscheiden ob, ein gemountetes Archiv nach dem Schliessen der Applikation noch weiter verfügbar ist. & & 2\\ +\hline +28. & Der User kann das Repository wechseln. & & 2\\ +\hline +29. & Der User kann ein Archiv nach einer Datei oder einem Ordner durchsuchen. & & 2\\ +\hline +30. & Der User kann die "`Retention Policy"' konfigurieren. & & 2\\ +\hline +31. & Die Anwendung kann mit allen Features von BargBackup umgehen. & & 2\\ +\hline +32. & Die Applikation prüft, ob sie sich im richtigen Netzwerk befindet bevor sie eine Verbindung zum Server aufbaut. & & 2\\ +\hline +\caption{\label{tab:org0d17f53} +Projektziele} +\\ +\end{longtable} +\newpage + +\subsection{Projektabgrenzung} +\label{sec:org880aef4} + +Die Anwendung beschränkt sich darauf Funktionen von \gls{borg} grafisch +darzustellen oder nützlich zu erweitern soweit dies über die \gls{api} möglich +ist. Wie in, Abbildung:(\ref{fig:org76deb14}), zu sehen ist werden die Aktion effektiv +immer vom Borg Binary ausgeführt und nicht von der grafischen Oberfläche. Eine +Erweiterung von \gls{borg} ist nicht vorgesehen. Backup und Verschlüsselung sind +heikle Themen und sollten umbedingt nur von Experten angegangen werden. Das +Potential für Fehler und die Auswirkungen deren sind einfach schlicht zu gross. + +Desweiteren wird die Grundlage für eine kolaborative Entwicklung geschaffen. +Wärend der Laufzeit der Diplomarbeit werden jedoch keine Inputs aus der Borg +Community im Bezug auf die Entwicklung entgegengenommen. + +Bugs von \gls{borg} welche während der Dauer der Diplomarbeit vom Studenten +entdeckt werden, wird dieser dem Projekt melden jedoch nicht selber beheben. + +\begin{figure}[htbp] +\centering +\includegraphics[width=.9\linewidth]{pictures/kontextdiagramm.pdf} +\caption{\label{fig:org76deb14} +Kontextdiagramm des Borg GUI} +\end{figure} + +\subsection{Projektmethode} +\label{sec:org80b7496} + +Für das Projekt wurde die Wasserfall-methode gewählt. Da nur eine +einzige Person am Projekt arbeitet kann nur ein Task nach dem anderen +abgearbeitet werden und viele Aufgaben stehen in Abhängigkeiten zu einander. +Somit macht das iterative Vorgehen der Wassfall-methode für dieses Projekt am +meisten Sinn. + +\subsection{Konfigurationsmanagement} +\label{sec:org4265bb4} + +Die komplette Dokumentation, der Quellcode der Applikation sowie jeglich +zusäzliche Dokumente wie etwa die Zeitplanung werden mittels der Software Git +Versioniert. Thematisch zusammengehörende Änderungen werden in einem Commit +zusammengefasst. Somit ist jederzeit nachvollziehbar was wann geändert hat. Ein +Commit sollte dabei gemäss dem Artikel von Chris Beams "`How to write a Git +Commit Message"' \footcite{commit} und in englischer Sprache geschrieben sein. + +Versionsnummern sind für die Applikation zum jetzigen Zeitpunkt noch nicht +vorgesehen. Sollten sie zukünftig einmal verwendet werden soll eine semantische +Versionierung \footcite{semver} verwendet. Dabei ist eine Versionsnummer immer +nach diesem Schema aufgebaut, MAJOR.MINOR.PATCH. Bei Änderungen wir die: +\begin{enumerate} +\item MAJOR Version erhöt wenn man inkompatible Änderungen an der \gls{api} macht. +\item MINOR Version erhöt wenn man Funktionalität hinzufügt die +rückwärtskompatibel ist. +\item PATCH Version erhöt wenn man rückwärtskompatible Bug-Fixes hinzufügt. +\end{enumerate} + +Auf jeden Fall sollte wenn möglich immer nur lauffähiger Code im Master Branch +eingecheckt sein damit der Master Branch immer eine funktionierende Software +repräsentiert. Dies gilt auch für das Repository der Dokumentation. Der Master +Branch der Dokumentation sollte maximal mit zwei Befehlen \texttt{make clean} und +\texttt{make} "`kompilierbar "' sein. + +\subsection{Zeitplanung} +\label{sec:orgb1efd39} + +Die detaillierte Zeitplanung ist dem Ganttchart in der Datei +\href{Zeitplanung\_Andreas\_Zweili.html}{Zeitplanung\_Andreas\_Zweili.html} zu entnehmen. Bei der Zeitplanung wurde darauf +geachtet das die Arbeit soweit als möglich nicht mit dem Berufsleben kolidiert. +An einem normalen Arbeitstag wurde dabei damit gerechnet das ca. 2 Stunden +Arbeit am Abend möglich sein sollten. An einem arbeitsfreien Tag wurde mit 6 +Stunden arbeit gerechnet. Über die Festtage wurden diverse Tage von der Planung +ausgenommen da es nicht realistisch schien das an diesen Tagen die Arbeit +signifikant vorwärts gehen würde. Auch Schultage wurde nicht als Arbeitstage +gerechnet da man meist nicht mehr für weitere Tätigkeiten gross motiviert ist. + +Als zusätliche Massnahme um die Arbeitslast zu verteilen wurde vom 14. Januar +bis zum 11. März jeder Montag auf der Arbeitsstelle als frei eingegeben. +Dadurch steht wärend des Projektes etwas mehr Zeit zur verfügung als sonst mit +einer 100\% Arbeitsstelle möglich wäre. + +\subsection{Controlling} +\label{sec:orgdc0083e} + +Das Controlling wird verwendet um zu kontrollieren das die eigentliche Planung +mit dem effektiv geleisteten Aufwand respektive den effektiv verwendeten +Ressourcen übereinstimmt. Somit können für zukünftige Projekte Lehren gezogen +werden. + +\newpage +\begin{landscape} +\subsubsection{Zeit} +\label{sec:org40b0db6} + +\begin{longtable}{|p{3cm}|p{5cm}|p{3cm}|p{7cm}|} +\hline +\textbf{Aufgabe}\cellcolor[HTML]{C0C0C0} & \textbf{Gesch. Aufwand}\cellcolor[HTML]{C0C0C0} & \textbf{Effekt. Aufwand}\cellcolor[HTML]{C0C0C0} & \textbf{Begründung}\cellcolor[HTML]{C0C0C0}\\ +\hline +\endfirsthead +\multicolumn{4}{l}{Fortsetzung von vorheriger Seite} \\ +\hline + +\textbf{Aufgabe}\cellcolor[HTML]{C0C0C0} & \textbf{Gesch. Aufwand}\cellcolor[HTML]{C0C0C0} & \textbf{Effekt. Aufwand}\cellcolor[HTML]{C0C0C0} & \textbf{Begründung}\cellcolor[HTML]{C0C0C0} \\ + +\hline +\endhead +\hline\multicolumn{4}{r}{Fortsetzung nächste Seite} \\ +\endfoot +\endlastfoot +\hline +\hline + & \textbf{Gesamter Aufwand} & & \\ +\hline +\caption{\label{tab:org666fef9} +Zeitcontrolling} +\\ +\end{longtable} + +\newpage +\subsubsection{Ressourcen} +\label{sec:orgc2ff234} + +Folgende Ressourcen werden wärend der Arbeit benötigt: +\begin{longtable}{|p{5cm}|p{3cm}|p{3cm}|p{7cm}|} +\hline +\textbf{Ressource}\cellcolor[HTML]{C0C0C0} & \textbf{geschätzte Stück}\cellcolor[HTML]{C0C0C0} & \textbf{effekt. Stück}\cellcolor[HTML]{C0C0C0} & \textbf{Begründung}\cellcolor[HTML]{C0C0C0}\\ +\hline +\endfirsthead +\multicolumn{4}{l}{Fortsetzung von vorheriger Seite} \\ +\hline + +\textbf{Ressource}\cellcolor[HTML]{C0C0C0} & \textbf{geschätzte Stück}\cellcolor[HTML]{C0C0C0} & \textbf{effekt. Stück}\cellcolor[HTML]{C0C0C0} & \textbf{Begründung}\cellcolor[HTML]{C0C0C0} \\ + +\hline +\endhead +\hline\multicolumn{4}{r}{Fortsetzung nächste Seite} \\ +\endfoot +\endlastfoot +\hline +Projektleiter/Mitarbeiter & 1 & 1 & \\ +Diplombetreuer & 1 & 1 & \\ +Testuser & 5 & & \\ +Korrekturleser & 3 & & \\ +iPad & 1 & 1 & \\ +Notebook & 1 & 1 & \\ +\hline +\caption{\label{tab:orgb4a7b96} +Ressourcen} +\\ +\end{longtable} +\end{landscape} + +\subsubsection{Kosten} +\label{sec:org3b0553f} + +Werden die internen Lohnkosten des Projektleiters auf ca. 60 CHF pro Stunde +geschätzt ergeben sich aus der Zeitplanung somit theoretische Kosten von 19'200 +CHF für die Umsetzung dieser Arbeit. Da dieses Projekt finanziell jedoch in +keinster Weise wirtschaftliche relevant ist, sind die Kosten nur ein rein +theoretischer Faktor. +\begin{table}[htbp] +\centering +\begin{tabular}{lrr} +\hline +\textbf{Name}\cellcolor[HTML]{C0C0C0} & \textbf{Aufwand in h}\cellcolor[HTML]{C0C0C0} & \textbf{Kosten in CHF}\cellcolor[HTML]{C0C0C0}\\ +\hline +Initialisierung & 24 & 1440\\ +Analyse & 47 & 2820\\ +Konzept & 34 & 2040\\ +Realisierung & 172 & 10320\\ +Ausblick & 8 & 480\\ +Arbeit korrigieren & 20 & 1200\\ +Meeting \#1 & 5 & 300\\ +Meeting \#2 & 5 & 300\\ +Meeting \#3 & 5 & 300\\ +\hline +\textbf{Total} & 320 & 19200\\ +\hline +\end{tabular} +\caption{\label{tab:org2678f20} +Kostenrechnung} + +\end{table} + +\subsection{Projektrisiken} +\label{sec:org2b56deb} + +Das Risikomanagement dient dazu Risiken im Projekt zu erkennen und Massnahmen +zur Vermeidung der Risiken zu definieren. Dadurch steht man ihnen nicht +unvorbereitet gegenüber sollten sie eintreffen. + +\subsubsection{Risikobeschreibung} +\label{sec:orgfec4900} + +In der Tabelle: (\ref{tab:orgc2b848f}), sind die Risiken des Projektes +gemeinsam mit ihren Gegenmassnahmen aufgelistet. Jedes Risiko wurde +entsprechend der Tabelle: (\ref{tab:org463c5d5}) nach der Wahrscheinlichkeit +des Eintreffens bewertet und entsprechend der Tabelle: (\ref{tab:org7556e15}) nach +seiner Auswirkung bewertet. + +\begin{longtable}{|p{0.45\textwidth}|p{0.45\textwidth}|} +\hline +\textbf{Beschreibung}\cellcolor[HTML]{C0C0C0} & \textbf{Massnahmen}\cellcolor[HTML]{C0C0C0}\\ +\hline +\endfirsthead +\multicolumn{2}{l}{Fortsetzung von vorheriger Seite} \\ +\hline + +\textbf{Beschreibung}\cellcolor[HTML]{C0C0C0} & \textbf{Massnahmen}\cellcolor[HTML]{C0C0C0} \\ + +\hline +\endhead +\hline\multicolumn{2}{r}{Fortsetzung nächste Seite} \\ +\endfoot +\endlastfoot +\hline +Ein grösseres Problem in der Programmierung blockiert den Fortschritt. & Immer nur eine Sache auf einmal in der Code-Basis ändern, alle Fehler beheben und erst dann zur nächsten Aufgabe weitergehen.\\ +\hline +Viel Arbeit an der Arbeitsstelle, dabei bleibt weniger Zeit für die Diplomarbeit. & Auf der Arbeit Freitage eingeben um die Last etwas zu verteilen. Projektplanung machen.\\ +\hline +Know-How zur Umsetzung ist nicht vollständig vorhanden. & Gute Informationsbeschaffung im Internet, Büchern, etc.\\ +\hline +Manuelle Tests brauchen zu viel Zeit. & Soviel wie möglich automatisieren. Dabei jedoch nicht den Fokus auf die eigentliche Entwicklung verlieren.\\ +\hline +Die Programmierung des Programms benötigt zu viel Zeit. & Bei der Projektplanung genau definieren was die GUI Applikation beinhalten muss. Ziele definieren, Abgrenzungen treffen.\\ +\hline +User haben keine Zeit für Utility Tests. & Vorgängig einen Termin abmachen.\\ +\hline +\gls{borg} ändert fundamental seine \gls{api}. & Gegen eine fixe Version von \gls{borg} entwickeln.\\ +\hline +\caption{\label{tab:orge163d32} +Projektrisiken} +\\ +\end{longtable} + +\section{Analyse} +\label{sec:orgd2e8df3} +\subsection{Umweltanalyse} +\label{sec:org65077db} + +Die Projektumwelt-Analyse ist eine Methode, die Beziehungen, +Erwartungshaltungen und Einflüsse auf das Projekt durch interne und +externe soziale Umwelten zu betrachten und zu bewerten. Auf Grundlage +der Analyseergebnisse werden erforderliche Massnahmen zur Gestaltung +der Umweltbeziehungen abgeleitet. Die Gestaltung der +Projektumweltbeziehungen ist eine Projektmanagementaufgabe. In der +Tabelle:(\ref{tab:org092919f}) wurden die Anforderungen und Wünsche +mit Einschätzung der Wahrscheinlichkeit und der Einflussnahme aufgenommen. +Zusätzlich ist die Beziehung der Stakeholder zum Projekt noch in der +Abbildung:(\ref{fig:org1ce1a4e}) grafisch dargestellt. + +Da das Projekt so ausgelegt ist das der Projektleiter es in Eigenarbeit +verwirklichen kann ist der Einfluss der Stakeholder wärend der Umsetzung sehr +gering. Die User werden bei der Entwicklung mittels einer "`Usability"' Studie +miteinbezogen und die \gls{borg} Community wird mit regelmässigen Posts auf dem +offiziellen Github Repository auf dem Laufenden gehalten. +Nach Ende der Diplomarbeit soll das Projekt für interessierte Entwickler jedoch +offen sein. Der Quellcode wird bereits während der Arbeit öffentlich zur +Verfügung gestellt. + +\begin{figure}[htbp] +\centering +\includegraphics[width=.9\textwidth]{pictures/stakeholder_diagramm.pdf} +\caption{\label{fig:org1ce1a4e} +Stakeholder Diagramm} +\end{figure} + +\newpage +\begin{landscape} +\begin{table}[htbp] +\centering +\begin{tabular}{|>{\columncolor[HTML]{EFEFEF}}p{0.8cm}|l|l|p{8cm}|l|} +\hline +\textbf{Nr}.\cellcolor[HTML]{C0C0C0} & \textbf{Stakeholder}\cellcolor[HTML]{C0C0C0} & \textbf{Einfluss}\cellcolor[HTML]{C0C0C0} & \textbf{Anforderung/Wünsche}\cellcolor[HTML]{C0C0C0} & \textbf{Wahrscheinlichkeit}\cellcolor[HTML]{C0C0C0}\\ +\hline +1. & BorgBackup Community & gering & - Eine Applikation die den Umfang von BorgBackup abdeckt & mittel\\ + & & & - Open-Source & hoch\\ + & & & - Mitsprachrecht bei der Entwicklung & niedrig\\ +\hline +2. & User & gering & - Eine einfache Anwendung & hoch\\ + & & & - Einmal einrichten und vergessen & mittel\\ +\hline +3. & Interessenten & gering & - Einfach verständliches Projekt Repository & hoch\\ + & & & - Einfaches Setup zum testen & hoch\\ +\hline +4. & Projektleiter & hoch & - Stabile Anwendung erstellen & mittel\\ + & & & - Ein nachhaltiges Projekt starten & mittel\\ + & & & - Anerkennung im fachlichen Umfeld & hoch\\ +\hline +\end{tabular} +\caption{\label{tab:org092919f} +Umwelt-Analyse} + +\end{table} +\end{landscape} + +\subsection{Risiko-Analyse} +\label{sec:org659e913} + +Bei der Risikoanalyse wird von einem durchschnittlichen Benutzer ausgegangen +der zur Zeit noch keine Backups macht und beginnen möchte \gls{borg} zu nutzen um +auf einer externen Harddisk seine Backups zu speichern. + +Es wird dabei eine Ist/Soll Analyse gemacht um die Lösung gegenüber der +bestehenden Möglichkeiten zu vergleichen. Jedes Risiko wurde entsprechend der +Tabelle: (\ref{tab:org463c5d5}) nach der Wahrscheinlichkeit des Eintreffens +bewertet und entsprechend der Tabelle: (\ref{tab:org7556e15}) nach seiner Auswirkung +im Bezug auf die Nützlichkeit der gemachten Backups. + +In der Tabelle: (\ref{tab:orgc2b848f}) sind dabei die Risiken für das +Szenario aufgelistet und nummeriert. In der, Abbildung:(\ref{fig:org8251252}), ist die +Bewertung des Ist-Risikos grafisch dargestellt und in der, +Abbildung:(\ref{fig:org38b227a}), ist das Soll-Risiko welches mit dieser Arbeit +angestrebt wird ebenfalls grafisch dargestellt. + +Es sollte im Rahmen der Arbeit möglich sein die meisten Risiken zu verringern. +Da automatische Hintergrundbackups jedoch nur ein Kann-Ziel sind wir in dieser +Analyse nicht davon ausgegangen das man das Risiko Nr. 5 im Rahmen dieser +Arbeit reduzieren kann. + +\begin{table}[H] +\centering +\begin{tabular}{l|l} +\textbf{Bewertung} & \textbf{Beschreibung: Wahrscheinlichkeit (W)}\\ +\hline +1 = gering & Unwahrscheinlich, <20\%\\ +2 = mittel & Mässig wahrscheinlich, 20-50\%\\ +3 = hoch & Hohe Wahrscheinlichkeit > 50\%\\ +\end{tabular} +\caption{\label{tab:org463c5d5} +Risikobewertung Wahrscheinlichkeit} + +\end{table} + +\begin{table}[H] +\centering +\begin{tabular}{l|l} +\textbf{Bewertung} & \textbf{Beschreibung: Auswirkung (A)}\\ +\hline +1 = gering & Geringe Auswirkungen auf Nützlichkeit\\ +2 = mittel & Mittlere Auswirkung auf die Nützlichkeit\\ +3 = hoch & Hohe Auswirkung auf die Nützlichkeit\\ +\end{tabular} +\caption{\label{tab:org7556e15} +Risikobewertung Auswirkung} + +\end{table} + +\begin{table}[H] +\centering +\begin{tabular}{|>{\columncolor[HTML]{EFEFEF}}p{0.1\textwidth}|p{0.8\textwidth}|} +\hline +\textbf{Nr.}\cellcolor[HTML]{C0C0C0} & \textbf{Beschreibung}\cellcolor[HTML]{C0C0C0}\\ +\hline +1. & Der Benutzer hat noch nie die Kommandozeile verwendet und scheitert bereits an der Installation von \gls{borg}.\\ +\hline +2. & Der Benutzer verwendet keine Verschlüsselung und verliert seine Harddisk.\\ +\hline +3. & Der Benutzer speichert die Backups auf der internen statt der externen Harddisk.\\ +\hline +4. & Der Benutzer löscht aus Versehen ein Backup.\\ +\hline +5. & Der Anwender vergisst die Backups zu machen.\\ +\hline +\end{tabular} +\caption{\label{tab:orgc2b848f} +Risikobeschreibung} + +\end{table} + +\begin{figure}[H] +\centering +\includegraphics[width=9cm]{pictures/istrisiko.pdf} +\caption{\label{fig:org8251252} +Grafische Darstellung der Ist-Risikoanalyse} +\end{figure} + +\begin{figure}[H] +\centering +\includegraphics[width=9cm]{pictures/sollrisiko.pdf} +\caption{\label{fig:org38b227a} +Grafische Darstellung der Soll-Risikoanalyse} +\end{figure} + +\newpage +\subsection{SWOT-Analyse} +\label{sec:org78e590a} + +Die SWOT-Analyse ist eine Methode, die Stärken, Schwächen, Chancen und +Gefahren zu erkennen, indem eine 4-Felder-Matrix ausgefüllt wird. + +Wichtig vor dem Ausfüllen der SWOT-Analyse ist es, ein klares Ziel zu +haben. Die ausgefüllte SWOT-Analyse für dieses Projekt ist in der +Abbildung:(\ref{fig:org8d92421}) zu sehen. + +\begin{figure}[htbp] +\centering +\includegraphics[width=.9\linewidth]{pictures/swot_analyse.pdf} +\caption{\label{fig:org8d92421} +SWOT Analyse des Projektes} +\end{figure} + +\section{Konzept} +\label{sec:org34777b1} + +\subsection{Varianten} +\label{sec:orgee7897b} + +Da Borg eine JSON API zur Verfügung stellt bieten sich diverse Möglichkeiten um +das Programm anzubinden. Da das Ziel ist, das Programm normalen Nutzern +zugänglicher zu machen, bietet sich ein normales Desktop Programm am ehesten +an. Desktop Programme werden von allen Computer Usern täglich genutzt und sind +somit etwas was sie kennen. + +Daraus ergeben sich die in diesem Kapitel aufgeführten Möglichkeiten für das +Projekt. + +\subsubsection{Bewertung} +\label{sec:orgd04a5af} + +Die Bewertungspunkte setzen sich einerseits aus den Projektzielen anderseits +aus für das Projekt sinnvollen Punkten zusammen. Dadurch ergeben sich dann die +Bewertungen welche in der nachfolgenden Tabelle aufgenommen wurden. Die +möglichen Varianten wurden danach bewertet. Die effektive Berechnung des +Resultats wird nach folgender Formel durchgeführt. + +\begin{equation} +G * EP = KE +\end{equation} + +Also die Gewichtung(\emph{G}) multipliziert mit der erreichten Punktzahl(\emph{EP}) +ergibt das Kriteriumsergebnis(\emph{KE}). Für das Endresultat wird dann die Summe +über alle Kriterien gebildet. Die Variante mit der höchsten Summe wurde für das +Projekt ausgewählt. + +Mussziele erhalten dabei eine +Gewichtung von 10 und Wunschziele eine Gewichtung entsprechend der Bewertung in +der Tabelle Projektziele (\ref{tab:org0d17f53}). + +\begin{table}[htbp] +\centering +\begin{tabular}{|>{\columncolor[HTML]{EFEFEF}}p{4cm}|c|p{2cm}|p{2cm}|p{2cm}|} +\hline +\textbf{Kriterium}\cellcolor[HTML]{C0C0C0} & \textbf{Gewichtung}\cellcolor[HTML]{C0C0C0} & \textbf{max. Punktzahl}\cellcolor[HTML]{C0C0C0} & \textbf{erreichte Punktzahl}\cellcolor[HTML]{C0C0C0} & \textbf{Kriteriums- ergebnis}\cellcolor[HTML]{C0C0C0}\\ +\hline +1. Cross Plattform nutzbar & 10 & 10 & 10 & 100\\ +2. Freie Software & 5 & 10 & 10 & 50\\ +3. Vorkenntnisse & 5 & 10 & 10 & 50\\ +4. Integriert sich gut ins System & 5 & 10 & 10 & 50\\ +5. Ohne spezielle Tools nutzbar & 5 & 10 & 10 & 50\\ +6. Lesbarkeit des Codes & 5 & 5 & 5 & 25\\ +7. Einfachheit des Setups & 5 & 5 & 5 & 25\\ +8. Lernfaktor & 5 & 5 & 5 & 25\\ +9. Verbreitung bei der BorgBackup Community & 5 & 5 & 5 & 25\\ +10. Geschwindigkeit der Entwicklung & 3 & 5 & 5 & 15\\ +\hline +\textbf{Total} & & & & 415\\ +\hline +\end{tabular} +\caption{\label{tab:org3882be1} +Muster Bewertungstabelle} + +\end{table} + +\subsubsection{Backend} +\label{sec:orgc7043d0} + +Fürs Backend bieten sich die folgende drei Sprachen an: \hyperref[sec:org87cfed6]{C\#}, \hyperref[sec:org8faf346]{C++}, \hyperref[sec:org7ab72b4]{Python}. +Dies vorallem weil alle Allrounder Sprachen sind und sich gut für Desktop +Applikationen eignen. + +\paragraph{C\#} +\label{sec:org87cfed6} + +C\# ist eine von Microsoft entwickelte Programmiersprache welche viele +Frameworks zur Verfügung hat. Insbesondere Aufgrund der grossen kommerziellen +Nutzung und der guten Integration mit Windows hat C\# eine relative grosse +Verbreitung. Bei Linux und OS X ist es jedoch schwieriger C\# zu integrieren und +zu nutzen. + +Sie ist zu Teilen \gls{libre}. Die Common Language Runtime welche für das +Ausführen von Software zuständig ist, ist unter der MIT Lizenz lizenziert +\footcite{csharp} der aktuelle Compiler Roslyn ist unter der Apache Lizenz +verfügbar \footcite{roslyn}. Da es sehr viele offiziele Teile um die Sprache C\# +gibt kann im Rahmen des Projektes nicht direkt abgeschätzt werden ob alle +benötigten Teile \gls{libre} sind. Für die Bewertung wird deshalb ein kleinerer +Wert als bei C++ und Python genommen. + +C\# ist die Programmierspache welche an der IBZ hauptsächlich gelehrt wird. +Dadurch sind die Kenntnisse der Sprache und ihrer Anwendung bereits +einigermassen vorhanden. Ausserhalb der Schule wurde die Sprache jedoch noch nie +eingesetzt. + +Entwickelt wird C\# hauptsächlich mit der \gls{ide} Microsoft Visual Studio. +Eine sehr umfangreiche und komlexe Software. Visual Studio ist dabei nur für +Windows und OS X erhältlich. Es ist auch möglich C\# Projekte ausserhalb von +Visual Studio zu erstellen ist jedoch nicht sehr einfach. + +Der Code ist gut lesbar und es gibt offizielle Styleguides von Microsoft was +den Code über Projekte hinaus einigermassen einheitlich aussehen lässt. Zudem +hilft hier auch Visual Studio stark den Code entsprechend zu formatieren. +Besonders angenehm sind die Klassen- und Methodennamen der offiziellen +Frameworks. Insgesamt sehr gut gelöst aber in Sachen Lesbarkeit noch etwas +hinter Python. + +Unter Windows ist das Setup von C\# relativ einfach. Allerdings ist es auch dort +im Vergleich zu Python eine umfangreiche Angelegenheit Visual Studio sauber zu +installieren und nutzbar zu machen. Auf anderen Plattform wird dies leider +nicht einfacher und unter Linux ist es bereits schwierig eine funktionierende +Umgebung in gang zu bringen. + +Da C\# bereits an der IBZ gelernt wird ist der Lernfaktor hier im Vergleich zu +den anderen Sprachen sicher am kleinsten. Allerdings gibt es noch keinerlei +Kenntnisse beim Einbinden eines der unten aufgeführten \gls{gui} Frameworks. +Daher gibt es auf jeden Fall noch genügend zu lernen. + +Die \gls{borg} Community hat vor relativ kurzer Zeit die offizielle Unterstützung +von Windows zurückgezogen. Da C\# eine sehr Windows lastige Sprache ist wird +daher davon ausgegangen das die Sprache innerhalb der \gls{borg} Community nicht +sehr verbreitet ist. + +C\# ist eine stark typisiert Sprache und kompilierte Sprache. Desweiteren ist +Visual Studio der Erfahrung nach nicht die schnellste Software. Dies alles +führt dazu das C\# nicht gerade die schnellste Sprache zum programmmieren ist. +Jedoch aufgrund des moderneren Unterbaus sicher schneller als C++. + +\begin{table}[htbp] +\centering +\begin{tabular}{|>{\columncolor[HTML]{EFEFEF}}p{4cm}|c|p{2cm}|p{2cm}|p{2cm}|} +\hline +\textbf{Kriterium}\cellcolor[HTML]{C0C0C0} & \textbf{Gewichtung}\cellcolor[HTML]{C0C0C0} & \textbf{max. Punktzahl}\cellcolor[HTML]{C0C0C0} & \textbf{erreichte Punktzahl}\cellcolor[HTML]{C0C0C0} & \textbf{Kriteriums- ergebnis}\cellcolor[HTML]{C0C0C0}\\ +\hline +1. Cross Plattform nutzbar & 10 & 10 & 8 & 80\\ +2. Freie Software & 5 & 10 & 8 & 40\\ +3. Vorkenntnisse & 5 & 10 & 6 & 30\\ +4. Integriert sich gut ins System & 5 & 10 & 8 & 40\\ +5. Ohne spezielle Tools nutzbar & 5 & 10 & 6 & 30\\ +6. Lesbarkeit des Codes & 5 & 5 & 4 & 20\\ +7. Einfachheit des Setups & 5 & 5 & 2 & 10\\ +8. Lernfaktor & 5 & 5 & 3 & 15\\ +9. Verbreitung bei der BorgBackup Community & 5 & 5 & 1 & 5\\ +10. Geschwindigkeit der Entwicklung & 3 & 5 & 3 & 9\\ +\hline +\textbf{Total} & & & & 279\\ +\hline +\end{tabular} +\caption{\label{tab:org30f2838} +C\# Bewertungstabelle} + +\end{table} + +\paragraph{C++} +\label{sec:org8faf346} + +C++ ist eine stark typisierte und kompilierte Programmiersprache. Sie ist seit +1998 Teil des ISO Standards \footcite{cpp98}. ISO/IEC 14882:2017 \footcite{cpp17} +ist zur Zeit die aktuellste Variante. Die Sprache existiert seit ca. 33 Jahren +und hat eine weitreichende Verbreitung gefunden. C++ ist auf allen +Betriebssystemen gut unterstützt muss jedoch für jedes System separat +kompiliert werden. + +Von C++ sind innerhalb des Projektes keinerlei Vorkenntnisse vorhanden. Dies +ist ein sehr hoher Risikofaktor. + +C++ kompiliert direkt zu Maschinensprache und ist dadurch sehr performant und +läuft sehr gut auf jedem System. C++ ist im Vergleich zu modernen Sprachen +jedoch relativ komplex und bietet diverse Stolpersteine für Programmierer. + +Zum entwickeln braucht es verhältnismässig wenig. Da die Sprache bereits sehr +alt ist, stammt sie noch aus einer Zeit wo man noch etwas rudimentärer +programmierte. Allerdings braucht man in jedem Fall einen \gls{compiler} um ein +ausführbares Programm zu erzeugen. Bei komplexeren Programmen wird man um +mindestens so etwas wie \glspl{makefile} auch nicht herumkommen. + +Im Vergleich zu Python oder C\# ist C++ wohl die am schwersten lesbare Sprache. +Zudem gibt es auch keinen zentralen Styleguide welcher einem vorgeben würde wie +der Code am besten aussschauen sollte. Somit haben sich über die Jahre mehrere +Standards etabliert. + +Der Lernfaktor wäre Aufgrund der mangelnden Vorkenntnisse hier ganz klar am +Grössten. + +Da C++ eine alte Sprache ist geniesst sie auch eine dementsprechende +Verbreitung. Daher ist anzunehmen das sicher mindestens ein grössere Teil der +älteren BorgBackup Entwickler C++ oder C gelernt haben. + +Da C++ auch heute noch zu den meistgenutzten Sprachen gehört gibt es +entsprechend viele Ressourcen dazu und Beispiel Projekte von denen man ableiten +kann. Auch hilfreiche Libraries gibts es sehr viele welche den Programmierer +unterstützen können. Die Sprache selber ist jedoch eher umständlich zu +schreiben. Hinzu kommt noch das man während der Entwicklung immer wieder den +Code kompilieren muss. In einem Projekt mit dieser begrenzten Zeitspanne eher +ungeeignet. + +\begin{table}[htbp] +\centering +\begin{tabular}{|>{\columncolor[HTML]{EFEFEF}}p{4cm}|c|p{2cm}|p{2cm}|p{2cm}|} +\hline +\textbf{Kriterium}\cellcolor[HTML]{C0C0C0} & \textbf{Gewichtung}\cellcolor[HTML]{C0C0C0} & \textbf{max. Punktzahl}\cellcolor[HTML]{C0C0C0} & \textbf{erreichte Punktzahl}\cellcolor[HTML]{C0C0C0} & \textbf{Kriteriums- ergebnis}\cellcolor[HTML]{C0C0C0}\\ +\hline +1. Cross Plattform nutzbar & 10 & 10 & 8 & 80\\ +2. Freie Software & 5 & 10 & 10 & 50\\ +3. Vorkenntnisse & 5 & 10 & 0 & 0\\ +4. Integriert sich gut ins System & 5 & 10 & 8 & 40\\ +5. Ohne spezielle Tools nutzbar & 5 & 10 & 6 & 30\\ +6. Lesbarkeit des Codes & 5 & 5 & 2 & 10\\ +7. Einfachheit des Setups & 5 & 5 & 3 & 15\\ +8. Lernfaktor & 5 & 5 & 5 & 25\\ +9. Verbreitung bei der BorgBackup Community & 5 & 5 & 3 & 15\\ +10. Geschwindigkeit der Entwicklung & 3 & 5 & 2 & 6\\ +\hline +\textbf{Total} & & & & 271\\ +\hline +\end{tabular} +\caption{\label{tab:org9bb70a9} +C++ Bewertungstabelle} + +\end{table} + +\paragraph{Python} +\label{sec:org7ab72b4} + +Der Python Interpreter ist für eine Vielzahl an Betriebssystemen erhältlich, +inklusive Windows, OS X und Linux. Nahezu jedes Desktop Linux System kommt mit +Python vor installiert. Auch OS X kommt bereits ab Werk mit Python Version 2. +Version 3 lässt sich sehr einfach nachinstallieren und ist einfach nutzbar. +Unter Windows geschtaltet sich die Installation etwas aufwändiger aber auch +nicht sehr kompliziert integriert sich in Windows jedoch etwas weniger elegant +als C\#. + +Python ist freie Software unter der Python Software Foundation License +\footcite{python} und wird durch die Python Software Foundation in einem +Community basierten Modell entwickelt. + +Die Vorkenntnisse sind im Vergleich zu C++ relativ gross und zu C\# etwas +weniger ausgeprägt. Es wurden damit im Rahmen der Ausbildung schon ein +grösseres Projekt realisiert und ansonsten mehrere kleine Projekte im Privaten +erstellen. + +Für Python gibt es ein paar \glspl{ide} welchen den Programmierer bei seiner +Arbeit unterstützen können. Keine davon ist allerdings ein Muss um Python +programmieren zu können. Im einfachsten Fall wäre dies mit Notepad möglich. Ein +Editor mit etwas vortgeschritteren Features wäre jedoch empfehlenswert. + +Python unterstützt mehrere Programmierungsparadigmen wie etwa +objekt-orientiert, funktionale oder Prozedurale Paradigmen. Bei der Entwicklung +von Python wurde sehr grossen Wert auf die Lesbarkeit der Sprache gelegt. Dies +mit dem Hintergedanken das eine Programmierspache viel häufiger gelesen als +effektiv geschrieben wird \footcite{pep8}. + +Um ein Python Programm zu starten braucht es eigentlich kein grosses Setup. +Solange die Abhängigkeiten vorhanden sind, kann man ein Skript mit einem +einfachen Befehl, Code Snippet (\ref{orgd952351}) starten. + +\lstset{language=bash,label=orgd952351,caption={Minimal Python Setup},captionpos=b,numbers=none} +\begin{sexylisting}{Minimal Python Setup} +python3 example.py +\end{sexylisting} + +Da Python schon eine etwas bekanntere Sprache ist, ist der Lernfaktor der +Sprache selber nicht mehr so hoch. Allerdings gibt es noch viele interessante +Konzepte die man im Zusammenhang mit der Sprache lernen kann. Wie etwa zum +Beispiel multiple Vererbung von Klassen. + +\gls{borg} selber wurde in Python geschrieben. Daher ist davon auszugehen das +Python innerhalb dieser Community eine sehr hohe Verbreitung geniesst. + +Python ist eine dynamisch typisierte und interpretierte Sprache. Dies bedeutet +das man bei Variabeln nicht explizit den Typ angeben muss und die Programme zur +Laufzeit für den Computer übersetzt werden. Interpretierte Sprachen haben den +Vorteil das man mit ihnen in der Regel sehr schnell und unkompliziert +entwickeln kann, dies jedoch zu Lasten der Performance. + +\begin{table}[htbp] +\centering +\begin{tabular}{|>{\columncolor[HTML]{EFEFEF}}p{4cm}|c|p{2cm}|p{2cm}|p{2cm}|} +\hline +\textbf{Kriterium}\cellcolor[HTML]{C0C0C0} & \textbf{Gewichtung}\cellcolor[HTML]{C0C0C0} & \textbf{max. Punktzahl}\cellcolor[HTML]{C0C0C0} & \textbf{erreichte Punktzahl}\cellcolor[HTML]{C0C0C0} & \textbf{Kriteriums- ergebnis}\cellcolor[HTML]{C0C0C0}\\ +\hline +1. Cross Plattform nutzbar & 10 & 8 & 8 & 80\\ +2. Freie Software & 5 & 10 & 10 & 50\\ +3. Vorkenntnisse & 5 & 10 & 5 & 25\\ +4. Integriert sich gut ins System & 5 & 10 & 8 & 40\\ +5. Ohne spezielle Tools nutzbar & 5 & 10 & 7 & 35\\ +6. Lesbarkeit des Codes & 5 & 5 & 4 & 20\\ +7. Einfachheit des Setups & 5 & 5 & 4 & 20\\ +8. Lernfaktor & 5 & 5 & 3 & 15\\ +9. Verbreitung in der BorgBackup Community & 5 & 5 & 5 & 25\\ +10. Geschwindigkeit der Entwicklung & 3 & 5 & 4 & 12\\ +\hline +\textbf{Total} & & & & 322\\ +\hline +\end{tabular} +\caption{\label{tab:orgb80f575} +Python Bewertungstabelle} + +\end{table} + +\subsubsection{FrontEnd} +\label{sec:org61883bb} + +Fürs Frontend sind folgende Projekte interessant: \hyperref[sec:orgab8580b]{Qt}, \hyperref[sec:orgd25230f]{Gtk} und \hyperref[sec:orgde09806]{Electron}. Alle +drei sind cross-plattfrom fähige \gls{gui} Frameworks und nicht von einer +spezifischen Sprache abhängig. Da nahezu keine Erfahrung mit den aufgeführten +Frameworks vorhanden ist werden bei den Frontenend Frameworks die Punkte der +Verbreitung in der Community und Geschwindigkeit der Entwicklung ausgeschlossen +da in allen Fällen nicht mal eine ungenaune Schätzung wirklich möglich wäre. + +\paragraph{Qt} +\label{sec:orgab8580b} + +Qt \footcite{qt}, "`cute"' ausgesprochen, ist ein Framework zum Entwickeln von +grafischen Oberflächen welche auf verschiedenen System ohne grosse Änderungen +laufen sollen und sich dabei soweit als möglich wie eine native Applikation +verhalten und "`anfühlen"' soll. + +Die Rechte an Qt hält die Firma "`The Qt Company"'. Das Framework Qt wird jedoch +offen entwickelt und die Community hat ein Mitspracherecht. Die Linux +Desktopumgebung KDE nutzt das Qt Framework intensiv. Qt ist \gls{libre} und der +\gls{gpl} v3 \footcite{qtlicense} oder mit einer kostenpflichtigen proprietären +Lizen erhältlich falls die \gls{gpl} nicht genutzt werden kann. + +Vorkenntnisse zu Qt sind nur sehr wenig vorhanden. Mehr als ein paar Tests +wurden damit noch nicht gemacht. + +Eine Qt Oberfläche kann direkt in der jeweiligen Sprache des Backends +geschrieben werden oder Mittels des Qt Designers als XML Datei gespeichert und +dann in die eigentliche Applikation importiert werden. Somit ist keine +spezielle Software nötig. + +XML ist nicht übermässig gut lesbar allerdings kann man Qt in der verwendeten +Sprache programmiert werden somit ist es hauptsächlich von der Sprache im +Backend abhängig. Die Dokumentation ist in C++ geschrieben was für einen +Entwickler ohne C++ Kenntnisse die Software etwas unzugänglich macht. + +Qt scheint, soweit dies bis jetzt abgeschätzt werden kann, sehr leicht in ein +Projekt zu integrieren sein. + +Da noch sehr wenig Kenntnisse vorhanden sind ist der Lernfaktor entsprechend +gross. + +\begin{table}[htbp] +\centering +\begin{tabular}{|>{\columncolor[HTML]{EFEFEF}}p{4cm}|c|p{2cm}|p{2cm}|p{2cm}|} +\hline +\textbf{Kriterium}\cellcolor[HTML]{C0C0C0} & \textbf{Gewichtung}\cellcolor[HTML]{C0C0C0} & \textbf{max. Punktzahl}\cellcolor[HTML]{C0C0C0} & \textbf{erreichte Punktzahl}\cellcolor[HTML]{C0C0C0} & \textbf{Kriteriums- ergebnis}\cellcolor[HTML]{C0C0C0}\\ +\hline +1. Cross Plattform nutzbar & 10 & 10 & 10 & 100\\ +2. Freie Software & 5 & 10 & 10 & 50\\ +3. Vorkenntnisse & 5 & 10 & 2 & 10\\ +4. Integriert sich gut ins System & 5 & 10 & 8 & 40\\ +5. Ohne spezielle Tools nutzbar & 5 & 10 & 8 & 40\\ +6. Lesbarkeit des Codes & 5 & 5 & 3 & 15\\ +7. Einfachheit des Setups & 5 & 5 & 4 & 20\\ +8. Lernfaktor & 5 & 5 & 4 & 20\\ +\hline +\textbf{Total} & & & & 295\\ +\hline +\end{tabular} +\caption{\label{tab:org3bbc552} +Qt Bewertungstabelle} + +\end{table} + +\paragraph{Gtk} +\label{sec:orgd25230f} + +Gtk ist sowohl für Linux wie auch für Windows und OS X erhältlich. Gtk hat als +Projekt der Gnome Foundation seine Wurzeln jedoch ganz klar in der Linux Welt. +Gtk ist \gls{libre} under der Lesser General Public Lizenz \footcite{gtklicense}. +Gtk ist ein Projekt der GNOME Foundation einer nicht für Profit Organisation +welche die Entwicklung diverser freier Software Projekte koordiniert. + +Zu Gtk gibt es keinerlei Vorkenntnisse als Programmierer. Gtk wurde bis jetzt +nur intensiv User verwendet. + +Gtk integriert sich nur unter Linux wirklich gut ins System. Unter Windows und +OS X können die Applikation schnell etwas fremd wirken. Dies ist gut bei der +Applikation Meld \footcite{meld} zu sehen wenn man eine Datei auswählen möchte, +Abbildung (\ref{fig:org0ecf563}). + +\begin{figure}[htbp] +\centering +\includegraphics[width=.9\linewidth]{pictures/meld.png} +\caption{\label{fig:org0ecf563} +Screenshot der Applikation Meld unter Windows 10} +\end{figure} +Die Gtk Dokumentation empfiehlt \footcite{gtk_setup}, das man unter Windows das +Programm MSYS2 installiert um Gtk einzurichten. Zum Programmieren an sich +braucht es offenbar nicht zwingend weitere Tools aus einem Editor. Wie auch bei +Qt hat man jedoch die Möglichkeit das \gls{gui} mit einem \gls{gui} Designer +grafisch zu erstellen. + +Wie auch Qt kann man Gtk entweder direkt in der Backend Sprach programmieren +oder aus dem \gls{gui} Designer dann als XML exportieren. Der Code in der +Dokumentation ist in C geschrieben was auch nicht die zugängliste Sprache ist. + +Die Verwendung von Gtk innerhalb des Programms scheint ähnlich einfach zu sein +wie bei Qt. Die Installation ist allerdings unter Windows eher das Gegenteil +von einfach. + +Da die Kenntnisse gleich null sind ist der Lernfaktor auf dem Maximum. + +\begin{table}[htbp] +\centering +\begin{tabular}{|>{\columncolor[HTML]{EFEFEF}}p{4cm}|c|p{2cm}|p{2cm}|p{2cm}|} +\hline +\textbf{Kriterium}\cellcolor[HTML]{C0C0C0} & \textbf{Gewichtung}\cellcolor[HTML]{C0C0C0} & \textbf{max. Punktzahl}\cellcolor[HTML]{C0C0C0} & \textbf{erreichte Punktzahl}\cellcolor[HTML]{C0C0C0} & \textbf{Kriteriums- ergebnis}\cellcolor[HTML]{C0C0C0}\\ +\hline +1. Cross Plattform nutzbar & 10 & 10 & 10 & 100\\ +2. Freie Software & 5 & 10 & 10 & 50\\ +3. Vorkenntnisse & 5 & 10 & 0 & 0\\ +4. Integriert sich gut ins System & 5 & 10 & 6 & 30\\ +5. Ohne spezielle Tools nutzbar & 5 & 10 & 8 & 40\\ +6. Lesbarkeit des Codes & 5 & 5 & 3 & 15\\ +7. Einfachheit des Setups & 5 & 5 & 3 & 15\\ +8. Lernfaktor & 5 & 5 & 5 & 25\\ +\hline +\textbf{Total} & & & & 275\\ +\hline +\end{tabular} +\caption{\label{tab:org20e83bc} +Gtk Bewertungstabelle} + +\end{table} + +\paragraph{Electron} +\label{sec:orgde09806} + +Electron ist ein cross-platform Framework zum entwickeln von \glspl{gui} welches +dabei jedoch auf Technologien aus der Webentwicklung benutzt. Entwickelt wird +Electron von der Firma Github und ist \gls{libre} unter der MIT Lizenz +\footcite{electronlicense}. + +Da Electron auf Technologien aus der Webentwicklung setzt sind hier im +Vergleich bereit gute Kenntnisse vorhanden. Über die genau Funktion und +Implementierung sind noch keine Kenntnisse vorhanden. + +Die Verwendung von Webtechnologien macht Electron zwar sehr kompatibel auf den +unterstützten Systemen, oftmals sehen die Applikationen jedoch doch eher wie +eine Webseite als wie eine Desktop Applikation aus. Ein weitere Nachteil ist +der hohe Ressourcenverbrauch da jede Applikation nahezu einer eigenene Instanz +des Google Chrome Browsers gleich kommt. + +Bei der Installation muss Nodejs und der Paket Manager von Nodejs, NPM, +vorhanden sein. Zum Programmieren selber braucht es keine speziellen Tools. Ein +Editor und ein Webbrowser sollten aussreichend sein. + +Electron Applikationen bestehen hauptsächlich aus HTML, CSS und JavaScript +Code. Wenn man nich die komplette Applikation in NodeJS programmieren möchte +kommt dann noch eine zusätzliche Sprache hinzu. HTML ist ähnlich müsahm zu +lesen wie XML. CSS und JavaScript sind relativ angenehm zu lesen wobei es für +beide keine offiziellen Style Guides gibt. Was bei Webanwendungen jedoch immer +das schwierigste ist, ist der wechsel zwischen verschiedenen Sprachen und +Konzepten. Dieses Problem hat man bei Electron leider auch. + +Das Setup von Electron ist etwa ähnlich kompliziert wie das Setup von Gtk und +ist sehr ähnlich dem Entwickeln einer normalen Webapplikation. + +Da an der IBZ Webtechnologien bereits intensiv behandelt worden sind und man in +diesem Rahmen bereits ein paar Webapplikationen erstellt hat wäre der +Lernfaktor bei Electron wohl nicht so gross wie etwa bei Qt oder Gtk. + +\begin{table}[htbp] +\centering +\begin{tabular}{|>{\columncolor[HTML]{EFEFEF}}p{4cm}|c|p{2cm}|p{2cm}|p{2cm}|} +\hline +\textbf{Kriterium}\cellcolor[HTML]{C0C0C0} & \textbf{Gewichtung}\cellcolor[HTML]{C0C0C0} & \textbf{max. Punktzahl}\cellcolor[HTML]{C0C0C0} & \textbf{erreichte Punktzahl}\cellcolor[HTML]{C0C0C0} & \textbf{Kriteriums- ergebnis}\cellcolor[HTML]{C0C0C0}\\ +\hline +1. Cross Plattform nutzbar & 10 & 10 & 10 & 100\\ +2. Freie Software & 5 & 10 & 10 & 50\\ +3. Vorkenntnisse & 5 & 10 & 5 & 25\\ +4. Integriert sich gut ins System & 5 & 10 & 4 & 20\\ +5. Ohne spezielle Tools nutzbar & 5 & 10 & 7 & 35\\ +6. Lesbarkeit des Codes & 5 & 5 & 3 & 15\\ +7. Einfachheit des Setups & 5 & 5 & 3 & 15\\ +8. Lernfaktor & 5 & 5 & 3 & 15\\ +\hline +\textbf{Total} & & & & 275\\ +\hline +\end{tabular} +\caption{\label{tab:org9fdb0dc} +Electron Bewertungstabelle} + +\end{table} + +\subsubsection{Ergebnis} +\label{sec:org802bfbd} + +Aufgrund der erreichten Punktzahl, Tabelle:(\ref{tab:org618aea0}), bei den vorhergehenden +Variantenbewertungen, wurde entschieden für das Backend der Applikation auf +Python zu setzen und fürs Frontend Qt zu benutzen. Ein kleiner Test zeigt auch +das die Kombination ohne grosse Probleme und Anpassung auf Windows, Linux und +OS X läuft, Abbildung:(\ref{fig:org6c1e76f}). + +\begin{table}[H] +\centering +\begin{tabular}{|>{\columncolor[HTML]{EFEFEF}}p{4.5cm}|r|} +\hline +\textbf{Variante}\cellcolor[HTML]{C0C0C0} & \textbf{Erreichte Punktzahl}\cellcolor[HTML]{C0C0C0}\\ +\hline +\textbf{Backend} & \\ +C\# & 279\\ +C++ & 271\\ +Python & 322\\ +\textbf{Frontend} & \\ +Qt & 295\\ +Gtk & 275\\ +Electron & 275\\ +\hline +\end{tabular} +\caption{\label{tab:org618aea0} +Variantenbewertung Ergebnis} + +\end{table} + +\begin{figure}[htbp] +\centering +\includegraphics[width=.9\linewidth]{pictures/hello_world.png} +\caption{\label{fig:org6c1e76f} +Python und Qt Applikation unter Windows (links), Linux (rechts) und OS X (unten)} +\end{figure} + +\subsection{Vorkenntnisse} +\label{sec:org9e04095} + +Die benötigten Vorkenntnisse wurden in den vorangegangenen Semestern erarbeitet +und sind in der Basis gefestigt. Erfahrungen im Bereich der Entwicklung von +Desktop Applikationen sind zum Teil vorhanden. Jedoch hauptsächlich für Windows +Systeme und C\#. + +\subsection{Testing} +\label{sec:org76a0fb9} + +PLACEHOLDER + +\subsubsection{Testfälle} +\label{sec:orgbfae27e} + +PLACEHOLDER + +\subsection{Werkzeuge} +\label{sec:org59ef66e} + +PLACEHOLDER + +\subsubsection{Versionskontrolle} +\label{sec:org28d9476} + +Eine Versionskontrollsoftware ist in der Software Entwicklung heutzutage +praktisch nicht mehr wegzudenken. So wurde auch bei diesem Projekt eine +eingesetzt. + +Als Software für die Versionskontrolle wurde Git \footcite{git} aus folgenden +Gründen ausgewählt: + +\begin{itemize} +\item Ist der de facto Standard bei Versionskontrollsoftware +\item Läuft auf allen gängigen Betriebssystemen +\item Es gäbe gratis Services die man nutzen könnte (Github, Gitlab) +\item Man kann offline arbeiten und Commits erstellen +\item Der Author hat bereits einen eigenen Git Server zur Verfügung +\item Der Author ist bereits mit Git aus vorhergehenden Projekten vertraut, +dadurch muss man keine Ressourcen aufwenden eine neue Software zu lernen. +Zusätzlich hat sich Git in den vorhergehenden Projekten als robuste +und schnelle Software erwiesen. +\item Git ist \gls{libre} unter der \gls{gpl} v2. +\end{itemize} + +\subsubsection{Editor} +\label{sec:org3519e9e} + +Sowohl bei der Dokumentation wie auch bei der Programmierung wurde +hauptsächlich der Editor GNU Emacs \footcite{emacs} verwendet. GNU Emacs ist mit +32 Jahren (obwohl seine Wurzeln bis ins Jahre 1976 zurückgehen) wohl eines der +ältesten noch aktiven Software Projekte. Emacs ist \gls{libre} unter der +\gls{gpl} v3. Emacs wurde gewählt da es ein schneller, schlanker und sehr +flexibler Texteditior ist. Von normaler Textmanipulation über Taskmanagement +und Emails schreiben ist alles möglich. + +\subsubsection{Dokumentation} +\label{sec:org3761443} + +Diese Dokumentation wurde in Org-mode \footcite{orgmode}, einer Erweiterung für +den Text Editor Emacs, geschrieben. Die Syntax erinnert an Markdown und +Org-mode bietet einem eine vielzahl an Hilfen dafür inklusive dem erstellen von +Tabellen und Spreadsheet Funktionen. Für finalle Version des Dokuments kann +Org-mode die ursprünglich Textdatei über \LaTeX{} in ein PDF exportieren. + +\LaTeX{} \footcite{latex} ist eine Software, welche einem die Benutzung des +Textsatzsystems TeXs vereinfacht. \LaTeX{} wurde gegenüber einem "`What You See Is +What You Get"' (z.Bsp. MS. Word), Editor gewählt weil es einem mit seiner Markup +Sprache erlaubt das Dokument in Text Dateien zu erstellen, gerade für +Programmiere ist dies eine sehr interessante Lösung. Dadurch, dass \LaTeX{} auch +nur aus reinen Textdateien besteht, kann man die Dokumente auch ohne weiteres +in die Versionskontrollsoftware einchecken und die Entwicklung im Log +zurückverfolgen. \LaTeX{} ist \gls{libre} unter der \LaTeX{} Project Public +License. + +Die Grafiken in diesem Dokument wurden hauptsächlich mit dem Vektor Grafik +Editor Inkscape \footcite{inkscape} erstellt. Inkscape ist \gls{libre} unter der +GNU Public License v3. + +Die Diagramme wurden mit Draw.io \footcite{draw} erstellt. Draw.io ist \gls{libre} +unter Apache Lizenz Version 2.0 \footcite{apache} und kann sowohl als Desktop +Applikation wie auch als Webanwendung genutzt werden. + +\subsection{User Stories} +\label{sec:org8b5f298} + +PLACEHOLDER + +\subsection{Use Cases} +\label{sec:org965b415} + +PLACEHOLDER + +\paragraph{Anwendungsfalldiagramm} +\label{sec:org92e0194} + +PLACEHOLDER + +\paragraph{Use Cases Detailbeschreibung} +\label{sec:org76d468c} + +PLACEHOLDER + +\section{Realisierung} +\label{sec:org4ce6199} +\subsection{Benutzerinterface} +\label{sec:org55de277} +\paragraph{Inspiration} +\label{sec:orgdbc0d9f} + +PLACEHOLDER + +\paragraph{Frontend Umsetzung} +\label{sec:org60a9be2} + +PLACEHOLDER + +\paragraph{Backend Umsetzung} +\label{sec:orgbd3aeee} + +PLACEHOLDER + +\section{Ausblick} +\label{sec:org8bd82c3} +\subsection{Projektmanagement} +\label{sec:org39784a5} + +PLACEHOLDER + +\subsection{Umsetzung} +\label{sec:org0d3255b} + +PLACEHOLDER + +\subsection{Gelerntes} +\label{sec:org8f28034} + +PLACEHOLDER + +\newpage +\begin{landscape} +\section{Arbeitsjournal} +\label{sec:org64fdba0} + +\begin{longtable}{|p{2cm}|p{5cm}|p{5cm}|p{7cm}|} +\hline +\textbf{Datum}\cellcolor[HTML]{C0C0C0} & \textbf{Geplante Arbeiten}\cellcolor[HTML]{C0C0C0} & \textbf{Erreichte Arbeiten}\cellcolor[HTML]{C0C0C0} & \textbf{Eindruck}\cellcolor[HTML]{C0C0C0}\\ +\hline +\endfirsthead +\multicolumn{4}{l}{Fortsetzung von vorheriger Seite} \\ +\hline + +\textbf{Datum}\cellcolor[HTML]{C0C0C0} & \textbf{Geplante Arbeiten}\cellcolor[HTML]{C0C0C0} & \textbf{Erreichte Arbeiten}\cellcolor[HTML]{C0C0C0} & \textbf{Eindruck}\cellcolor[HTML]{C0C0C0} \\ + +\hline +\endhead +\hline\multicolumn{4}{r}{Fortsetzung nächste Seite} \\ +\endfoot +\endlastfoot +\hline +16.12.2018 & Zeitplan erarbeiten, Ziele dokumentieren & keine Abweichung & -\\ +\hline +23.12.2018 & Lösungsvarianten erfassen, Lösungsvarianten bewerten, Lösungsvariante bestimmen, SWOT Analyse erstellen, 1. Meeting & keine Abweichung & Marco Frei hat noch diverse Punkte eingebracht die, die Planung ziemlich durcheinander bringen. Bedeute viel zusätzliche Arbeit.\\ +\hline +30.12.2018 & Controlling erarbeiten, Ist- und Soll-Analyse, SWOT Analyse, Umweltanalyse, Massnahmen Katalog erarbeiten, User Stories erarbeiten, Use Case Diagramm erstellen, Use Cases ausarbeiten, Anforderungskatalog erstellen, UML Diagramme & & \\ +\hline +\caption{\label{tab:org270babe} +Arbeitsjournal} +\\ +\end{longtable} +\end{landscape} diff --git a/projekthandbuch/projekthandbuch_titlepage.tex b/projektdokumentation/projektdokumentation_titlepage.tex similarity index 100% rename from projekthandbuch/projekthandbuch_titlepage.tex rename to projektdokumentation/projektdokumentation_titlepage.tex diff --git a/projekthandbuch/pictures/kontextdiagramm.pdf b/projekthandbuch/pictures/kontextdiagramm.pdf deleted file mode 100644 index 82e7cfb11fb767d57e1a360a992762a151527660..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19294 zcma&N19YTc(=VD#Y}-yIX2-TQv2EMV#GcqrCbsQ~ZQFKoGynJfzV|!#oOSM9t5^54 zYgg6&m7c2Z^)#8huqZ7f9Sbzs?CJ3~G$SDcp{;=hG&eWBkb|+lldS_GrI49}t+lzc zH5D|yyo0Tgv!U@9QOVL=pZ-gh(3*|qYvUhgb6Xo>eJ5i=N?}eW21a&9CMH%!1{OwU z05t;x#n+fv!ibU4Sb;eH_0y97{Pm&OmTz^z{p0I?w#bA$KQB^KijYRvTg}@; z-wQy_8j5K^SZDlzq%rshZDJic{yapJ&xfk^ORp~B^@I8IFhQH*($pbxcFmk< z?$J`DEG-yQL7M2at%*$UMmB5r3$!!G=80Nrxuz;;J0XnWrK3veJ&UUPp(n zj{|(5Bk=QB*GGe6^b_u<;=yJUUsaPY?WK*};5BHtCx?3>ZVM2i0=O$D5QK*EM$#O- z%|kbm-kAC%G-xOO6L?^anIqYJslE!54Y1bW`uJ>HJbg?6hM#6&IgfpP+tt&~Ea9!} za7zL5LM$5r%)S%4Az%s(RmjL_AJC2~BWWB=X@@L=w|@K+hKiNiIDZZvJZr!fH#ftW z8R8zuGO0o&o7%c^b=*&9a1%bnWN1m`c>H}V|vPu6ODwu;Ej8;&hq z-NRlmY)lZq&&7i{1dN~GBAp%Izu z)bCgd1F`_dTUv+paf?w1QlRdRVcK^F4q&lkx-XV3@vC@r285M9uuxJncm1#0TP7;dBYG0}<2grr5Hfd80VMI+JPFk13 z%x|SLD;xJzj|bOo13^*9C!@0zV+i<$2Ik&b_N>AJ@=(Ig8HL|f;zX#*^gchcH1%D~^gdXoya~C(Rn}?&I*Yk# z@7_7@eVrtOxEnqf&f`jkd`Y`=WYOc5=PK z;LTCeJm)`R(_>wTZNMa5yWG*-r!UJg3`!N}nRm!)kk`uEkO#^JDph7O$o$}}Njo`D z{`=Qeizjs)X73_^BY5hH2ep{vHSEg2#)=~*9o=x*0sj#oS{qHX z4Pr>ewv5P2D!;kBp<`Ieq1hRlf{)V4?XgIa%C69vMPSgK;xf||;WPo5hNWf7!>=7U z0H98k^v4S38wjy3ufY4y3t-Z+SAXYvxeVMAzaN-K;7Yt;1B)e0%(&XVS}yKrp;J8`JkQYHLDG?|%SsY>@TV$s*?N2w zF63@l0dW>cTgVW=8P5P4E9N8dDUh@FUWYIp`!OBIGL^>RVUHGwhD&Hh;>#DMp7U6= z-adUPh< zKpH2}>#h9Hv0`n5{_g^BujD?$@deDi6dij>NmW(9d+Aw$ytVINQme{FMbidz*Pff- zAXEbv5C3+PfA@xe_Z8;<^c7`yJ7Yq6A$=!(D_hgA?xt^Q>`2J+wXgV}HuQJ-?~eE{ z_J6p(I-aewjT0dwG`*C$kt3ld>t8AD|A_rv|8HW@^oqugw$2WQU&nlP*spGCsATN) zCH+q)rB^m~b0Vadu>OJ}`0r1le}777L(_}6If*Gb{cW&cvSJK`Y=4i0rWa!*1pNDo ziIDy8)fWnSQQI$cUwonrgdG2({iVtn8=311+PV>HGJFx4S(yl#H~?R&g}%6rZN8BF zZMt7N<@FuDmj7>8{5|mBHW}*wHC<4KkY3i-!CK$yKZgIs@^2;~fxk@uVwDymWccdY zlK;G`{-w)E6Ec30lmrN!9Gt)U`Tt4TUvvKdDr5Qo(Dm01|4T&vy68*B*}&i8uk6zr^%Ej2p+))3^^)_EKhq;aES2T>i9Aoa}PAd*gFKp~+_?1-pHco#9 zzQV}(*Q<(O{#3U8VPpPxOd(|an{NLjo&I6@Kfw5_;jcaibGyGo7vtYS>?;ueM>PKp zSx7?ouiRhcOkY8i5LUJolMt5CxBCyyf5=Mij!wqb5;i8be^Wxy*wp;1B-{xp1-=F? zET08zF#+iH?yC!0{!-{^M9ey{tBnC>OU^{_YLHq*!*uH{7>-yReZAg z)?fFQ|B*vq!>g&|*CEjK0)NxSi4Xu_pkrXkqw$&;_KFBZYW@5YGwSlvi@d+;6L?E%fZS( z$Hvag%0WoW!p=a)!3tntCS+t`VWngL>x!=oV`8LZW&azyf609f*~Uy?`2Hr|f6Dov z^}mh%zmMU}Y+ptFuc4grD;1d8*#DQYyaP&4d0>WKXTErngIS#-!8`SjG3NwA+od$`?NL!#S;kuj1PRp1fPgxjqVa?Ce&AV&3HT)gTpnJAs+2PG z*5t+#h;b$IC{m92t5+RGd zroNwo?#leTr$3_H$Tjr_=dRpaL{Ot~f~g#)ggAHu5&%!_?7ZZ; zcw^f1eb@4!ns!ay#*oA=ZEpkDZrBSk0^%!pJ@ig?*Sz__!bjzB>WHye2jXO4n6_k* z*p?!IvE!eIbrBp34 z7Gj^MBXke%fQ-9eh3;G*ReNU9%EzCWia+LZ zPMlWR{tXcRJfnsDGrVQ8fR_{5T8^@S$-pZU62`8}?-X-ATkOr?#MghA!YT2-NC>{6 zF6H7-p~Fscl4K)!P#--JQPOOjt&LZY$c}zhdUqMtWU}3Gzug=^$}#WSbMVfyc}Q&u zbkmG@(X2%w1K_ZwC5%nC#u3Hh?D#{+_oMUu^qBxhY|y9{D)8+->=nhj#T* z3uRa)xSb)!180Je;$>Ykx5~A-5@8s^F38NsBtmv2E>bI(&%};~JN>1{p$x^lJQQE^ zA?fAQbtSzqFJFGW$i<&$_?!1%qQ!d8wzt0=SjGt9u$5utq>P>sS{1xuLZ$IFbO_EN-IrDX$?<8X$>$ydVmICd=S1}kV39#` z*V=S+rrwiFDo`7z?@^}Z1xW?2U?A(LHbtDGD1~-E&rmu!=+6e^*DcBKR-sE>!k)-* zj|I2b#*eEnOZy+_cR`^WyPU_%Rkt7ClU&TZ);=AqJ5DbOyG~;s$hr%q@PCs_ldegW z0GH5HNb(-e!~~UIyxx<9`H0L(JEcw)l3Nn)HL9&B#v0y?N{s>mT6s;*w}Ps#bhb=Um_$cmyK-9|lE$Z8Z(JEx`KAz4gfM>*6VpwP~%dCEvL;5_;tMja4P( zvp6v_jFgO5>ay3KU(LN`{ez#J&Pk3W=SqE~pRIFKjG7g7h4ujfB7jkD1t0G7?WB`i zhOj|KwmQ(ZWYD@5XjOpQFRp*)g zJILysW_c4rKkEPlWW=W_$ zab_E>SEm70hv+P+Cc146@z|2rk7D|p@6#e_Wh;5*1I22GSU+iHc4FyOM!k97XH?EL zue?YKo%J1+o9Iy~zK{nS5@-C{kXE!51k@#RSNxG?kS!Diq!<(`f-ds@4OGWZK4G_^ zy2dfcDwZA{1PeRJ#8_`yBxOG@D|DiyH!CT@)>e?f;7QZeJ!)p0g9JWXGH=c#qI#A$ z=%f&a5>ywlLB}6<@~fZ__nrkY7Bck>*Fg0TLL(9FsCiV06lYHswpNq|eA|b?w(_Ck zZ4KQhmd__rJ&WwZH_7`@o`?7D#4gNPK^A?~Q@Wp+E2l$S;Ldo`hI~DCeHaWfuhBD> zda;WbGirt-jV)U<83QIBr*!bK?Txt|X+6|4X2rEB zcIdZ_E9#P7bRxHYI#M zWYtQzhO6j{*n@WjBwZ~9O@A_lAgk^3%oY+w`OqC6?g za^vd69Jvh;Xwea8MD1RWV!LVTAb;Q|KtJ?|8vOq7WLdyRfGAT`zXcOkMb;vVQiHue zAC4KZvP64x-1&2;2x>#ghn-Kr$Ch%w*i9Bs_Auk#jyefT?%rFNHwjB%Nx*>-1);wjo`up@MIUNOrr;pXJY$=xJV)Qe2uw-Uh!%%;d=X|{SI2LB!YIB0?}A9424 zcXWu(y-5<0bapIsC^ti%o;mFVIE6Iw=b-M&Sy`z1$r8^VVfeQd>3^c7M8+1J~hB^ zC#U}8cE&tJC`1&KX>R9IVjpw^sM*7&q(9!s@(4!j=FWv}i#c7x50OR%<4;AK6GjiN zIENLLh@`5B`F=>V)q|Y-Hyy*)Ccg>eW!ACrM}dyxVDv^QPi}?DalO%dD_QwmEuXg~|9s*%!&Q(P;aG}_doe{e^H5if;dd@M^SKT$J2u*6H0g+37WyBnF1MBZ}`g*{cx zEjkbmqwo!z#`bHq-PeeyReiCXp?{_c zy9{LgP0gO@0EyffbWWT#A-d5iE~Ys3&YhnyRHTJ+Ld~GK4o~8|a{D5Ua6#TK;Q4C* z{M&Y6KIgp95xYlTMok)1B1QbLL22ee3x#tT4!94iw<-t#C8i(8i1i&Ti03AUnkap0 z1SHh&26Y)PfHRWcP=yP{0|mdRuD5RnUI&eH9*IGbhh&~vk;l-MW22QXAY<3yaShg4 zp6cv~KtNaY9WinpvJZ+X$R#M4r7PHh#%9^m_&6@Ybwg(G>|%5FBD*4=2vQXLO|L-V z?j31crMEBWv1GH!*weR}PLUi`xAwBLp10HJ(R<|LH9iXCsm>i|Gv@_#QxlQ}eA7Ot zG>AvpS1!R_R|X<<^blow1yp=iayZn+@2ET~?m;rG5q_q@HLMfpI7FI=d6B4h^~<~= z$ZSL%k_^H(sbg?+NuuTb&8l-z1S5?X{N zx5e4I=#6`n{dt5O$>`KU>OrDY@G*{}*{2Vx*G=ipU251vzUj^ngk|QHNqpa%P|FX~ zoCiMA4D$BVZN7&s+Ftu!;NEilRPP zzmRosrj`v6$lK1lb*Xl>4KF!8A0Lh1bSX(Tg@{*at(cZI(=FmSNjH+!g+Az%@Q!@4 z`%&6Z<828_n?k?c!-6Kzx!&Xi3WKSMi%y5Iv;WTW!$!ghZy1jvGR&* zGgB2hZWNL1K4uQLH})cc6W+j8g1|3GQjxc0%QfCJ+Z74-s-zu|!Z#q74~JS_GDIZ6 zJyytJ=g#IO+bOnCV~_tC0@|rD2u{x$?Ox(VhyS|zicv`~0q>$wJmKIQ_V~W$Gk==B zZu*&f^B!nO+*yD*O2^MALyf>G&+RPR320I13{B48fF{}hK)bAI-mG#eYm&#kkbwE= z=$A+_a>%_3}ts^RRDxsSJ z!sAvSQOuMpX=~DT_L&=jxP3nf{D`!h!%6 z;dEip>Du*k;gB0uJz2j!DV{($f~g|zIz(PlRd=4Kf;1~+?Gvz>^D_R!6Mn5@Hca;R zJqQc@wT{V83~)Q|^N`xW>OH^-=iy+Ic|4#2xY!ssRr)7IfB2L76@D9|Y~>?M{20Ic zN8Q-FPs+oX4yP_|un#_udJcYwv^94vLdSpGm8QxcgUlId03?bg)o>mxk0LS_1Sm~uM(M;HKK>BcOkF6pRew%4&7tJb6B=_kA8bMC1o0B^W-JTZHE%2cSD9% z%?ibNg05w4n9|i1xQ)(fwg-jH#VkM=zf9ZHMR>vTTF#f z`I5y0sb+EHkMBuXqgsWc>UnGBzZKZ18b-%P@%OVwS4VwOF%b6NpYPiPCJ!EOL!U|B zs5+Agwsda^p6I`q^#E&2^QF;gOc~UJstM94pqCpL?0bv}kD-n^jlqt|{8FW{?dL^( zwL7CH#|LDu>HNML9a%yj$;MB%C1>x zon~En4!jD!%G_vbO~1t2Hhp1>&?L6JdlvSf?D?xBpJ#Jpbz{<}<6Y%7fE~SfD0Me) z$6!}+7kW2*R}#;5h$|y}cGBD-gq~k8h zAW~8HS-)+%C~}~&>oLs!GkDA%jW@vZ8q4b!X(zOTDVJwz_4!fC$ElZ#RGUI4}q)3wbs^`3Z%zjr>>Tp(GHs~D;{ ztk~4_tzTH}HmR4Xm1+2~deOjRvud@bFA( zPfJ%F);}Z_1|q>dg>?pNo9MZi(Uu6fVJ>k#avbQe#b6>i$f+Ge(}=d zydvVV<{WkfXI&zv$MYLZp5XcXIkYv5&Pn&2m@oZ-%)JOE%N2htEis%N=-E!sy0k)G zwVtLXy8~Wx3(EkY^@6!j=RP+?S$h?Mv)O?=P$Vwtvo!z1LBC7%v;L%bUpGPQsdatv z+6nICB(n^&rC%Aw=FKJ1k%J5JR+4_&ac?H*N#+0yZ9 zzByk*wO%lHlynt$TDgs1m2IODS!e9HA38IQ*CK3Ji-8Y8nl2}waXpZbNKo$`pvmxd zjS^3ZCvqF-F(n@n8@JSE)w|+cPmUndBR-6v4J&f7REi!JW%NVdi#nISH2-;p7+A|u ztV)xBvAii5qp2zytUs>xV%FM~D`d0;cZH%A{sniv<(#@wj5p0YEo-SeI_J9bxB_-= zdak-d&wBhG;P+vlzZn~;NR;|HArtF&cb5@f!oS*FMN$Il`K zs&0$A8ObJK*^c>-zh+MKgilkiRtiK@58#U44H)bDu!0Djb4e&TOAeCv6owY$QRs&o z4DlOmmmaFYA2$vAGv zs-j8XT1|5yx~u22)OH4NlCJJ~laDu2DQ76Q%=p0g8st67JKJ=;x_o%X&ebDZt8~V~ z)i-gXd8hFJcAn{YM*YC*9u=k*op1%tqYTys2e-hdU-v#GL-1)`y}en$J7ReM-znYwSHxwI*`i4pIgSn*K2@y?7@J*@(!+@IpislRUJAp;eN6-f;jH=Kw zY@_hKD##o^YtWBVxns+F=NE8qp3OepTsI4VuX-p0{pO{E3R;0xvj1% zX6|6!9jv!+U4ysW&|O0?D+=c+4~)xQlMTBoQ0E0U(}vFFHnY6*ytD9@mq#uxn9wi3b)7+wR+vxaX6>Eca?hrPI_HXJRxV}l3yYTpvncO{Fwvbz4++h^As9B?$ zSBLI+zENG3maP-3*AE_L8v%` z?KFH_NWTxZuFkwS+_xg;hM2^8!Kn(D$oGlSn2^p2$=XI}A zwg6{SCADCSA9!U-4W&>PdDz8|)30SN9rBl@k29X9Ja;}GzN{KiiiXM&*yScCp?5KN zllKVQ6z?eS%|42s%AeAFg?ItUcPKB6?Dex6RE;EGXDPT@Pc&C7g zDKLjz>OBF#aOk%qc%B?Y4?+4PIPV<#yTA_ypvpjhhMyC*LVA?2f!p$+BzmNg0n-fN zm7xZdxz{jNTv^-~pf?pLBMGv^x}2%)$EY_2N+Ze8avCz7%5I9BrU?`ssqII&H#tpT zkF9V$yWV{4Jz~VWV&H$$X#}?EQ?xiMs|5hhb9?zGfK!(F_8hwo=#sP&2t%=h_Ba0;BJh5=78PXcv5W z{eBj>xaAy91TRl|4L*Qy(YzfSiM3I`HV=L!llsCMv(>Z~Q?qPq&#+XvHYeYi zXrjoN`32TfCYyiDysoN;LP%(Ylws#jJ6Zs>tdn`dVcGr!yNsQ(LiuP~3KEs!k4E_v zN0A@6`Aqt$z}@qrNjzA8phPOOL!=dquxsH3N-!{VWv>JX6V@G1s zJO0GN8>m^0-n7HE7R_~~?ggJc#F-2A6sU@FrPM^e)%1jC-aGUZ_O)bI^XJ<+bijpudvhe)N>-uDY^(1E1XOs+PFc=yq#A5qAc) zT^p|jR&D8cp*?O}K5s=>^T>Y7BBk9M}1)W`J06-W1clYVTNpfF%YS)fWjuR^$=&( zje<2stXZ5-P&EG#-a5)uIh4vGyT_3houI}%)5sihZD1C_lMW7PsB+|oTDzq-0m zoJ*22zd%CNz9Oo&Rad8IL4_t_nT|eHii|=_foV~jsi}rE&59#-wl=t;Tff|!dQ-o= z4`~sO;^V?gEUx0AeeYHBLucd_#kNTaOjDr0-%FDgeHGfGZ8AemNj^hv{2bNx;kn*Q z;2?=*Sd~Q!W?k|?I+BoB5_L|L;|9ip1n>DKYlnssOP6b_bsOw?+Qk!TUtytpdroW& zecvF%E_u^!=&9|*LEoxoOHvfB>W5^wg?fz{HDv?aTAVJ9&ur??&3K(kJ&A<$hCj<4 z1@%Q-VOy1guC;0flE3839tm++$1W(bbs}8dz=;OgsWy4m6vh09zkgLGE9VU^iX}N( zf}Q@>m9;{P0$6nXTb>3cgO{d}O@Va1RSmO&jTqOskLg$?Z5#B;G(O{^OjpX~gs*E% z6;0D6`}76~4wzpag_s<+X@zyhS-(J_H9cM7d9I0;=XX(G5%F1?;%ld`ubs@{bt=ve zG^LqE z@weKMsCMqFj!zM4-a}GD1ky;jO@rBqlA(p9R$-OJ(8N-Z<*PtXX^e$v#U(h)Xs2G+X zb94?ath2=>hH;S<;uNxq9Fz74^hwAvqOer?yJJl;iBhjWdn5mRPmp4o%Gvo@HE>F4=+(R*%c3)po+PQZJS=Ad3T;HL&)%gl6393 zORhJQKEW=T@0Xp85|nG<^noPQ;kyj-#e*to#%D6AmYp+{YcV4RB-G>6WrE$dG4jRp z5c0*ma&L!ueMdpi>)RLa>zCfkFTJ1hWZZs(Yr5i3t)IM52<_6nfgftUf$5TNkWntx ziC0ry61{yN;X$FFWKbB|+Px%Ze?$a(NpQ$AaI|4$$ha?|{d+g*ZWLsMW#f<~c#@pb zr-G+KV$)Vwza4CAG$&uN3*?qO(}hP~1`Gs+Lbk`P@-KzCTJMIeVc4+=>sM*%+Th_L zn@3$;H*{)-u0)Gfh>^&i_lk3}W^@l*f9Rc^2vO7y9TnIN6nBRK6pXTi${Q)<8qsGf z;81_r<^WseL=T|Z_cbojoZ46c%SJ0x02^@dn!Xd)72Zpm;PqKAbc8u)3{%%6j>6Sn z)NosPFDsg?%Pj46HZZox&MoVuT6OR>!mC=>ZJ3q{wbuNRF;Ocyaa;)B+h4d&z46K3 zcea{kvt(N*NISK(Ufr;OSv#m{#E8Rs@&~SVQ0=10B}cR7 zS3o~}khar=7pCIXw)KS00>;n6W1Gv=H6M4pjrI-(s#*0=z2aw?d{)lty%|rx9$N}5FgRaeOpo5wsoiZOor*PvOa>Z&k9NyI4ZDysx;atuAY#!J)_A zy|2GL2L7nOf2#WkNF~B`(cDgK=?@)}_Mgna+O|X8Q$??3*83G-B(qX&Sqt^HX+_~& zEJivhh23$!lB19EEP>>i_PMzY5L4T14(AzAEDKI(NvMGa*YScW-wm~N>(heLEOyRZ zx3lK3fM1CVvd)PIi?R-TtBn&Gc1f!!{pYFCZxsx=dRJE!C=OD$P2+zusq)Xx4R6at zbr%+Q20P1cDreNP%zjJWvAW#-u!%u$8Vc_ejrjW-Jcv&64s%COL>Nuiky()#42Bh- z$yv!-jKY*HuFQMm)S{-DfR%srlkkR$pL0hXm>obdSXAg`6u=2-o+x|mnUmjsX_|>c zcP<99Jc{9K(qekS8wkMS?G+i2)%$h?3rP-A`jj zmTha=gTDod$$tE zZ+ebXjeR);p-$J9dA{XZvJH1n8ftVzl+B?$Q|b#LVL{-9(6!Y>BgjZKKWbUYR{7~y z<%LaTq6p1=+z_iHWiHz$pI_$-;4Ghv%O3QMDXb>4Vox8iF)~f^8KpFCyur_&XeyPO zOG>ltL#WiQe6K_x#HC?CF4LnMx1rCxpzp3Kk=JBA>W@wlJA7qiM<6iavWL4c0AA?kQS0Eo0!Tf1s3 z&p!=1HD#&+ubv&<6X0vcm)vulS+JuX-!b>F&i#Qhi4Q-zNEPXSdy^3AXA;>hK#e^@KX6G+rRSgqVTqeeLqfrWiX@Ttjxz^Wf$lp- z%V?lGa-=T?qt)okVWH)`gt+@kHgZ4d9qRVd%XLfY^s`N*0Y`Sog{Tj zVpVg=Qzy8Imra28T}-+B$p9(__*;7#n&Nr2Kr(ru6;^zVY0P55c*}Yw)#Dx}aU7Sv z@q&tSJ$M=w(H`tYu~E^dSQcZZ23CZHYwqe2YBOh>P}mvb%dvOB^C!*LH>Ps9py2RvkolQ_58yj!!w%(E61w6k_!e05k+BWdj1T44i>N zJ9?`p2GMV+RL|w0_5>wD>NenNz%RRLg!@JGWz$Gis;9V zW^JD?YIOc{VQs6Ss%y@i4~PdUbTN7Y3dRzSLLvLT0Oo&9wBGVk`>!}%X-VoyI{aFnVQaa<(%CG zo0mFDcYJm8u}9&>8*dSqSz>N1Xk*IPa77+tj5G%aCqWbNXneT*X^cS4T%j6jc;#O{ zJ|EF2GI6Od6GutC{8oMGkpBa;w!p1$fm8ri;zgWpq}eVObom(2mktYcgk z`(y7x?t-i0y*ZByo43467i-JRb+SX95pMaOgxtC9;~IY9CBovWEUxb2yQG}7wPw5i z@!fa<+OC$^fa%bl>+{CQIc~*zm@C6TfXcnB7Vd3^%s4CP%@o6cG7=jg5-bGl`Ic)} zTA-%K#Ia<9NEV9q$@M1_XG&jgf7)raYo)|?s-#!~GyCXq0u~O|uf_c{Y zGz=Q|G|E`oexzYVxJuElj`>aNY}jH#ZfeyeaCr8JMog=9JAvocX9Cf}GK;v4{Xv9E zZH*7Y`)A=X%(@YLEzjd2j;3*!Vn58y#xGKm6;^CNaNsa>y-vGrr0dFy!KH24I}biW zns7GEpBlEG>0^1Ek9FyP6g{k5@v3as8-}hE6!3^AzZQf9N62Y*5q6oS{(`=s9iL%l z3e*JSfXC;iY@{0Tg*e`hQr>_JyW+1@f4mF}wm^bc9h<)<0+fYRYp3|fAx1H_xWl*6 z<}PuMbCU=&4rvG(2%>pfsX@vy3~?Fum_;radaDac*Y_O2HgNVO{^`CsDlrlYV4kL6 zqI&-M-ZPeT*Zcf<45sbi&^p(qO2|dYz1oH%h9ZNe2~+1YJ3x~gn1&yrLh1~QKsH@u z7|?z!??L09S2i0IQu1!~{t_;PW*7>uje;j2C9af6 zeMvR7pVP+}X#Nwi!&g6t&JlEqG<6zAv1IZQprH^f$y}7=%Lx-E&e+I^kk8dJmF{%j zhyMUPHkPXk^hfY`)B*Q}Qu8r#9&g8tF;r4?=eAFe-f(<*lirvmMzfOePTs_PJ(!eT zT`%S~uZggCjL)L41Eh`LS(0!lQtzw+mnTbvO^>fdBSt1?7?TRgT)jF;PE(S0Skj&5 z5fd;m@RdSYS@0r$$ki7-GfClW;_^^XkPFMnsuK{*b8vDLsp=WL4$Efh_M_>AW;Ww; zGq({Qy0rRaySm)vrGlsS?F$xW%5l-7M=!`-q!%=v3+@7uWG=By!6VhwNA+3}xzrB{ zaG8WsN;TsNojYBhVLke^L`5DQxlvWg-r&^L%Lvv~REt1Gvoi@qPb^86@XJG@<qDq4Tk;-YRAiM~aUpc9e+M@y^`jXg(UJavkIfnNDr7YU`9 z()G#QJ$kKIVv^3|YD5q9Q-lk(HTs%TBLVXo&ggC|v!nM)evY#|54@V6m6W9$7ZW@F zG#ST0Ji2$IbCT-y+S%CmPAnvUkYphSS2x7>_-dV?e)Eqgma?bURvCkoS7XtszKc}k zg(1|f^9i-V!T>kHtv;-42pFf~oHzj=4<#YvRD6jj*-b*yZYCv`dxzyLqYC z<)Rcld6WE$*`p+Djg5nSYhYk`_^7gSiwPNt5gS;#ptRPlpois8+K6~J*p=&%^ZG&0o7^)G`}_` zw?0U2(psf`TC~+r+=KOak<@0{V`a0ao#?Pihwnl6vNi<1*%LI0Y~DPebaA%nx9W6{ z=NiLa>qy7Pb-!i)>cdepjWvHH6rOm`w*ywvKSw^V57=-0?@>3HKg*~ zUUV=Jq1wJT);c-TU{K%>fst*KbzDq6I6dHGL1GeO`sJ|$4^nnc&urAhNJMd`URh@% zn50yFo5jW-=&3mR!wpj^xzU6k4d(L)>SD=w0@vG&ah)L6t1ecaR|2e6_mqQKM(lg3 zg~@}|<;j)FjPk`H(WA)))GE*GcZZIzjc~{2N9MRTluUFttB4&NwM6#TClh9yT7k&u z$+*>%6w!^8i}AE^ye1KHdTCj|iUujo_04G$=1X9^{DeOzpu!mAj_^jq@PqbyGt)_Cs=NWhh?qn8$idhMMBNdq@8wPa4`vZSHKq#g4ja-z1fbNX>4IQD+@~L7u7$vQuu#Ca`mCp=Nv=@x8Df<~uBK zp=v%DcreIXGmnz&7~fh1^^++hND@u$&=r^0rS>sHvKxNVvYaz3R2)#z1Yav^bS+G5 zF?q|<%6{6VxK)d#^F#24HLUa&yAwyQxsLm6Ez?P#yrb!t( zrD+u1rtzrhNxN%S%z+_sPH~U)-_(fa3^s4pq^~EA53FU{$(;oby%G>{MYL{NA8w-q zBqvg~qb(7-?H{Qt55dkYyAhZ!40@#baOjnAN@H`&D^V|k&czP$97RthWhM+qqQSI! z2(gOaY0?GF>3qt6lrtpE!M2W~{b0sc9vo={R%Id3zMal{i~2)>6PHFEAeYP+mQQLv8f_OY2NR$bLEWR9vUXwef zd#zWa-7qxLjQd7)V%7(x3zLx?aO-Z}HQ0=vM;7vDuFRRWKPFf>g{BN%BdAI)5g!fA zXJoJhQ#wLCI%xPPg?et!38gDb$nym7LqPGDe3jD85%h8^Pys64(wymT|15|Gx9vzu zdiq+q_t+6$b98YPF7s85{wE?QGn;9jthwALlsvW8HH6VwZ;y^5u}6^gGnYc_MxW1g11iH>S~@6w6OC=o?01FvBz| z4oKqh9%nUvDdwh;8A!CFRb$E()Q+8;YzsYT2+r$YN28=7w}kVX3&vm4Ed+BQCvM#e{@sI*iYsY?qR>l-AUVmnh$ z`e7(LW5_12;}6+*46_P&y63-T)o|K6MXCia6s<>Q1Bkw}aB`Cq*Bgs#DCXF5h;&{ALP(TS-6Jza}${5}uR27srez#l){QCbSC2^+W_7J%|FQhjIcPBS}!4Kt6! zN?pbF=El=pW8+;F&PcIwX@zX9tsA%r|0#VoZ0?Zsswede@g!2R8ba+{PkQRSq&_D_ zR)%Q8ps4*Q7Lse_+wPfO49pdP^ks>$$NaA6*BZPAleR&i!5JnN`fl`$Vj*)ZhSi%5 zE>-Xn$PC&rrMBoUYIqo4E*CQQ3Nk+Vt~2yHmAq8HE!@Q0{jREuWQNb=PUSqo<=aPy zja7cy)N?M>KA6P2$@w@n-^+5-tFsqAMC33go0X9Ow}_ZM6_2gv^Ue$s3YYQyQSvGe z8PihyM&6dcCp>|7#=BrE>cz`1ta+q*M{wTL?1MTApwnup%7jqkP-+c7IeFAnB(Me} zNH|D1<=@asbipE`qH&+ujz2!LFW`YD(of{1KuFpGCAtJ9NT;-sU|vSxZgu%cslF@e%l& zm4Y!@yl5AuhrAz94hF9!kj>XZ{rti!p9NU|L>>)3Q{7 z1lY|f-l$}QxGPgigS5Ta9dTTR)V(S} zRiXF#MS@3oD_1Tw7& zpb(;#c3kB!m#ZJw1=LAp?wo|ZUD)0o`I^G)q6MSe4Y2-8UaKaHGeG#ls|$Ggn*UR&KZ+*{JBDG5mwNhAa{W=yO_B!t)wy^T;o zOQ@viQEjyvOJf^BwFnw}YiUcVj-|#{1S5{#R+Fghic~{tnH&Akd&`&meEgs1dCqy? z_sjd`_j5uGOzPcE)K4obgsXIAvWe`MG;nr(>R<6wO$*GWI(2AD{MDD6_4LZwY8U%7 zXID6xlg}I6uQC=fl9*YZi!umZ7v8bDMqUrP$hX`Em#+vL(YK6!F%=o;c&l z1kZ{ZM-{u$54|(4RtBHTLp!00xgotX$>{hvT*XJa7n}vm>CMB1X~OTPH|_;BUK|X4+0|ro1$afDZ?p6Vd)l|%X3n?$*D+sqa&iu| zPPEO4R#~2leEP{XKBcSUqDH3S4Wm;3!-A7_f%61UDZLK%TwnB=j>pyhtRMP`ythDa^v@cyE zR=h6ORUPW+kFsoajNWkY-yE`f_bTO)>mqcAZZF^OwD(uPRD^Js%rsXc zvOuf}te+6eP4<0|vw87}0JEam3ZZAO?<;`NowE`jvnD`S?+8>nfnuv(AeOG5(`vK= zUiX(IAg-new#YIMmTJbKUO2MV+b zX54M+^SS4Jc2`I#J(9C;^4H!Leqc{G5Uouh_QBQ*q0(4-C81*I#}9U-vPHKTNdB17 z*yXX3dA-!rg-@zLKV({7c=%lzpk@-NI!kIjlWLws8GSYNk@`<^woJdS=Jwmi_ywCyHZO%u;m zLQlhrT%Ng`zajd0Ale#=OXm;y2(OpTull5p%#Af^5FEqYgZWJS)H;U%D>njpGd|7m z>Z%*!QmjdkMt`C?hxRPY%fVwVE8nrN$JwCpXOGGn|23_7`&DH4IXZ`u;Q<=UZdwse z%=Zx;m$I`Nzvtu-Q=6R)@(^t_$!ZFoJ=)KLc-E2#WLR~LRO;sV95>0;P)B)~X7RyQ z&$`!xPa(^)ULDCXNsEZcxYj&lR96m9*BXbSQ zFld*7J!fTQ&h&J{soj=jzh#=wo`+i3GtU z{<%M}_ycFJhT#hs|9^nRNVv)Wa>RbDsqiFY<(tbN)t)XILbY#b>0ajz6KBr-C3R`P zHr%iDNO6Y0SgM3xD#a>}P&S&cVtyeHe<>OBDoH7hLYFA3Lb3b|_1FeAv-;(~KfoGoz1C+*Jqd|r{5TRF!HjSb7 zx)l+Q{H)JqCXAMb9|_{0J1ELQz0<0PhSYq|;&V^X2P#N0#cu=av9_WU0}-;=ee@{9 zMXi&^bFFH9fU%o^n7YRo+S+T99`x^hfY?ZKkfO0130E}!TH0v2O$ntPr2RF6%S9GD zr5*k?gQMh5jBhizshlX^otYu_%)-s&c>b