feat: probelesen

This commit is contained in:
Leon Etienne 2023-03-30 18:59:27 +02:00
parent ce8b1ce5fa
commit 4ee7b22db6
Signed by: leonetienne
SSH Key Fingerprint: SHA256:hs2AZKjRTbd2kYg44u89rM19UT2LyBOpSbIShsdkkfg
19 changed files with 100 additions and 93 deletions

View File

@ -12,7 +12,7 @@
% Constraint & Einbau in brown-field TYPO3\\\hdashline
% Constraint & Kunden-UI im Frontend\\\hdashline
% \ac{FA} & \makecell[l]{Mitglieder bei \ac{WM} können sich einen\\Nutzeraccount erstellen}\\\hdashline
% \ac{FA} & \makecell[l]{Nicht-Mitglieder bei \ac{WM} können sich\\einen Nutzeraccount erstellen}\\\hdashline
% \ac{FA} & \makecell[l]{Nichtmitglieder bei \ac{WM} können sich\\einen Nutzeraccount erstellen}\\\hdashline
% \ac{FA} & \makecell[l]{Angemeldete Nutzer sehen eine Übersicht\\aller aktiven Jahresauswahlproben}\\\hdashline
% \ac{FA} & \makecell[l]{Angemeldete Nutzer können mehrere Weine\\bei aktiven Jahresauswahlproben anmelden}\\\hdashline
% \ac{FA} & \makecell[l]{Eine Weinanmeldung frägt Weindaten mit\\einem Webform ab}\\\hdashline

View File

