\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 zwei Arten von Technologien, die untersucht werden müssen: Die bestehende Website von \ac{WM} und
eine PHP-Bibliothek zur Erzeugung von QR-Codes.

\section{Die bestehende Webseite}
Als Mitentwickler des Projektes ist dem Author dieser Ausarbeitung bekannt, dass die bestehende Webseite von
\ac{WM} ein TYPO3-Redaktionssystem ist. Das Frontend der Webseite wird mit Webpack und Sass übersetzt.
Webpack ist ein Modulbundler \cite{bib:smashmagazine-webpack} und Sass ein CSS-Präprozessor \cite{bib:w3schools-sass}.

\section{QR-Codes erstellen}
Um mit QR-Codes zu arbeiten, ist es unabdinglich, QR-Codes zu erstellen, da dieselben sonst nicht vorhanden sind.
Prinzipiell gibt es zwei Möglichkeiten QR-Codes zu erstellen: Auf Browserseite in JavaScript und auf Serverseite in PHP.
Das ist so, da es lediglich diese zwei Domänen gibt.

\subsection*{Javascript-Implementationen}
\subsubsection*{jquery-qrcode}
\textit{jquery-qrcode} ist ein Plugin für JQuery um dynamisch QR-Codes auf Browserseite zu generieren.
Jedoch verweist diese Bibliothek selbst auf ihren desolaten Zustand und empfielt stattdessen \enquote{kjua} zu verwenden
\cite{bib:larsjung-jquery-qrcode}. Somit scheidet jquery-qrcode für nähere Evaluationen aus, da die Software nicht mehr
gepflegt wird. \textit{jquery-qrcode} wurde bis zum heutigen Tage 853 mal von Nutzern mit einem Stern
markiert \cite{bib:larsjung-jquery-qrcode}.
Wenn ein Nutzer ein Github-Repository mit einem Stern markiert, interessiert sich der Nutzer weit genug,
um über Neuigkeiten auf dem Laufenden gehalten werden zu wollen \cite{bib:github-stars}.

\subsubsection*{kjua}
\textit{Kjua} ist eine Javascript-Bibliothek, um dynamisch QR-Codes auf Browserseite zu generieren.
Im Gegensatz zu \textit{jquery-qrcode} funktioniert Kjua auch ohne JQuery. Es werden diverse Stilattribute für gestaltete
QR-Codes unterstützt \cite{bib:larsjung-kjua}. Kjua setzt QR-Codes über HTML-Canvas um. Das ist bei näherer Betrachtung
der Kjua Tech Demo \enpointy{https://larsjung.de/kjua/latest/demo} ersichtlich, jedoch nicht explizit erwähnt.
Nach dem aktuellen Stand wurde Kjua von 243 Nutzern mit einem Stern markiert \cite{bib:larsjung-kjua}.

\subsubsection*{soldair/node-qrcode}
\textit{Soldair/node-qrcode} ist eine node.js-basierte Implementation eines QR-Code Generators und bietet somit Funktionialität
serverseitig, als CLI, sowohl als auch Browserseitig an. Die Readme-Datei zeugt von Länge, ist 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 circa zwei Jahren, Februar 2021, durch und schlug zudem fehl. Einige Pull-Requests und Issues werden seit Jahren ignoriert
\cite{bib:soldair-node-qrcode}.
Die Bibliothek wurde 74 Millionen mal heruntergeladen mit 6308 Sternen markiert \cite{bib:npmjs-soldair-node-qrcode}.

\subsection*{PHP-Implementationen}
\subsubsection*{chillerlan/php-qrcode}
Eine arrivierte Lösung für QR-Code Generierung in PHP ist \textit{chillerlan/php-qrcode}, umgesetzt durch
Eugen Rochko und weitere. Das zeigt sich durch den zu diesem Zeitpunkt auf 5 Millionen stehenden Downloadzähler,
mehrere Entwickler und den letzten Commit, der zu diesem Zeitpunk nicht älter als einen Monat alt ist.
Insgesamt erfolgten bis dato 808 Commits von 6 Entwicklern. Das Projekt verfügt über Unit-Tests,
die 90\% der Zeilen in der Codebase abdecken. Rochko übernahm Teile der Codebase aus
dem Java-Projekt \enquote{ZXing} und übersetzte diese zu PHP.
Issues und Pull Requests sind alle bearbeitet. Es gibt keine unbeantworteten Issues oder Pull-Requests.
\textit{chillerlan/php-qrcode} basiert auf einer angepassten Version von \textit{kazuhikoarase/qrcode-generator}.
Einzig auffällig sind die Commitnachrichten, die zuteils nur aus einem (1) Emoji bestehen.
\textit{chillerlan/php-qrcode} wurde von 1212 Github-Nutzern mit einem Stern markiert
\cite{bib:chillerlan-php-qrcode}.

\subsubsection*{kreativekorp/barcode}
\textit{kreativekorp/barcode} ist eine PHP-Bibliothek zur Generierung von QR-Codes, bereitgestellt von
\textit{Kreative Software}, R.G. Bettencourt.
Diese Implementation umfasst eine Vielzahl an Barcode-Formaten und unterstützt eine Vielzahl an Anpassungsmöglichkeiten.
Das Projekt wurde bis zum heutigen Tage 189 mal mit einem Stern markiert \cite{bib:kreativkorp-barcode}.
Die letzte Codeänderung dieses Projektes ist auf 2018 datiert \cite{bib:kreativkorp-barcode}. Das liegt zu diesem Zeitpunkt
vier Jahre in der Vergangenheit. Vier von den sechs Commits erfolgten innerhalb von zwei Tagen in 2016. Ein weiterer
Commit erfolte wenige Tage später. Der aktuellste Commit wurde knapp zwei Jahre später, 2018, veröffentlicht.
Damit ist diese Bibliothek de-facto sechseinhalb Jahre alt und wurde seitdem ein mal um Featuers erweitert
\cite{bib:kreativkorp-barcode}.

\subsubsection*{Bacon/BaconQrCode}
\textit{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 BaconQrCode von etlichen weiteren Bacon-Applikationen
wie Beispielsweise \textit{BaconPdf}, \textit{BaconStringUtils} und \textit{BaconUser} um nur einige zu nennen.
Insgesamt machen die stichprobenartig betrachteten Projekte einen desolaten Eindruck mit zuteils aktuellesten Commits
von vor 10 Jahren. BaconQrCode stellt das beliebteste und gepflegteste Projekt mit 1508 Sterne-Markierungen und
einem aktuellsten Commit von vor zwei Monaten dar. BaconQrCode erfreut sich an 17 Entwicklern, die jeweils zumindest
einen Commit beigetragen haben. Insgesamt fanden zu diesem Zeitpunkt 177 Commits statt. Githubs DependencyGraph verzeichnet
nahezu 80.000 Projekte, die BaconQrCode verwenden. Eine Dokumentation neben der Readme-Datei existiert nicht und die
Readme-Datei ist sehr bescheiden. BaconQrCode kann QR-Codes als Rasterbild und Vektorgrafiken (SVG und EPS) generieren.
Spezielle Styles sind nicht erwähnt
\cite{bib:bacon-baconqrcode}.

% Hiervor muss unbedingt die RE analyse!
\subsection*{Vergleich in Bezug auf die Problemstellung}
Um eine Bibliothek als \enquote{die Beste} für einen Anwendungsfall zu kurieren,
müssen die konkreten Anforderungen und Constraints für diesen Anwendungsfall beachtet werden.
Das ist so, da verschiedene Eigenschaften der Bibliotheken verschiedene Auswirkung in Gewichtung und Richtung
je nach Anwendungsfall aufweisen.
Hierfür werden die zuvor vorgestellten Bibliotheken zur Erstellung von QR-Codes in den folgenden Attributen gegenübergestellt:
\begin{description}
    \item [Funktionialität] \hfill \\
        Der Umfang der für diese Problemstellung relevanten Funktionen in Annahme dessen, dass die Bibliothek
        syntaktisch und pragmatisch korrekt \cite{bib:heinemann-vorlesung-re} funktioniert.

    \item [Gepflegtheit] \hfill \\
        Das Ausmaß, in dem das Projekt aktiv gepflegt und ordnungsgemäß entwickelt zu sein scheint.
        Hierzu zählen beispielsweise: Bearbeitung von Issues, Bearbeitung von Pull-Requests, Präsenz von Tests,
        Präsenz einer angemessenen Dokumentation, häufige Commits, mehr als nur ein Contributor, Anzahl der
        Sterne auf Github (Ausmaß an tieferem, öffentlichem Interesse \cite{bib:github-stars}), sowie der Anzahl der
        Downloads bzw Installationen, falls verfügbar.

    \item [Workflow-Eignung] \hfill \\
        Die Eignung einer Bibliothek in existierende Workflows und Constraints übernommen zu werden.
\end{description}