@ -16,15 +16,15 @@ Wie oben erwähnt, sind bereits die Constraints und einige funktionale und nicht
\textbf{Art der Anforderung} & \textbf{Anforderungsbeschreibung}\\
\hline
\hline
\ac{NFA} & \makecell[l]{Angaben zum Weingut des Weines\\sollen aus dem Accountdatensatz anstatt\\aus dem Webform kommen.}\\
\ac{NFA} & \makecell[l]{Angaben zum Weingut des Weines\\sollen aus dem Accountdatensatz anstatt\\aus dem Web-Formular kommen.}\\
\hdashline
\ac{NFA} & \makecell[l]{Aus dem Papierformular soll ein\\Webformular werden.}\\
\ac{NFA} & \makecell[l]{Aus dem Papierformular soll ein\\Web-Formular werden.}\\
\hdashline
\ac{FA} & \makecell[l]{Beim Erstellen einer Weinteilnahme\\soll ein QR-Code als PDF generiert werden,\\der den Wein identifiziert.}\\
\hdashline
\ac{FA} & \makecell[l]{Durch scannen des QR-Codes auf dem\\mit einer Weinteilnahme erstellten PDFs soll\\dem Wein der Status \enquote{Eingegangen}\\ zugewiesen werden.}\\
\ac{FA} & \makecell[l]{Durch scannen des QR-Codes auf dem\\mit einer Weinteilnahme erstellten PDFs soll\\dem Wein der Status \enquote{eingegangen}\\ zugewiesen werden.}\\
\hdashline
Constraint & Einbau in brown-field TYPO3\\
Constraint & Einbau in Brown-Field TYPO3\\
\hdashline
Constraint & Mitarbeiter-UI in TYPO3-Backend\\
\hdashline
@ -43,7 +43,7 @@ Um nähere Anforderungen zu ermitteln, werden die Befragungstechniken \enquote{I
\section{Interview mit Product Owner}
Zunächst wird ein Interview mit dem \ac{PO} geführt. Ziel dieses Interviews ist
es, konkrete Fragen zu Anforderungen zu klären und somit konkrete Anforderungen zu formulieren.
es, konkrete Fragen zu Anforderungen zu klären und somit klare Anforderungen zu formulieren.
Aufgrund der individuellen Gesprächsführung wurde sich für ein \enquote{teil-standardisiertes Interview}
entschieden. Bei einem teil-standardisiertem Interview gibt es vordefinierte Fragen,
aber auch Freiraum für Improvisation und Persönlichkeit.
@ -75,8 +75,8 @@ beantworten könnte. Somit fällt ein Onlinefragebogen für die Stakeholdergrupp
Der Fragebogen der Stakeholdergruppe \enquote{teilnehmende Weingüter} liegt im Anhang unter
\fullref{chap:anhang-fragebogen-extern} bei.
Um den Aufwand und somit die Hemmschwelle des Ausfüllens
eines solchen Online-Fragebogens zu minimieren, gibt es lediglich sechs quantitative Fragen
zuzüglich einem optionalen Freitextfeld, um sonstige Wünsche zum Ausdruck zu bringen.
eines solchen Online-Fragebogens zu minimieren, werden lediglich sechs quantitative Fragen
zuzüglich einem optionalen Freitextfeld, um sonstige Wünsche zum Ausdruck zu bringen, gestellt.
Eine Anmeldung über Google für Google-Forms ist nicht erforderlich.
Der Link zu diesem Online-Fragebogen wurde \ac{WM} mit der Bitte um Weitergabe an
die Probenteilnehmer übergeben.
@ -93,7 +93,7 @@ Weitere wichtigste Erkenntnisse des Interviews sind:
\item[Endgerät für Scanning und Scanneranwendung]\hfill\\
Gescannt wird von Mobiltelefonen mit einer QR-Code-App wie QRBot.
QRBot ermöglicht es Nutzern für jeden aufgerufenen QR-Code eine Vorlagen-URL aufzurufen,
um den gescannten Wert als Teil der Url, z.B. als Get-Parameter, zu übergeben \cite{bib:qrbot}.
um den gescannten Wert als Teil der URl, z.B. als Get-Parameter, zu übergeben \cite{bib:qrbot}.
Das ist prädestiniert für API-ähnliche Webseitenaufrufe, um Weine einzuchecken.
\item[Trennung von Weinen nach Jahresauswahlproben im Frontend]\hfill\\
Da es $n$ Jahresauswahlproben gibt und Weine immer genau einer Jahresauswahlprobe zugeordnet sein müssen, macht es wenig
@ -103,7 +103,7 @@ Weitere wichtigste Erkenntnisse des Interviews sind:
Diese Weine sind ebenso anklickbar und führen zu einer Einzelansicht der Weine.
\item[Nutzerführung für \ac{WM}-Angestellte]\hfill\\
Gescanne QR-Codes von Weinen sollen den Wein als eingegangen markieren und anschließend dem
Mitarbeiter zeigen, welcher Wein eingechecked wurde. Somit dient das Scannen eines Codes ebenso zur
Mitarbeiter zeigen, welcher Wein eingecheckt wurde. Somit dient das Scannen eines Codes ebenso zur
Einsicht der Details der gelagerten Flaschen.
Es soll ein Backendmodul \cite{bib:typo3-docs-modules} geben, das für den Export von CSV-Daten zuständig ist.
Sonstige Aktionen sind im TYPO3-Backend mit nativen Werkzeugen erreichbar.
@ -112,11 +112,10 @@ Weitere wichtigste Erkenntnisse des Interviews sind:
\item Jahresauswahlproben-Listenansicht
\item Jahresauswahlproben-Detailansicht
\item Wein-Registrierungsformular
\item PDF-Url für Versandbriefe
\item PDF-URL für Versandbriefe
\item Registrierungsseite mit mehreren Schritten
\item Mitarbeiterseite für gescannte QR-Codes
\item Listenansicht der Jahresauswahlproben im CSV-Exporter im Backend
\item Detailansicht der Jahresauswahlprobe im CSV-Exporter im Backend
\item Listen- und Detailansicht der Jahresauswahlproben im CSV-Exporter im Backend
\end{itemize}
\end{description}
@ -130,13 +129,13 @@ der gewünschte Geschäftsprozess der Jahresauswahlprobe nach Fertigstellung die
Hierbei ist es wichtig, die Schnittstelle zwischen den gleichbleibenden Arbeitsschritten und den zu digitalisierenden
Arbeitsschritten zu beachten. Diese Schnittstelle sollte unverändert bleiben,
um eine nahtlose Integration in den restlichen, bestehenden Workflow von \ac{WM} zu gewährleisten.
Diese Schnittstelle stellt eine Excel-Tabelle dar. Zuvor wurde diese Excel-Tabelle von Hand aus den
Anmeldeformularen erstellt. Nach Fertigstellung dieses Projektes soll diese Tabelle in Form
Diese Schnittstelle stellt eine Excel-Tabelle dar. Zuvor wurde diese Excel-Tabelle von Hand, aus den
Anmeldeformularen, erstellt. Nach Fertigstellung dieses Projektes soll diese Tabelle in Form
von CSV-Daten aus dem Redaktionssystem exportiert werden können. Diese können Mitarbeiter von \ac{WM} in Excel
importieren und in kommenden Planungsschritten der Jahresauswahlprobe ohne Umstellung weiter verwenden.
Das ist wichtig, da solche Umstellungen, ohne nennenswerte Verbesserungen des restlichen, von dieser
Ausarbeitung unberührten Workflows, Zeit kostet, ohne Vorteile zu erbringen.
Dieser Zeitverlust würde den durch die Digitalisierung erzielten Gewinn schädigen.
Ausarbeitung unberührten Workflows, Zeit kosten, ohne Vorteile zu erbringen.
Dieser Zeitverlust würde den durch die Digitalisierung erzielten Vorteil schmälern.
\begin{nicepic}
\includegraphics[width=1\textwidth]{images/geschäftsprozess-nachher.png}

View File

@ -14,9 +14,9 @@ Hierbei werden sämtliche auf das Weingut bezogene Daten redundant ausgefüllt.
Eigenschaften der Weine, sondern die des Weingutes selbst sind.
Da sich das Weingut zwischen den Weinen nicht ändert,
ändern sich die darauf bezogenen Daten auch nicht. Sie müssen aber für jeden Wein erneut ausgefüllt werden.
Abgesehen davon, dass solche Redundanzen auf Weinguts- und verbandsseite die hedonische Qualität schädigen,
Abgesehen davon, dass solche Redundanzen auf Weinguts- und Verbandsseite die hedonische Qualität schädigen,
bietet ein solcher Workflow Freiraum für Fehler und Inkonsistenzen.
Dieser Workflow, mit den zuvor genannten Nachteilen, wird auf verbandsseite, nach Zustellung der Weine, weiter fortgeführt:
Dieser Workflow, mit den zuvor genannten Nachteilen, wird auf Verbandsseite, nach Zustellung der Weine, weiter fortgeführt:
\ac{WM} erfährt erstmalig mit der Zustellung eines Weines von dessen Teilnahme. Das erschwert die Planung der Logistik,
da im Voraus keine konkrete Zahl der zu erwartenden Flaschen bekannt ist. Geht eine Flasche auf dem Postweg verloren,
könnte das unbemerkt bleiben, da der Prozess für das Weingut mit dem Versand endet und der Prozess für \ac{WM}
@ -26,7 +26,7 @@ Kommt ein teilnehmender Wein bei \ac{WM} an, wird das beiliegende Formular von H
Diese Schnittstelle ist besonders resourcenaufwändig und fehleranfällig, da es oft vorkommt, dass die teils
dysgraphisch verfassten Formulare nur schwer, mehrdeutig, oder gar nicht dechiffriert werden können.
In diesem Prozess wird der Teilnahme des Weines eine inkrementell aufsteigende \ac{ELN} zugewiesen,
die anschließend in Form eines Aufklebers an der Flasche befestigt wird. Darauffolgend wird die Flasche im Lager verstaut.
die anschließend in Form eines Aufklebers auf der Flasche angebracht wird. Darauffolgend wird die Flasche im Lager verstaut.
\begin{nicepic}
\includegraphics[width=1\textwidth]{images/geschäftsprozess-vorher.png}

View File

@ -4,13 +4,13 @@
\section{Praktische Ergebnisse}
Die TYPO3-Erweiterung ist umgesetzt und erfüllt die vereinbarten Anforderungen.
Mitglieder und Nichtmitgleder können Teilnehmernutzer anlegen und Weine zu Jahresauswahlproben anmelden.
Teilnehmer bekommen ein PDF-Dokument mit einem QR-Code zur späteren Zuordnung bereitgestellt.
Teilnehmer bekommen ein PDF-Dokument mit Weindaten und einem QR-Code zur späteren Zuordnung bereitgestellt.
\ac{WM}-Mitarbeiter können diesen QR-Code einscannen, um Weine als \enquote{angekommen} zu markieren.
Redakteure von \ac{WM} können Zugriffsrechte und Verhalten der Jahresauswahlproben auf verschiede Weisen einschränken.
Sie können den Sichtbarkeitszeitraum, den Anmeldezeitraum und den Probezeitraum festlegen, der definiert ab
wann teilnehmende Weine öffentlich sind.
Sie können Jahresauswahlproben und damit deren Anmeldeformulare auf festgelegte Wettebwerbskategorien beschränken.
Mitarbeiter können Weindatensätze, getrennt nach Jahresauswahlproben, als CSV-Dokument exportieren und somit
Sie können Jahresauswahlproben und damit deren Anmeldeformulare auf festgelegte Probenkategorien beschränken.
Mitarbeiter können Weindatensätze, getrennt nach Jahresauswahlproben, als CSV-Dokumente exportieren und somit
den verbleibenden Geschäftsprozess wie gehabt fortsetzen.
Praktische Präsentationen gegenüber dem \ac{PO} bestätigen die Umsetzung der Anforderungen und stellen die Basis
für weitere Iterationen der Entwicklung dar.
@ -35,10 +35,13 @@ der bei kleinen Projekten, wie der hier beleuchteten Aufgabenstellung, unabdingl
Umsetzung gewährleisten zu können.
\paragraph*{Welche Anforderungen sind an die TYPO3-Erweiterung gestellt?}
Um ein Pflichtenheft für die hier beleuchtete TYPO3-Erweiterung zu erarbeiten, wurde eine Anforderungsanalyse in Form eines Interviews mit dem \ac{PO}
durchgeführt. Dieses Pflichtenheft zeigt unter anderem auf, dass Mitglieder sowie Nichtmitglieder Teilnehmer sein können,
Um ein Pflichtenheft für die hier beleuchtete TYPO3-Erweiterung zu erarbeiten,
wurde eine Anforderungsanalyse in Form eines Interviews mit dem \ac{PO} durchgeführt.
Auch wurde eine quantitative Studie in Form eines Online-Fragebogens bezüglich der Bedürfnisse der Teilnehmer angestrengt, die ohne Ergebnisse verblieb.
Dieses Pflichtenheft zeigt unter anderem auf, dass Mitglieder sowie Nichtmitglieder Teilnehmer sein können,
wie die Nutzerführung aussieht, welche Werkzeuge \ac{WM}-Mitarbeitern zur Verfügung stehen und wie verschiedene Schnittstellen aussehen.
Das vollständige Ergebnis dieser Anforderungsanalyse liegt im Anhang anbei, unter \fullref{chap:anhang-pflichtenheft}.
Auch ist eine wichtige Erkenntnis, dass regelmäßige Statusmeetings mit dem \ac{PO} durchgeführt werden sollten.
Das vollständige Ergebnis dieser Anforderungsanalyse liegt im Anhang anbei, unter fullref{chap:anhang-pflichtenheft}.
\paragraph*{Welche QR-Code-Bibliothek ist für das behandelte Projekt gut geeignet?}
Um die Anmeldung und Zustellung von Weinen digital umsetzen zu können, ist lt. Anforderungen ein QR-Code-Generator notwendig.
@ -78,7 +81,7 @@ angemessener Entwicklungsmethodiken für abweichende Projekttypen und -beschaffe
\paragraph*{Welche Anforderungen sind an die TYPO3-Erweiterung gestellt?}
Um detaillierte Anforderungen an die TYPO3-Erweiterung in Erfahrung zu bringen, wurde eine Anforderungsanalyse durch verschiedene
Befragunstechniken durchgeführt. Die verwendeten Befragunstechniken sind \enquote{Interview} und \enquote{Online-Fragebogen}.
Es ist wichtig, dass der Online-Fragebogen unbeantwortet blieb.
Es ist wichtig zu erwähnen, dass der Online-Fragebogen unbeantwortet blieb.
Das Ergebnis dieser Anforderungsanalyse ist ein detailliertes Pflichtenheft, das die Anforderdungen an die TYPO3-Erweiterung detailliert beschreibt.
Dieses zeigt unter anderem auf, dass Mitglieder und Nichtmitglieder Teilnehmer sein können,
wie detaillierte Konzepte der Nutzerführung und verschiedene Schnittstellen aussehen und welche Werkzeuge \ac{WM}-Mitarbeitern zur Verfügung stehen.
@ -99,7 +102,7 @@ Funktionsumfang. Dieser Vergleich deutet darauf hin, dass \enquote{chillerlan/ph
die beste Eignung der verglichenen Bibliotheken aufweist. Es wurde davon ausgegangen, dass \enquote{chillerlan/php-qrcode} eine gute Wahl sei,
da diese Bibliothek bereits firmenintern nahegelegt wurde. Der abgehaltene Vergleich bestätigt
diese Empfehlung. Dieser Erfolg erklärt sich durch ein aktiv gepflegtes Softwareprodukt mit einer Vielzahl an Entwicklern,
Empfehlungen, Verwendungen, aktueller Versionsunterstützung, guter Dokumentation und projektspezifischer Eignung.
Verwendungen, aktueller Versionsunterstützung, guter Dokumentation und projektspezifischer Eignung.
Es muss jedoch beachtet werden, dass dieser Vergleich das spezifische Projekt als wichtigen Faktor mit einbezieht.
Somit ist dieser Vergleich nur gültig, um eine QR-Code-Bibliothek für ein PHP-Projekt mit dem Composer-Paketmanager zu evaluieren.
Der Autor empfielt ähnliche Vergleiche für andere Arbeitsumgebungen durchzuführen, um zu bestimmen, welche QR-Code-Bibliotheken für andere
@ -113,8 +116,8 @@ Geschäftsprozess der Jahresauswahlprobe.
Diese Umsetzung zeigt auf, dass es für eine nahtlose Integration in den existierenden Geschäftsprozess
unabdinglich ist, dass die Ausgabe des digitalisierten Teilprozesses der Ausgabe des ersetzten, manuellen Teilprozesses gleicht.
Dieser Aspekt wurde zuvor nicht bedacht. Das könnte daran liegen, dass diese Schnittstelle nicht der primäre und auch nicht
der sekundäre Fokus in der Umsetzung ist. Sie wird nicht benötigt, damit das umgesetzte Produkt intrinsisch funktioniert,
ist aber dennoch unverzichtlich für eine praktische Verwendung.
der sekundäre Fokus der Umsetzung ist. Sie wird nicht benötigt, damit das umgesetzte Produkt intrinsisch funktioniert,
ist aber dennoch unverzichtlich für eine reibungslose, praktische Verwendung.
Hierbei muss jedoch berücksichtigt werden, dass es sich um ein einzelnes, konkretes Projekt handelt und sich aus diesem Grund
nicht unbedingt allgemeingültige Schlüsse ableiten lassen. Eine Forschungsempfehlung ist es daher, weitere Möglichkeiten
zur Integration verschiedener Teilprozesse zu recherchieren und zu evaluieren.

View File

@ -16,9 +16,9 @@ Es wurde begründet, dass die Durchführung einer Anforderungsanalyse wichtig is
\\
\\
Durch diese Forschung wurde somit erwiesen, dass die Anmeldung und Zustellung von Weinen für Weinproben des Regionalverbunds für
Weine in der Weinregion Mosel effizient und profitabel durch eine TYPO3-Erweiterung realisiert werden kann. Dies indem für die technische
Weine in der Weinregion Mosel effizient und profitabel durch eine TYPO3-Erweiterung realisiert werden kann, indem für die technische
Umsetzung \enquote{extreme-programming}-Entwicklungsmethodiken herangezogen werden, durch eine Anforderungsanalyse ein Pflichtenheft ausarbeitet wird,
\textit{chillerlan/php-qrcode} als QR-Code-Bibliothek verwendet wird und die Schnittstelle zu den verbleibenden Teilprozessen geschützt wird.
\break\textit{chillerlan/php-qrcode} als QR-Code-Bibliothek verwendet wird und die Schnittstelle zu den verbleibenden Teilprozessen geschützt wird.
\section{Ausblick}
\label{chap:ausblick}
@ -49,6 +49,6 @@ der in einer Jahresauswahlprobenkategorie für trockene Weine antreten soll.
Ziel ist es, dass das Weinanmeldeformular fehlerhafte
Anmeldeversuche als solche erkennt und verhindert.
Kompliziert wird diese Technik dadurch, dass Kategorien beliebig viele Restriktionen haben können
und diese von Redakteuren, im TYPO3-Backend, gepflegt können werden sollen. Ein komplexeres, realistisches Beispiel wäre eine
und diese von Redakteuren, im TYPO3-Backend, gepflegt werden sollen. Ein komplexeres, realistisches Beispiel wäre eine
Kategorie, die nur vegane Barriqueweine der Rebsorte Merlot zulässt, die einen Mindest- und Maximalrestzuckeranteil, einen Maximalalkoholanteil und
einen Maximalpreis erfüllen.

View File

@ -6,8 +6,8 @@ Brown-Field Projekt \cite{bib:schwarzer-vorlesung-swa} in Form einer TYPO3-Erwei
Es ist anzumerken, dass das aus \fullref{chap:anforderungserfassung} hervorgehende Pflichtenheft im Rahmen geplanter und
opportunistischer Gespräche mit dem \ac{PO} geringfügige Änderungen erfahren wird.
\section{Setup einer TYPO3-Erweiterung}
TYPO3-Erweiterungs werden via Composer installiert \break\cite{bib:typo3-docs-managing-extensions}.
\section{Setup der TYPO3-Erweiterung}
TYPO3-Erweiterungen werden via Composer installiert \break\cite{bib:typo3-docs-managing-extensions}.
Um eine TYPO3-Erweiterung zu erstellen, muss also ein Composer-Paket erstellt werden.
Um vermeidbare Komplexität zu verhindern, wird das Composer-Paket, welches die hier betrachtete
TYPO3-Erweiterung darstellt, lokal in den versionierten Ordner \enquote{packages} gelegt.
@ -17,7 +17,7 @@ Somit wird ein Composer-Paket nur für dieses Projekt bereitgestellt,
ohne den Aufwand zu betreiben, der üblicherweise mit dem Bereitstellen eines Paketes einhergeht.
\\
\\
Um das grundlegende Setup einer TYPO3-Erweiterung effizient durchzuführen, wurde eine
Um das grundlegende Setup einer TYPO3-Erweiterung effizient durchzuführen, wird eine
existierende Erweiterung mit vergleichbarem Funktionsumfang kopiert, umbenannt und eingefügt.
Spezifisch ist dieser \enquote{vergleichbare Funktionsumfang}, dass es ebenfalls Datenmodelle und hochpersonalisierte
Frontendlogik in Bezug auf die zuvor genannten Datenmodelle gibt.
@ -28,6 +28,7 @@ in einer Art und Weise, die ermöglicht, dass diese elektronisch weiterverarbeit
Des Weiteren befasst sich diese Phase mit der Automatisierung und Befüllung dieser Daten,
wie zum Beispiel durch Web-Formulare \cite{bib:verhoef}.
Das bedeutet, dass in dieser Phase Datenobjekte definiert und implementiert werden.
Ebenfalls werden anhand der Papier-Formulare Web-Formulare gebaut, damit Nutzer diese Datenobjekte erstellen können.
Ein Datenobjekt besteht nach firmeninternen Konventionen aus zumindest
vier Komponenten:
\begin{description}
@ -50,28 +51,28 @@ angefertigt und in Rücksprache mit dem \ac{PO} finalisiert.
\begin{nicepic}
\includegraphics[width=1\textwidth]{images/objektrelationen-weinlandmosel-einlieferungswerkzeug.png}
\captionof{figure}{Objektrelationen}
\caption*{Quelle: Eigene Darstellung: Weinland Mosel Einlieferungswerkzeug}
\captionof{figure}{Objektrelationen: Weinland Mosel Einlieferungswerkzeug}
\caption*{Quelle: Eigene Darstellung}
\label{fig:objektrelationen}
\end{nicepic}
Nachdem in Erfahrung gebracht wurde, welche konkreten Datenobjekte benötigt werden,
wurden Attribute dieser Objekte dem Pflichtenheft entnommen. Diese wurden in einem
Nachdem in Erfahrung gebracht wird, welche konkreten Datenobjekte benötigt werden,
werden Attribute dieser Objekte dem Pflichtenheft entnommen. Diese werden in einem
formalen Klassendiagramm festgehalten und in Rücksprache mit dem \ac{PO}
weiter bis zu festen Datentypen und Auswahlmöglichkeiten konkretisiert.
Beispielsweise dass Wettbewerbskategorien durch TYPO3-Categories repräsentiert werden.
Das hat den Vorteil, dass TYPO3-Categories bereits native Bestandteile eines TYPO3-Redaktionssystemes sind
und alle relevanten Attribute anbieten. Diese sind Titel,
Parentkategorie und Beschreibung.
Das Parent-Attribut ist benötigt, da $n$ dieser Attribute einen Attributbaum bilden
Das Parent-Attribut ist nötig, da $n$ dieser Attribute einen Attributbaum bilden
\cite{bib:typo3-docs-sys-category}.
Somit ist es möglich, Unterkategorien zu erstellen. Beispiele hierfür sind die
Unterkategorien \enquote{Trockener Riesling} und \enquote{Halbtrockener Riesling} für die Überkategorie
\enquote{Riesling}.
Rebsorten, Geschmack, Weineigenschaften und Qualität sollen eigene Datentypen,
Rebsorte, Geschmacksangabe, Weineigenschaften und Qualitätsstufe sollen eigene Datentypen,
anstatt einfacher Zeichenfolgen sein.
Ziel dessen ist, dass sich Nutzer für einen vorgefertigten, nominalen Eintrag in einem Dropdown-Menü
entscheiden müssen und diese Auswahlmöglichkeiten im TYPO3-Backend pflegbar sind.
entscheiden müssen und dass diese Auswahlmöglichkeiten im TYPO3-Backend pflegbar sind.
Weinlagen sind im Brown-Field-Projekt bereits vorhanden, also sollen hierfür existierende Daten
wiederverwendet werden.
Je Wein sollen beliebig viele Weineigenschaften auswählbar sein. Wettbewerbskategorien,
@ -103,10 +104,10 @@ Dem Pflichtenheft ist zu entnehmen, dass es zwei Kategorien von Teilnehmerregist
\item Nutzer ist \ac{WM}-Mitglied
\item Nutzer ist kein \ac{WM}-Mitglied
\end{enumerate}
Der primäre Unterschied zwischen Mitgliedern und Nicht-Mitgliedern ist, dass Mitglieder bereits einen
Der primäre Unterschied zwischen Mitgliedern und Nichtmitgliedern ist, dass Mitglieder bereits einen
Stammdatensatz hinterlegt haben.
Dieser Stammdatensatz bildet die Angaben zum Weingut des zu digitalisierenden Anmeldeformulares ab.
Nicht-Mitglieder sind dem System noch gänzlich unbekannt und müssen im Zuge der Registrierung ihres Nutzers
Nichtmitglieder sind dem System noch gänzlich unbekannt und müssen im Zuge der Registrierung ihres Nutzers
ihre Stammdaten angeben, während sich Mitglieder lediglich einloggen müssen und eine Schaltfläche
\enquote{Teilnehmer werden} betätigen.
Der mit dem \ac{PO} ausgearbeitete UX-Flow der Registrierung sieht vor, dass der Nutzer zunächst gefragt wird,
@ -114,7 +115,7 @@ ob er Mitglied sei oder nicht. Hierzu gibt es je einen Button. Ist der Nutzer ei
wird er auf ein Loginformular, mit der Option zur Registrierung weitergeleitet.
Nach erfolgreichem Login, wird ein Teilnehmerobjekt erstellt.
Wählt der Nutzer \enquote{Nein, ich bin kein Mitglied}, wird er auf ein Registrierungsformular
weitergeleitet, um einen Nicht-Mitgliederaccount anzulegen. Im Zuge dieser Registrierung werden
weitergeleitet, um einen Nichtmitgliederaccount anzulegen. Im Zuge dieser Registrierung werden
Stammdaten zum Weingut angefragt.
Dieser Schritt übersetzt unter anderem den \enquote{Einreicher}-Teil des ursprünglichen Anmeldeformulares,
anbei in \fullref{chap:anhang-anmeldeformular}.
@ -130,7 +131,7 @@ Da das Brown-Field-Projekt bereits Accountlogins und -registrierungen implementi
wird auf diese Lösungen zurückgegriffen, um einen einheitlichen Workflow beizubehalten.
Accountregistrierungen werden über den
\enquote{femanager} \cite{bib:typo3-docs-femanager} realisiert, während Logins via TYPO3s nativem
Frontend-Nutzer-Login gelöst werden. Das ist explizit von \enquote{femanager} so angedacht:
Frontend-Nutzer-Login gelöst werden. Das ist explizit von \enquote{femanager} angedacht:
\quotecite{Note: Login and a I forgot my password function is part of the core and not part of femanager.}
\cite{bib:typo3-docs-femanager}.
Im Folgenden wird der Registrierungsprozess im Detail beschrieben:
@ -196,9 +197,10 @@ Datenbank persistiert sowie Daten für die Anzeige im Frontend aufbereitet \cite
Neue Datenobjekte werden in Repository-Objekten registriert
\break\cite{bib:typo3-docs-extdev-tut-tea-repositories}. Diese Repositories sind Aggregate des Controllers,
werden jedoch nach dem \enquote{Inversion of Control}-Prinzip via Dependency Injection instanziiert und
der ActionController-Klasse über eine Methode übergeben \cite{bib:typo3-docs-di}.
ActionController-Objekten über Methoden übergeben \cite{bib:typo3-docs-di}.
Als problematisch erweisen sich hierbei bidirektionale Verbindungen zwischen Datenmodellen, wenn die Foreign Keys
über das SQL-Schlüsselwort \enquote{AUTO\_INCREMENT} in der Datenbank generiert werden.
über das SQL-Schlüsselwort
\break\enquote{AUTO\_INCREMENT} in der Datenbank generiert werden.
Beispielsweise muss ein Masterrecord, der Betriebsinformationen speichert, bidirektional an ein Teilnehmerobjekt
gebunden werden. Hierzu wird jedem der Elemente jeweils der Foreign Key des anderen übergeben.
Als Foreign Keys werden hierfür die jeweiligen \acp{UID} herangezogen, da diese Werte durch
@ -216,7 +218,7 @@ Ein Basismerkmal des Jahresauswahlprobenwerkzeuges ist die Möglichkeit, Weine z
anzumelden. Dieser Schritt übersetzt unter anderem die verbleibenden Formfelder des
ursprünglichen Anmeldeformulares, anbei in \fullref{chap:anhang-anmeldeformular}, in den digitalen Workflow.
Für die Weinanmeldung spielt die Mitgliedsschaft eines Teilnehmers keine Rolle. Es wird lediglich ein
Frontend-Nutzer der Nutzergruppe \enquote{Teilnehmer} benötigt. Dieser Nutzer hat, wenn angemeldet,
Frontend-Nutzer der Nutzergruppe \enquote{Teilnehmer} erfordert. Dieser Nutzer hat, wenn angemeldet,
Zugriff auf eine Auflistung aller zeitlich freigegebenen Jahresauswahlproben.
Soweit der Registrierungszeitraum dieser Jahresauswahlprobe den aktuellen Zeitpunkt miteinschließt,
wird eine \enquote{Jetzt Wein anmelden}-Schaltfläche angeboten.
@ -295,7 +297,7 @@ Daher wird im Folgenden die Zeitkomplexität dieser Rekursionsfunktion betrachte
Für diese Funktion kann kein Master-Theorem angewandt werden,
da es sich hierbei nicht um einen \enquote{Divide-and-Conquer-Algorithmus} handelt.
Das ist so, da das in der Rekursion weitergereichte Problem nicht kleiner wird,
sondern gleich groß bleibt.
sondern gleich groß bleibt. Demnach ist $b = 1$.
Das verletzt die Bedingung $b>1$ des Master-Theorems, definiert als $T(n) = a*T(\frac{n}{b})+f(n)$
\cite{bib:schwarzer-vorlesung-alg}.
Der Algorithmus besteht aus $m \in \mathbb{N}$ verschachtelten For-Schleifen
@ -309,7 +311,7 @@ Somit ist die Zeitkomplexität $O(n^m)$. Normiert dargestellt beträgt die Zeitk
\label{fig:timecomplexity-category}
\end{nicepic}
Auf Optgroup-HTML-Tags wurde bewusst verzichtetet.
Auf Optgroup-HTML-Tags wird bewusst verzichtetet.
Grund dafür ist, dass Optgroup-Elemente an sich nicht im Dropdown-Menü auswählbar sind.
Das stellt ein Problem dar, da beispielsweise die Kategorie \enquote{Riesling},
die die Unterkategorien \enquote{Trockener Riesling} und \enquote{Halbtrockener Riesling} beinhalten könnte,
@ -323,23 +325,26 @@ Datenbanktabelle geben. Der Nutzer kann sich für eine beliebige Auswahl dieser,
Ein Beispiel für SelectMultiple-Formfelder sind Weineigenschaften.
TYPO3-Fluid implementiert hierfür keinen ViewHelper
\cite{bib:typo3-docs-fluid-form-viewhelpers},
also wurde eine eigene Lösung entworfen: Der Nutzer soll aus einer Menge $A$ wählen.
also wird eine eigene Lösung entworfen: Der Nutzer soll aus einer Menge $A$ wählen.
Für alle Elemente $a \in A$
wird ein Checkbox-Feld erstellt. Dieses Element trägt den Anzeigewert \enquote{<a.title>} und den
Wert \enquote{<formfeldname>-true}.
Ist also eine dieser Checkboxen angehakt, hat sie den zuvor genannten Wert. Falls nicht, trägt sie keinen Wert.
Weil alle angehakten Checkboxen dieses Formfeldes den selben Wert tragen, ist es PHP-seitig trivial
eine Liste aller angehakten Checkbox-Ids dieses Formfeldes aus der Liste aller Formfeldparameter zu extrahieren.
wird ein Checkbox-Feld erstellt. Dieses Element trägt den Anzeigewert \enquote{<a.title>},
den ID- und Namenswert \enquote{<formfeldname>-<a.uid>} und den
Formularwert \enquote{<formfeldname>-true}.
Ist also eine dieser Checkboxen angehakt, hat sie den zuvor genannten Formularwert. Falls nicht, trägt sie keinen Formularwert.
Weil alle angehakten Checkboxen dieses Formfeldes den selben Namenswert tragen, ist es phpseitig trivial
eine Liste aller angehakten Checkbox-Namen dieses Formfeldes aus der Liste aller Formfeldparameter zu extrahieren.
Hierfür wird die eingebaute PHP-Funktion \enquote{array\_keys} verwendet. Diese Funktion gibt alle
Keys eines Arrays in Form eines numerisch indizierten Arrays zurück.
Der optionale Parameter \enquote{filter\_values} bestimmt, dass ausschließlich die Keys
der Key-Value-Pairs, die einen bestimmten
Wert tragen, extrahiert werden \cite{bib:php-array-keys}. D.h., der Funktionsaufruf filtert alle Keys und somit alle
Wert (der Formwert) tragen, extrahiert werden \cite{bib:php-array-keys}. D.h., der Funktionsaufruf filtert alle Keys und somit alle
Formfeld-IDs des Formfeldparameter-Arrays heraus, die den Wert \enquote{<formfeldname>-true} haben. Das ist eine Liste
aller Formfeld-IDs der Checkboxen des SelectMultiples, die angehakt wurden.
Mit der eingebauten PHP-Funktion \enquote{array\_map} wird nun eine Operation auf alle Schlüssel
der Liste angewandt, die \enquote{strlen('formfeldname-')} Zeichen, von links ausgehend, von der Formfeld-ID
entfernt. Somit wird beispielsweise die Formfeld-ID \enquote{winekind-18} zu \enquote{18} transformiert. Übrig bleiben die \acp{UID} aller angehakten Elemente $a$, in Form einer Zeichenkette.
aller Formfeld-Namen der Checkboxen des SelectMultiples, die angehakt wurden.
Mit der eingebauten PHP-Funktion \enquote{array\_map} wird nun eine Operation auf alle Werte
der Liste angewandt, die
\break\enquote{strlen('<formfeldname>-')} Zeichen, von links ausgehend, vom Formfeld-Name
entfernt. Somit wird beispielsweise der Formfeld-Name \enquote{winekind-18} zu \enquote{18} transformiert.
Übrig bleiben die extrahierten \acp{UID} aller angehakten Elemente $a$, in Form einer Zeichenkette.
Über die eingebaute PHP-Funktion \enquote{intval} ist es trivial diese zu Zahlen zu übersetzen,
wodurch die tatsächlichen Objekte aus der Datenbank angefragt werden können.
@ -355,9 +360,9 @@ Generierung dieses PDFs die Bibliotheken \enquote{chillerlan/php-qrcode} und
\subsubsection{QR-Code-Generierung}
Der QR-Code beinhaltet lediglich die Wein-\ac{UID} anstatt einer vollständigen URL. Hintergrund dessen ist, dass
die benötigte URL, um einen Wein einzuscannen, bis auf die Wein-\ac{UID} immer identisch ist.
Somit wird redundanz vermieden.
Somit wird Redundanz vermieden.
Es ist Aufgabe der QR-Code-App, die den Code einscannt, aus der Wein-\ac{UID} eine vollständige URL herzuleiten.
Um effizient zu arbeiten, wird der QR-Code zu einem base64-kodiertem Bild gerendert.
Um effizient zu arbeiten, wird der QR-Code zu einem base64-kodierten Bild gerendert.
Das ist der Standardrückgabewert des QR-Code-\break{}Generators
und erfordert somit keine nähere Konfiguration. Ebenfalls lässt sich ein base64-kodiertes Bild als Quell-URL eines
IMG-HTML-Tags angeben, womit das Bild eingebettet ist. Das spart Arbeitszeit,
@ -385,6 +390,7 @@ Um dieses PDF-Dokument über die Verbindung an den Nutzer zu übertragen, wird e
Über dieses Response-Objekt werden einige Header gesetzt und direkt übertragen. Diese Header sind Content-Type und Content-Length.
Abschließend werden als Response-Body die Bytes des generierten PDFs übertragen. Damit ist die Verbindung beendet und das
PDF zum Nutzer übertragen.
\clearpage
\subsection{Jahresauswahlproben- und Wein-Detailansichten}
Weine und Jahresauswahlproben sollen unter bestimmten Gegebenheiten einsehbar sein.
@ -395,7 +401,7 @@ Die Detailansichten für Jahresauswahlproben und Weine benötigen spezielle Auto
Diese sind: Jahresauswahlproben sind nur einsichtig, wenn sich das aktuelle Datum innerhalb des
Sichtbarkeitszeitraumes der Jahresauswahlprobe befindet.
Detailansichten für Weine sind immer für den zugehörigen Teilnehmer einsichtig.
Nach Abschluss ihrer Jahresauswahlprobe sind alle ihr angehörigen Weine öffentlich einsichtig.
Nach Abschluss einer Jahresauswahlprobe sind alle ihr angehörigen Weine öffentlich einsichtig.
Das hat den Hintergrund, dass Jahresauswahlproben Blindverkostungen sind
und niemand die Möglichkeit haben sollte, im Voraus Informationen über die teilnehmenden Weine in Erfahrung zu bringen.
Die Ergebnisse der Jahresauswahlproben sind öffentlich, also sind es die Weine nach Abschluss einer Jahresauswahlprobe auch.
@ -408,11 +414,9 @@ zu anderen Ansichten generiert. Diese ViewHelper übergeben Parameter. Die hierf
Ansichten sind beispielsweise Wein-\acp{UID} und Jahresauswahlproben-\acp{UID}. Um Informationen über den angemeldeten Nutzer,
wie beispielsweise seiner Teilnehmernummer oder seiner Nutzergruppenzugehörigkeit, zu erlangen, wird sich
der Extbase-nativen Domain-Model-FrontendUser-Klasse bedient \cite{bib:typo3-ref-extbase-model-feuser}.
\pagebreak
Mit Abschluss der Phase der Digitization können alle Datenstrukturen im TYPO3-Backend händisch angelegt,
eingesehen, gelöscht und bearbeitet werden.
eingesehen, gelöscht, bearbeitet und im Frontend von Nutzern befüllt werden.
\section{Digitalization}
In der Phase \textit{Digitalization} werden bestehende Geschäftsprozesse so verändert,
@ -435,7 +439,7 @@ Wird ein Wein als \enquote{eingegangen} markiert, wird der betroffene Teilnehmer
Hierzu wird die FluidEmail-Klasse des TYPO3-Cores herangezogen.
Sollte ein Wein bereits als \enquote{eingegangen} markiert sein, wird keine Email verschickt und dem Mitarbeiter kommuniziert,
dass keine Änderungen vorgenommen wurden.
Abschließend werden im Frontend allgemeine Daten über den Wein angezeigt, damit sich Mitarbeiter sicher sein können,
Abschließend werden im Frontend allgemeine Daten zum Wein angezeigt, damit sich Mitarbeiter sicher sein können,
den richtigen Wein eingescanned zu haben.
\subsection{CSV-Export}
@ -459,7 +463,7 @@ Das CSV-Dokument wird über die PHP-native Funktion \enquote{fputcsv} generiert.
numerisch indizierten Array und schreibt eine darauf basierende CSV-Zeile in eine Datei \cite{bib:php-fputcsv}.
Um gut wartbaren PHP-Code zu erzeugen, werden alle CSV-Zeilen in einem zweidimensionalen Array,
der das gesamte CSV-Dokument darstellt,
durch alphanumerisch indizierte, innere Arrays abgebildet. Somit ist bei jeder Wertzuweisung der zugehörige Spaltenname ersichtlich.
durch alphanumerisch indizierte, innere Arrays abgebildet. Somit ist bei jeder Wertzuweisung der zugehörige Spaltenname als Array-Key ersichtlich.
Über die nativen PHP-Funktionen \enquote{array\_keys} und \enquote{array\_values} wird dieser zwar gut lesbare,
aber mit \enquote{fputcsv} inkompatible
Array zu einer Reihe kompatibler Array konvertiert. Hierbei werden durch \enquote{array\_keys} die Kopfzeile und durch
@ -471,12 +475,12 @@ Um \ac{WM} weitere Arbeitszeit zu ersparen, wird eine Download-Funktion für CSV
angeboten. Das erspart das manuelle Kopieren und Abspeichern von CSV-Zeichenketten durch IT-Fachfremde, reduziert damit die Anzahl
an benötigten Übergangsschritten in weitere Prozesse und reduziert somit die Komplexität der Umstellung.
Auch im Interesse, Arbeitszeit in der Umsetzung zu sparen,
wurde diese Downloadfunktion JavaScript-seitig umgesetzt.
wird diese Downloadfunktion javascript-seitig umgesetzt.
Dadurch ist der Download in derselben Action, die CSV für das Textarea-Feld generiert, implementiert.
Somit muss weder abstrahiert werden, noch ein weiterer CSV-Exporter gebaut werden.
Hierfür wird ein EventHandler auf den Download-Button angewandt, der bei Betätigung ein vestecktes
\enquote{a}-Element erstellt, über das HTML-Attribut \enquote{download} des \enquote{a}-Elementes den Download-Dateinamen
festlegt und als \enquote{href}-HTML-Attribut
eine Blob-URL zuweist. Diese Blob-URL wird über ein Blob-Objekt generiert.
Wird nun der Download-Button gedrückt, wird JavaScript-seitig eine Datei erzeugt und gespeichert
Wird nun der Download-Button gedrückt, wird javascript-seitig eine Datei erzeugt und gespeichert
\cite{bib:tutorialspoint-js-save-text}.

View File

@ -1,6 +1,6 @@
\chapter{Stand der Forschung}
\label{chap:stand-der-forschung}
Der Stand der Forschung beleuchtet verschiedene Entwicklunsmethodiken zur Digitalisierung und zur digitalen Transformation.
Der Stand der Forschung beleuchtet verschiedene Entwicklunsmethodiken zur Digitalisierung.
\section{Modell nach Parviainen et al.}
\quotecite{The importance of digitalization is becoming understood,
@ -65,7 +65,7 @@ werden \cite{bib:Parviainen_Tihinen_Kaariainen_Teppola_2022}.
Nach Verhoef et al. lässt sich der hier sogenannte \enquote{Prozess der Digitalisierung} in drei Phasen unterteilen.
Diese drei Phasen sind \textit{Digitization}, \textit{Digitalization} und \textit{Digital Transformation}
\cite{bib:verhoef}.
Die Phase \textit{Digitization} befasst sich mit der Umwandlung analoger Datenstrukturen und Modellen in digitale Datenmodelle,
Die Phase \textit{Digitization} befasst sich mit der Umwandlung analoger Datenstrukturen und Modelle in digitale Datenmodelle,
sodass diese digital, in Form von Nullen und Einsen, gespeichert und elektronisch\break weiterverarbeitet werden können
\cite{bib:dougherty}\break\cite{bib:loebbecke}.
\quotecite{Examples concern the use of digital forms in ordering processes, the use of digital surveys, or the use digital applications for internal financial declarations.} \cite{bib:verhoef}.
@ -76,11 +76,11 @@ Ergründungen neuer Geschäftsmodelle mit sich bringen könnte \cite{bib:pagani}
\section{Abwägung in Bezug auf die Problemstellung}
In Bezug auf die hier betrachteten Methodiken ist es wichtig zu erwähnen, dass der betrachtete Kontext
lediglich die Digitalisierungs \textbf{eines} Geschäftsprozesses behandelt.
lediglich die Digitalisierung \textbf{eines} Geschäftsprozesses behandelt.
Diese Ausarbeitung befasst sich nicht
mit firmenweiten Veränderungen, wie sie von den nahegelegten Modellen abgedeckt ist.
Daher sind geringfügige Anpassungen der Methodiken unabdinglich.
Des Weiteren ist Resourcenintensivität ein relevanter Gesichtspunkt dieser Abwägung, da eine solche Digitalisierung
Des Weiteren ist Ressourcenintensität ein relevanter Gesichtspunkt dieser Abwägung, da eine solche Digitalisierung
effizient und profitabel sein soll.
\subsection{Parviainen et al.}

View File

@ -1,7 +1,7 @@
\chapter{Stand der Technik}
\label{chap:stand-der-technik}
Der Stand der Technik bezieht sich auf bestehende, praktische Umsetzungen der erforderlichen Technologien.
Im Wesentlichen gibt es drei Arten von Technologien, die untersucht werden müssen: Die bestehende Website von \ac{WM},
Im Wesentlichen gibt es drei Arten von Technologien, die untersucht werden müssen: Die bestehende Webseite von \ac{WM},
Bibliotheken zur Erzeugung von QR-Codes und Bibliotheken zur Erzeugung von PDF-Dateien.
\section{Die bestehende Webseite}
@ -46,7 +46,7 @@ Issues scheinen ignoriert zu werden. \enquote{Kjua} ist MIT-lizensiert \cite{bib
serverseitig, als Kommandozeilenwerkzeug, sowohl auch browserseitig an. Die Readme-Datei ist umfangreich, reich an Beispielen
und detailreichen Erklärungen. Der letzte Commit ist zu diesem Zeitpunkt knapp älter als ein halbes Jahr. Somit macht das
Projekt einen moderat gepflegten Eindruck. Die Readme-Datei verweist auf Unit-Tests bei Travis, jedoch lief die letzte Pipeline
vor etwa zwei Jahren durch, Februar 2021 und schlug fehl. Einige Pull-Requests und Issues werden seit Jahren ignoriert
vor etwa zwei Jahren, Februar 2021, durch und schlug fehl. Einige Pull-Requests und Issues werden seit Jahren ignoriert
\cite{bib:soldair-node-qrcode}.
Die Bibliothek wurde 74 Millionen mal heruntergeladen und mit 6.308 Sternen markiert.
\enquote{Soldair/node-qrcode} ist MIT-lizensiert \cite{bib:npmjs-soldair-node-qrcode}.
@ -61,14 +61,14 @@ Insgesamt erfolgten bis dato 808 Commits von 6 Entwicklern. Das Projekt verfügt
die 90\% der Zeilen der Codebase abdecken. Rochko übernahm Teile der Codebase aus
dem Java-Projekt \enquote{ZXing} und übersetzte diese zu PHP.
Es gibt zu diesem Zeitpunkt keine unbeantworteten Issues oder Pull-Requests.
\enquote{Chillerlan/php-qrcode} basiert auf einer angepassten Version von \textit{kazuhikoarase/qrcode-generator}.
\enquote{Chillerlan/php-qrcode} basiert auf einer angepassten Version von \enquote{kazuhikoarase/qrcode-generator}.
Einzig auffällig sind die Commitnachrichten, die zuteils nur aus einem Emoji bestehen.
\enquote{Chillerlan/php-qrcode} wurde von 1.212 Github-Nutzern mit einem Stern markiert.
Die Bibliothek ist MIT-\break{}lizensiert
\cite{bib:chillerlan-php-qrcode}.
\subsubsection*{Kreativekorp/barcode}
\enquote{kreativekorp/barcode} ist eine PHP-Bibliothek zur Generierung von QR-Codes, bereitgestellt von
\enquote{Kreativekorp/barcode} ist eine PHP-Bibliothek zur Generierung von QR-Codes, bereitgestellt von
\enquote{Kreative Software}, R.G. Bettencourt.
Diese Implementation umfasst etablierte Barcode-Formate und unterstützt eine Vielzahl an Anpassungsmöglichkeiten.
Das Projekt wurde bis zum heutigen Tag 189 mal mit Sternen markiert \cite{bib:kreativkorp-barcode}.
@ -84,7 +84,7 @@ Die Bibliothek verwendet die MIT-Lizenz.
\enquote{Bacon/BaconQrCode} ist eine PHP-Bibliothek zur Generierung von QR-Codes, bereitgestellt von Ben Scholzen, hinter
der Github-Organisation \enquote{Bacon}, dessen einziges Mitglied Scholzen darstellt. Verlinkt ist eine Homepage,
die zu einer Nginx-\enquote{Hello World}-Seite führt. Begleitet wird \enquote{BaconQrCode} von etlichen weiteren \enquote{Bacon-Projekten}
wie Beispielsweise \enquote{BaconPdf}, \textit{BaconStringUtils} und \textit{BaconUser} um nur einige zu nennen.
wie Beispielsweise \enquote{BaconPdf}, \enquote{BaconStringUtils} und \enquote{BaconUser} um nur einige zu nennen.
Insgesamt machen die stichprobenartig betrachteten Projekte einen desolaten Eindruck mit zuteils aktuellesten Commits
von vor zehn Jahren. \enquote{BaconQrCode} stellt das beliebteste und gepflegteste Projekt von Scholzen mit 1.508 Sterne-Markierungen und
einem aktuellsten Commit von vor zwei Monaten dar. \enquote{BaconQrCode} fällt mit siebzehn Entwicklern auf, die jeweils zumindest
@ -109,7 +109,7 @@ Hierfür werden die zuvor vorgestellten Bibliotheken zur Erstellung von QR-Codes
\begin{description}
\item [Funktionialität] \hfill \\
Der Umfang, der unterstützten Funktionen, in Annahme dessen, dass die Bibliothek
syntaktisch und pragmatisch korrekt ist\\\cite{bib:heinemann-vorlesung-re}.
syntaktisch und semantisch korrekt ist\\\cite{bib:heinemann-vorlesung-re}.
\item [Gepflegtheit] \hfill \\
Das Ausmaß, in dem das Projekt aktiv gepflegt wird und ordnungsgemäß entwickelt zu sein scheint.
@ -203,7 +203,7 @@ bereitgestellt \cite{bib:chillerlan-php-qrcode-composerjson} und weist eine ähn
\subsubsection*{Kreativekorp/barcode}
Kreativekorp beeindruckt in der Readme-Datei durch Nutzungsbeispiele und Dokumentation,
sowie einer Vielzahl unterstützter Barcode-Formate, darunter auch QR-Codes und einiger improvisierter Tests.
In Anbetracht dessen, dass die Bibliothek de-facto sechseinhalb Jahre alt ist und seit vier Jahren nicht mehr
In Anbetracht dessen, dass die Bibliothek de facto sechseinhalb Jahre alt ist und seit vier Jahren nicht mehr
angepasst wurde, wird eine geringe Wertung von drei Punkten in \enquote{Gepflegtheit} vergeben.
Null Punkte in \enquote{Workflow-Eignung} rechtfertigen sich durch die Abwesenheit jeglicher
Unterstützung für Paketmanager, wodurch eine saubere Verwendung in dem Brown-Field-Projekt
@ -228,10 +228,11 @@ Es werden Rasterbilder und verschiedene Vektorformate als Renderziel unterstütz
die andere Bibliotheken bereitstellen, werden lediglich fünf von zehn Punkten in \enquote{Funktionalität} vergeben.
Die Projektgepflegtheit ist inkonsistent. Manche Stellen, beispielsweise die Mitwirkenden, Alter des neuesten Commits, Tests
und Nutzerzahlen machen einen guten Eindruck, während Punkte wie die Dokumentation, die Organisationswebseite und andere
Projekte Sorgen begründen. Weil der Programmcode an sich gut gepflegt aussieht und große Downloadzahlen von
Projekte von Scholzen Sorgen begründen. Weil der Programmcode an sich gut gepflegt aussieht und große Downloadzahlen von
häufiger Verwendung sprechen, werden für die \enquote{Gepflegtheit} acht Punkte vergeben.
Da es sich hierbei um eine PHP-Bibliothek handelt, die über Composer in PHP- $7.x$ und $8.x$ Projekte geladen werden kann
und das Projekt eine API bereitstellt, ist die technische Workflow-Eignung gut. Die BSD-2-Clause-Lizenz verkompliziert eine Integration,
und das Projekt eine API bereitstellt, ist die technische Workflow-Eignung gut.
Die BSD-2-Clause-Lizenz verkompliziert eine Integration,
da somit eine Copyright-Notiz an Nutzer gezeigt werden müsste \cite{bib:opensource-license-bsd-2}.
Dadurch werden drei Punkte einer vollkommenen Workflow-Eignung abgezogen, wodurch sieben Punkte vergeben werden.
\begin{table}[htbp]
@ -253,7 +254,7 @@ Somit wird \enquote{chillerlan/php-qrcode} als QR-Code Technologie in der Lösun
\begin{table}[htbp]
\centering
\begin{tabular}{|l||l|l||l|l|}
\begin{tabular}{|l|l|l|l|l|}
\hline
\textbf{Bibliothek} & \textbf{Funkt.} & \textbf{Gepflegtht.} & \textbf{WF.-Eignung} & \textbf{$\Sigma$}\\
\hline

View File

@ -10,7 +10,7 @@
\newcommand{\cfgDocClassification}{Abschlussarbeit}
% Document version
\newcommand{\cfgDocVersion}{2.5.3}
\newcommand{\cfgDocVersion}{2.6}
% Last modification date
\newcommand{\cfgDateLastModification}{30. März 2023}

View File

@ -5,4 +5,4 @@
\nocite{*} % Show all references, even unused ones
\bibliography{dexes/literature}
\bibliographystyle{apalike}
\bibliographystyle{apalike-german}

View File

@ -1 +1 @@
<mxfile host="Electron" modified="2023-03-27T15:38:18.711Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/20.8.16 Chrome/106.0.5249.199 Electron/21.4.0 Safari/537.36" etag="PAhar_P2aHQsZCkSiz7f" version="20.8.16" type="device"><diagram name="Seite-1" id="c5J236jw9uxX1O-q0mKY">7VtZc+I4EP41VO0+sIVtMPBIzs0mmZ2ZTM2xb8JubAXZYmURIL9+W7YcX1wzQOxs5SVYLdmS+utPfdhpWefB8lqQmX/PXWAts+MuW9ZFyzQNY9jFHyVZJZKBqQWeoK4elAke6DNoYUdL59SFqDBQcs4knRWFDg9DcGRBRoTgi+KwCWfFWWfEg4rgwSGsKv1GXemnu+hn8j+Ben46s2EPk56ApIP1TiKfuHyRE1mXLetccC6Tq2B5DkwpL9VLct/Vht6XhQkI5T43nNk3i79XZ/JzYH26vfp+c3cRjtqpmiO5SncMLipAN7mQPvd4SNhlJj0TfB66oB7bwVY25o7zGQoNFD6ClCuNJplLjiJfBkz34orF6ru+P278UI0/emnzYpnvvFjp1oSHUj/USHrdkcIY22PGnWkiuqKM6RuqOtJqi/hcOLBNMdrWiPBAbhlnJuOU0nITaASugQeAG8ABAhiR9KloVUQbp/cyLsMPLzSEPwNn8twnwuZ6plsFlTJHYC5uxOx8AxriDw8ZDVUHCSsWUMR34VMJDzMSq2uBLC9iOUFtn3PGRXyv5RIYTByUR1LwKeR6bGcA40kJRXMbSE8gJCy3qjXttbQd61PG7Or2IuOskcr8HF/tzqmQMCpqfSdWjjA7iWU1ilhmhViaRzRSpKJBy7QZbudsLAqg2//O1fkeK7gdxRoe4QDDnC1jLab9eOWp34dVJCFQRkpDCYIBSt8+PS2zcfTs10vPjJE/CoSsnZ5Hp52+9SNHg84swuwULcLqlpBOzgd9VwY2bpuscsNmakC0eZ7eoDRPOUjata7ieLxIVpBZ3otOft0YrU2Hy4IKNyFahPjC/+Eo6BlNOwrShOTdU5cU0983BG5WDNyvsOlGcen+oX25dOLsdAHCBSX7i/gCIjKPFsRnM8HHsdSDGSPxoYAYq9mU8AuNHB/jZZsEilbJ3yum7DNSu5hPUElA2aEcPb3z7b0m4+6nI/nPdYd9+nzm0hFnxuNHu22+2aTTPC3jBnsybtgowg0qhLugKrO8xF2MQxpFkOecYtPWUHnMcaRoO4k/GsVPFr+123n577GaO/tG1emM0UxluweE548QgsgdJu07jP8hoWMAYirTmVCRyWTpAhp2KJQTZrt2NzzcYUUs0fRRsiwdV83mY0afKSqtcfiUD+368TGrtaUXNPYCo7uDnGr8QQ+6BnTRrXOrNepOZITu/Bki5ZtD4vg+6LOk6vJzlE2WUFwWiscbaYxoyqItFIPpkIdQiry1iGDoEGLTAZXno0DZBnUIG+mOgLpu7PjWGV/RPPP21z2N/Rm9qv1Zxhr7s04WNNRSUHtF55+G0Tu9/+DY3v8ombX9k5m1/RqZdarTilfZfAwcx7WQsQc+YRIOra6fPgOvPx94L5VvOPKqB8Lacd260oFtq85R7iuIiKj6FZ0iJK20rnUUvj1xFdGrehnm7Ip59zxSSf5RHo5P9TCoIGGIlvb2a2/loN+qnfnWO/O3MXon8+1GMb9bYX7lJVnn5QUXYXHdDAk25UEQlwayJPrNU60cP9dPtWG9VGvCC69tFNpJtX6jqGZvopqOP2PPxYgX1zZeu9yWlM0DGqfzuJK4ZHYLYRjOkemipd9o+QcHx01gejmcrp/phv1WqX68DHsbhXdS3WhWQF19oaW47pI4ucwK64lDPX/4qla+nCGER6hsNpFh3foZ1qlA8gHwysTHdVzqUam+H8Vgx/EFlapsXR8IWymzPwj9Uvlm7Xv7zhoQyh92HA+EzQXpvUvJmzzYHXjqg4t41Ibq8NErwQwmsnF14ArsZhX24RrUjZOhXi0vfKCOr+D+AjT+9pxCFAcZo3lExBionGMwdCAFX4FQw9oJ1as3bvj1bPzEcYOxJh3f9ulJQ+IGo5qPY3TQXhs80NInMjQ4UgBx+irWKevX2Mz+QSN5KZH9m4t1+R8=</diagram></mxfile>
<mxfile host="Electron" modified="2023-03-30T16:24:11.739Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/20.8.16 Chrome/106.0.5249.199 Electron/21.4.0 Safari/537.36" etag="uJLDwojdT_EOwQ1EVR7a" version="20.8.16" type="device"><diagram name="Seite-1" id="c5J236jw9uxX1O-q0mKY">7VtZc6M4EP41rtp98BaHg51H59xsktmZ8dQc+yZDGxQL5BVybOfXbwtEuHzNxA5kKy8xaglJ9Nef+oB07PNweS3ILLjnHrCOZXjLjn3Rsaye3cO/SrBKBbZhpAJfUC8VmblgRJ9AC7Nhc+pBXBooOWeSzspCl0cRuLIkI0LwRXnYhLPyqjPiQ00wcgmrS79RTwapdGD1c/mfQP0gW9l0TtOekGSD9ZPEAfH4oiCyLzv2ueBcplfh8hyY0l2ml/S+qw29zxsTEMl9bjhzbhZ/r87k59D+dHv1/ebuIhp2MzXHcpU9MXioAN3kQgbc5xFhl7n0TPB55IGa1sBWPuaO8xkKTRQ+gJQrjSaZS46iQIZM9+KOxeq7vj9p/FCNP06y5sWy2Hmx0q0Jj6Se1Ex7vaHCGNtjxt1pKrqijOkb6jrSaov5XLiwTTHa1ojwQW4ZZ6XjlNIKC2gEroGHgA+AAwQwIulj2aqINk7/eVyOH15oCH8GznTeR8LmeqVbBZUyR2AePohlfAMa4Q+PGI1UB4lqFlDGdxFQCaMZSdS1QJKXsZygts854yK51/YIDCYuymMp+BQKPY47gPGkgqK1DaRHEBKWW9Wa9drajvUpY/V0e5Fz1sxkQYGvjnEsJMyaWt+JVSDMTmLZrSKWVSOW5hGNFalo2LEcho9zNhYl0J1/5+p8TxTcjRMND3GAac2WiRazfrzy1e9oFUsIlZHSSIJggNK3T0/bah09+83SM2fkjxIhG6fnwWmnb/3I0aBzi7CMskXYvQrS6fmg78rBxscmq8KwmRoQb17nZFBZpxok7dpXeTxepDvILe9ZJ79ujPamw2VBhZcSLUZ84f9wFJyYbTsKrN67p16rmP6+IXC7YuB+jU03ikv3o+7l0k2S0wUID5TsLxIIiMk8XpCAzQQfJ1IfZowkhwJirFZTwi80dgOMlx0SKlqlf6+Yss9YPcV8gkoCyl7K0eM735PXZNz9dCj/uTbYp89nHh1yZj58dLrWm006reMybrAn405bRbhBjXAXVGWWl/gU44jGMRQ5p9i0NVQecxwpum7qj4bJzOK3brco/z1Rs7FvVJ2tGM9UtvuC8PwBIhCFw6R7h/E/pHQMQUxlthIqMl0s20DLDoVqwuw07oZPd1gRSzV9kCxLx1Wz+ZjRJ4pKax0+1UO7eXysem3pGY29wOjtIKca/6KJrgFddOfc7gx7ExmjO3+CWPnmiLhBAPosqbv8AmXTLZS3heLxRhojmrJsC+VgOuIRVCJvLSIYOkTYdEHl+ShQtkFdwoa6I6Selzi+dcZXNs+i/fWOY3/mSd3+bHON/dlHCxoaKai9ovPPwuid3n9waO9/kMza+cnM2nmNzDrTac2rbD4GDuNayNiHgDAJL62uHz8Dbz4feC+Vbzjy6gfC2nG9ptKBbbsuUO4riJio+hWdIiSdrK51EL49chXRq3oZ5uyKefc8Vkn+QSbHWX0MKkgUoaW9/dpbNei3G2e+/c78bYzeyXynVczv1Zhfe0lmPL/gIiypmyHBpjwMk9JAnkS/eapV4+fmqXbaLNXa8MJrG4V2Uq3fKqo5m6im48/EczHiJ7WN1y63pWXzkCbpPO4kKZndQhRFc2S66Og3WsGLg+M2ML0aTjfPdNN5q1Q/XIa9jcI7qW62K6Cuv9BSXPdIklzmhfXUoZ6PvqqdL2cI4QEqm21kWK95hhk1SD4AXlk4neFRn0r1/SgGO24gqFRl6+ZA2EqZ/UHoV8o3a9/bG2tAqH7YcTgQNhek9y4lb/Jgd+CrDy6SURuqwwevBDOYyNbVgWuwW3XYT9egbh4N9Xp54QN1AwX3F6DJp+cU4iTIGM5jIsZA5TzyX8jAV+DTaeN8Omk2bPj1ZPzIYYO5Jhvf9uVJS8IGs56OY3DQXRs70MoXMjQ8UPxw/CLWMcvX2Mz/PyN9J5H/k4t9+R8=</diagram></mxfile>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 65 KiB

View File

@ -1 +1 @@
<mxfile host="Electron" modified="2023-03-26T17:28:06.834Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/20.8.16 Chrome/106.0.5249.199 Electron/21.4.0 Safari/537.36" etag="hIg8A2igoXO-HTw_ShVI" version="20.8.16" type="device"><diagram id="k7iwBMskrYiuqxr37yBD" name="Seite-1">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</diagram></mxfile>
<mxfile host="Electron" modified="2023-03-30T16:29:30.530Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/20.8.16 Chrome/106.0.5249.199 Electron/21.4.0 Safari/537.36" etag="SpCmjzHV4CKJhuAyYgqq" version="20.8.16" type="device"><diagram id="k7iwBMskrYiuqxr37yBD" name="Seite-1">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</diagram></mxfile>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 46 KiB

View File

@ -1 +1 @@
<mxfile host="Electron" modified="2023-03-29T11:24:04.410Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/20.8.16 Chrome/106.0.5249.199 Electron/21.4.0 Safari/537.36" etag="P_FsIsnh0ajq8UttcqSZ" version="20.8.16" type="device"><diagram name="Seite-1" id="4AvssoyQ3F2APBzfr0LI">7VpZc+I4EP41VO0+ZMoHGHgkENip2t2wm52ZzaOwG1uJbFGyOH/9SLZ8YQ4zxBxT85JY7ZYld39fd6tNw+z7qxFDM+8v6gBpGJqzapiDhmHoercp/knJOpZ0DCVwGXaUUiZ4wRtQQk1J59iBsKDIKSUcz4pCmwYB2LwgQ4zRZVFtSklx1RlyoSR4sREpS79hh3vJW7Qz+R+AXS9ZWbe68R0fJcrqTUIPOXSZE5lPDbPPKOXxlb/qA5HGS+wSzxvuuZtujEHAq0z4520UfP7yL3rrLMzuV2c0GiwmD0ZLbY6vkzcGRxhADSnjHnVpgMhTJn1kdB44IB+riVGm8yelMyHUhfANOF8rb6I5p0LkcZ+ou2LHbP2/nP+plQxf1eOiwWBVGK3VqPzKygohnTMbDr2ngg5iLvADenonVpRGyK2gLDoC6oPYkFBgQBDHiyJKkAKbm+pl/hAXyiWnuCd+7gKRuVpp7KEQhEiYsSf+DbCLOd6IrdCg5MlwiX2CAumypYc5vMxQZKSloGrRIXsNuwDGYXXQEuqumeB8vTVeZrQxNCXzcpQx2lpN1tPNK4PbOBPdhzBxFPJmVcgbHw35aGqPMbTOKcwoDniYe/JYCjL8WEX46NvR7CR1cRGvn4EnfZEfx5NZZqOg1zxwG3L1YURH5DLk+xCx0yLC7o8TJq5cefU8eYN3HpuRBiAI29+nJPgBQWh7aMr36P095xtg00bfbDz2PRbvYiGjgDZAYpIvUzGRk7Xf/nsdP5sPj8h+h8D5XTzuG0wehpT5cyLQViJJkQInh46DkaxyPNkKJ81yNNGtHdFE12uLJtZ9p8qzgkkSJI5Hk9ZNJdBk3znODgGciaCCkI6f7wL7ersi+M3asN+8BvZrwvAHJ7pSatKbW+5rbbklJpGalXnm1IxZWsc6nDKP6NeTM5N4kCPgFz8EvokTVj5VicyGfMmw+O995SdjR7l7YY627zs/VT3KtSpmog9n+1neKdOgF0wpc0BWbqEo5FAYRpS4pTNct+IRTu/WBeruVTC9wjwHaTF6zd3JAC0H6zy666vTkjbNMXJYFcnRvilyWCVyfA44sAWGpeykYX65Wi3had3nlPrSgFay0y/KHKJMuyJlbqsz2C5RZsiQC5OoH2C50blfNQeYuHzh6B08SkS+uQsa7cg8l6VRp2Tf8ZRg2xPlqgdTfhdG1K8fjHaYUTWwjVwDG5GbbGFbO+y3u4XdrM2A1ymAam5hJ7A4/tlGqxicjXrO9j9hEzsx6Q93sWVS6fYnwCYMB248T36iNbQRhLYnb/eaUx7OGN1AGEJ4kViZRpq6C7dOXVRPD8B3en4/k+lGVaY3b6oOS/Z91Qbz2eC/fqVgXOVbbV0ovniL2djyS10tZvPEFrN5iYzWLFEwqSpDDCzJUGxvhroTjl79TGSU+zRpeZBUB2lzP5ylVUWAhNFLdcRXYB6FqWSLRBAin6Lv3Krd0wtmcUdUnmTjqWLP6TIllwmb8qJfQs7oO/QpoUxIAhodIqaYkC2RgIkbiKENsuckBNJD2Eakp2742HHIvhNIESplLJx8CEndty56M+d1s/MxXhfD7OdnMRuzH/GZT98B</diagram></mxfile>
<mxfile host="Electron" modified="2023-03-30T16:13:26.473Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/20.8.16 Chrome/106.0.5249.199 Electron/21.4.0 Safari/537.36" etag="NBkm3Zraic1t1MOXaLR9" version="20.8.16" type="device"><diagram name="Seite-1" id="4AvssoyQ3F2APBzfr0LI">7VpZc9s2EP41mmkfnOGh81GWLDUzba3WTVI/QuSKhA0CGhA6f30AEbxEHVRk6sjkxSaWCwLc/b7dxVI1uxcshxxN/b+YC6RmGe6yZvdrlmUa7Yb8pySrSNKqdyKBx7GrlVLBC15DPFNLZ9iFMKcoGCMCT/NCh1EKjsjJEOdskVebMJJfdYo8KAheHESK0m/YFX4kbVutVP4HYM+PVzab+v0CFCvrNwl95LJFRmQ/1eweZ0xEV8GyB0QZL7ZLNG+w526yMQ5UlJnwz9uQfv7yL3prz+3OV3c47M/HD5Z2TyhW8RuDKw2gh4wLn3mMIvKUSh85m1EX1GMNOUp1/mRsKoWmFL6BECvtTTQTTIp8ERB9V+6Yr/5X8z814uGrftxm0F/mRis9Kr6ytkLIZtyBQ++poYO4B+KAntmOFJURMitoiw6BBSA3JBU4ECTwPI8SpMHmJXqpP+SFdskp7omeO0dkplca+SgEKZJm7Mp/fexhgddyK4wWPBkucEAQVS5b+FjAyxRtjLSQVM07ZK9h58AFLA9aQt+1Y5yvtsaLlDaWoWV+hjJWy6jIeqZ9ZXBbZ6L7ECaOQt4uC3nroyG/mdrlHK0yClOGqQgzTx4pQYqfZh4+5nY0O0ldXkTrp+BJXuTH8WQX2SjpNaNeTa0+2NAReRwFAWzY2STS7o9jLq88dfU8foN3EZmRUZCE7e1TkvwAGjo+mog9en/PxBr4pNaza489n0e7mKsoYPSRnBSoVEzUZOO3/15Hz/bDI3Legbq/y8d9g/HDgPFgRiTaCiTJU+Dk0HEwkpWOJ1vhpF6MJmZzRzQxzcqiSfO+U+VZwSQOEsejSeOmEmi87wxnBwDuWFJBSkfPd4F9s1US/HZl2K9fA/sVYfiDE10hNZn1Lfc1ttwSkUjPSj1zasYsrNM8nDKP6FeTM+N4kCHglyAEsY4SVjZVycyGAsWw6O995SdrR7l7YY627js/lT3KNUpmog9n+1neKdKgSyeMu6Aqt1AWcigMN5S4pTNcp+QRzuxUBerOVTC9xCIDaTl6zdxJAa0Gqyy6q6vT4jbNMXI0S5KjdVPkaBbI8ZkK4HMMC9VJw+JytVrM06rPKdWlAaNgp1+UOUSZVknK3FZnsFWgzIAjD8bM2xz5dV+Ay8sXgd7BZ0Smmrtg0I6kc1kGtQumHU0IdnxZqfowEXdhRPP6cWiHGXXv2sr0rhG5ye51c4f9dnev65UZ8Dq1T8Xd6xgWx7/YGCXjslXNsf4n7F/HJv3hBrZKKp3eGPiYY+pF89TXWcsYQuj46na3PhHhlLM1hCGEF4mVSaSpumZrV0X15Ox7p0f3M5lulWV6/aZKsHjfV+0tnw3+61cK1lU+01aF4ot3l60tv1TVXbZP7C7bl8ho9QIF46oyxMDjDMX3Zqg74ejVz0RWsUWTlAdxdZD09cNpUlVQJI1eqCO+AvcZTBRbFIIQ+bT5xK07PV06jZqh6iQbTZV7TpYpuEzaVOT9EgrO3qHHCONSQtnmEDHBhGyJJEw8KocOqHaTFCgPYQeRrr4RYNcl+04geagUsXDyISRx3yrvzYzX7fbHeF0O01+eRWxMf79nP30H</diagram></mxfile>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 53 KiB

View File

@ -1 +1 @@
<mxfile host="Electron" modified="2023-03-27T14:42:48.179Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/20.8.16 Chrome/106.0.5249.199 Electron/21.4.0 Safari/537.36" etag="hAVuMy2DVt5H_X7tBGfx" version="20.8.16" type="device"><diagram name="Seite-1" id="OQF_a6zVYjKttAf1AJ-S">5Vnbkto4EP0aHr0FNhj8CAyQzUIqW2Qzl5eUsBtbQUisLHOZr1/Zlm/YMFADA8lOFTV0q2W1u0+flkTN6C+3I45W3oQ5QGp63dnWjIearjcaVlP+CzU7pbEsI9a4HDtKlymm+BWUsq60AXbALxgKxojAq6LSZpSCLQo6xDnbFM3mjBRXXSEXSoqpjUhZ+4gd4cXajt7O9J8Au16ycsO04pElSozVm/gectgmpzIGNaPPGRPxt+W2DySMXhKXeN7wwGjqGAcqTpkwHfP2aLL6PEXTPnTWf9HH0UAzVDZ8sUveGBwZACUyLjzmMorIINP2OAuoA+Fj61LKbMaMraSyIZU/QYidyiYKBJMqTyyJGpUe892Tmh8Jz6HwRysRH7b5wYddKjndMKdSnBFmL2LVEBOiDMoxUWHyWcBtOBIIXWELcRfEsYCpbIZRyq2gQj4CtgTpsTTgQJDA6yKMkEKjm9qpqfK10C5nsGKYCj/35K+hQhqoytI7yo+krvRWMfnn2csvsQeJlHuVTBUB6gxwqZiuEQlUGL4BJhS8JfCwQmp9o9YzbU9ATTeJjHpvJvWmG357BEzDeNAlEAdoCaUZBkNAbTwsYLpCUYo3koqKeJszKhQYGzKiPZcg31eQ8QVni7S2Q+u0UMPhuQRXnxHGo2UNiP7SabkRwzQswzmGwTVwAdujoElG68VsWUrcZAzUMJXOy7FPu34YZrlUn5/JZimTX6L8vJM6cimqIIxKYsmnsnEKJUhJ2XfezjZBMyA9ZC/cyNEkvZRReAdtHUTEmySSVKvK63mckpFAYsLmc1+y21GiaBWhl66dPCNmSDVrD1YX4AyzhDTFBNgXZZZA1IWIIMT/myAaH8kQn+joh2i3vljaZObMF4tvL8FIa5QScMf7iHy6r7yvSPYLb24smqdywskk8C7GT/zOFWLYri1zPpdcqNc/I4+DjwJ/gzyy4mwGVBvLGgWKqI9lT39fQV6gRtKueYMm+mf/weptWQ+9THotZzTdju1OUiL5iCpCc/A6YbSU4wrBM/8NWKRNW5Nmx8zSDVelWGBE4tnKMnneP0/akEhk63VNfkIujbdUAXVzq8n3me17IHUVfl3R1dA5gqT9hPnRMXIgZQxz4NJZfwN88QqBe8zlrDEceomDmKyf0CRyTK92BEWSV8oLYHcPuppexq5ehV3zWvR+22NiKtwfvVun0rt5X/RulchoGB3H+oSAIgqtXFYPSBK8j8Rr6FPg35zjm/vH2pvvg/RbFMoHAj7Zprx9UWLdFeCbld1XdSB1xOimlw3JgDZB/qLidmLNaOUeqKIRRXcc4abpnXcYV6iWmxeL9bsXi3lisdxXc2iWD+FDxpcBQeG1HZr5toftxR0Aen+f9KH0H4jJoLv7/vLifG3Y5OfL33zcqtjjT2Xy5WFoOKDOKqCLy11UdH6Be4rmfoLK+WlXpEe/VnrKN9LdhcDsctfLZyblAiFutW8W4hmd69tdf/r8nW9MqztePj3/qKiAMbiSUCE6AO6FWb6jKMay8kRVcfJCBLtUiraMHPCwJcuIYRuRrhpYYseJGkZV8opNZL8jXAH4WkVaWpdJixSzHxHja9jst1hj8B8=</diagram></mxfile>
<mxfile host="Electron" modified="2023-03-30T16:34:31.425Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/20.8.16 Chrome/106.0.5249.199 Electron/21.4.0 Safari/537.36" etag="TQ0JShpZqPYf8JSQ05lG" version="20.8.16" type="device"><diagram name="Seite-1" id="OQF_a6zVYjKttAf1AJ-S">5Vnbkto4EP0aHr2FbTD4kXs2C6lskc3M8JIStrAVhMTKMpf5+pVs+YYNAzUwkOxUUYNaLUvuc/q0JGpmb7UbMbD2J9SFuGbU3V3N7NcMQ9fthvgnLXtlsW0ztngMucqWGaboFSpjXVlD5MKg4MgpxRyti0aHEgIdXrABxui26LaguDjrGniwZJg6AJetT8jlfmxtG63M/gkiz09m1i077lmBxFm9SeADl25zJnNQM3uMUh5/W+16EMvoJXGJxw2P9KYLY5DwcwZMx6w1mqw/T8G0B9ubv8jTaKCZCo2A75M3hq4IgGpSxn3qUQLwILN2GQ2JC+Vj66KV+YwpXQujLow/Ied7hSYIORUmn6+w6hUrZvtnNT5qvMjGH82k2d/lO/v7tOV2JKaiOcfUWcamIcJYOZRjosIU0JA58EQgDMUtwDzITwVMoSmjlJtBhXwE6QqKFQsHBjHgaFOkEVBs9FI/NVS8FtjnHNYUER7knvxVGoSDyiyjrdaR5JXRLIJ/mb/4Eq8gaeVeJTNFhLqAXCqmG4BDFYZvEGEC/RVkMkNqPbPWtRyfw5phYRH17lzYLU9+e4KIyHiQFcQuJCWWZhyUhNr6iMPpGkQQb4UUFfm2oIQrMuoiol0PgyBQlAk4o8s0t6V3mqiyeyHI1aOYsmhaE0Z/6bBcj2mZtume4uAGMg53J0mT9NaLaNmquc0USLeUzc+pT6t+nGY5qC9HslFC8kuEzzulIwdRhWBUCkseSv0cSRAt5d9+G20M5hB3gbP0ooUm8BJK4Dtk6ygj3hSRJFsVrpdpSiYCiQtdLAKhbieFolmkXjp38oxYIdWoA1pdQTOsEtOUEqCAl1UCEA9GAsH/3wKhf6RCfCKjH7zV/GJrk7m7WC6/zcKRppcAeOB9RB7uG+8rkv3CmxuLxrmacLYIvEvxk3XnElGWa9taLIQWGvXPwGcwAGGwBT5eMzqHRBuLHIUEkACJmv6+hLxCjqRV8w5F9M9e3+7uaBfMJt2mO5ruxk47SZF8RJWguWiTKFqqcYXgWf+GNLKmpUlzYmXpyFkJ4gjgeLTyTJ73z7M2xILZRl0TH6ml8ZYqJF40OJ5NvM/8cAXCVrGuGy5VLg4D4T+hQXSMrODYFrLlKwy9UwvPysOxVznKzPoZpSKn92pfUJR6ZbwCgw8IrBllBptmBYOtW4n8fQ+LaePxRN4+V+StxxJ5uyRJw+hQ1sMYKrnQymnVB0LmA8Bf5ZrC4O5K3zg83N59N2TcI1E+kPDJZuXt6xL7oQjfqKzBqg6pg0YnvXJIOrQJCJYVdxQbSiqrVEUhim465NbpnTcZN8iWuyeL/bsni3VmsjxWcWiUj+JDylYhBvLyDswDx0fO8gEIfbhP+lD5D/lk0Nl/n83cr7qDf87+ZuNmxU5/KsAXR6LhgLjrkCyvd13R/gVuKxqHAJXxaVXAY9wKnvK9dGfJEb3eJfOFoFwhxM3W3UI8Jwtjt+9NX76zrWV3xqvnlx8VGTCGnhBUGB0DD8Is3pEXY1l5oqo4eQGMPCKajogcZLIki4ghB+CO6lgh140KRhV4xSJyWBFuQHytApbmdWARzeynxPgyNvtF1hz8Bw==</diagram></mxfile>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 31 KiB

BIN
main.pdf

Binary file not shown.