\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 Webseite von \ac{WM},
Bibliotheken zur Erzeugung von QR-Codes und Bibliotheken zur Erzeugung von PDF-Dateien.

\section{Die bestehende Webseite}
Als Mitentwickler des Projektes ist dem Autor bekannt, dass die bestehende Webseite 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
\break\cite{bib:w3schools-sass}.
TYPO3 ist ein Redaktionssystem und PHP-Rahmen\-werk, das Daten- und Inhaltspflege in einem geschützten Bereich
ermöglicht.
Außerdem steuert TYPO3 Frontend-, Backend-Nutzer und deren Berechtigungen \cite{bib:typo3-docs-getting-started}.
Über die Systemerweiterung
\enquote{Extbase} wird eine mächtige Entwicklerschnittstelle bereitgestellt,
um hochindividualisierte Funktionalitäten zu ermöglichen.
\\\cite{bib:typo3-docs-extbase-reference}

\section{QR-Code-Bibliotheken}
Um mit QR-Codes zu arbeiten, ist es unabdinglich, QR-Codes zu erstellen, da dieselben sonst nicht vorhanden sind.
Im Folgenden werden einige Implementationen von QR-Code-Generator-Bibliotheken im Detail betrachtet. Es wird sich
auf bereits vom System verwendete Programmiersprachen begrenzt.

\subsection{Javascript-Implementationen}
\subsubsection*{jquery-qrcode.js}
\enquote{jquery-qrcode.js} 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 \enquote{jquery-qrcode.js} für nähere Evaluationen aus, da die Software nicht mehr
gepflegt wird. \enquote{jquery-qrcode.js} wurde bis Januar 2023 853 mal von Nutzern mit einem Stern
markiert \cite{bib:larsjung-jquery-qrcode}.
Wenn ein Nutzer ein Github-Repository mit einem Stern markiert, zeigt sich der Nutzer interessiert genug,
um über Neuigkeiten auf dem Laufenden gehalten werden zu wollen \cite{bib:github-stars}. \enquote{jquery-qrcode.js} ist MIT-lizensiert
\cite{bib:larsjung-jquery-qrcode}.

\subsubsection*{kjua}
\enquote{kjua} ist eine Javascript-Bibliothek, die dynamisch QR-Codes auf Browserebene generiert.
Im Gegensatz zu \enquote{jquery-qrcode.js} funktioniert \textit{kjua} auch ohne jQuery. Es werden diverse Stilattribute für gestaltete
QR-Codes unterstützt \cite{bib:larsjung-kjua}. \enquote{kjua} kann QR-Codes über HTML-Canvas, Bilder und Vektorgrafiken umsetzen.
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 (Januar 2023) wurde \enquote{kjua} von 243 Nutzern mit einem Stern markiert.
\enquote{Kjuas} letzte Codeänderung liegt circa zwei Jahre zurück. Es gibt eine unbeantwortete, sieben Jahre alte Pull-Request und
Issues scheinen ignoriert zu werden. \enquote{kjua} ist MIT-lizensiert \cite{bib:larsjung-kjua}.

\subsubsection*{soldair/node-qrcode}
\enquote{soldair/node-qrcode} ist eine Node.js-basierte Implementation eines QR-Code-Generators und bietet somit Funktionialität
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, 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}.

\subsection{PHP-Implementationen}
\subsubsection*{chillerlan/php-qrcode}
Eine arrivierte Lösung für QR-Code-Generierung in PHP ist \enquote{chillerlan/php-qrcode}, umgesetzt durch
Eugen Rochko et al.. \enquote{chillerlan/php-qrcode}s Etabliertheit zeigt sich durch den zu diesem
Zeitpunkt (Januar 2023) auf 5 Millionen stehenden Downloadzähler,
mehreren Entwicklern und dem letzten Commit, der zu diesem Zeitpunk nicht älter als einen Monat ist.
Insgesamt erfolgten bis dato 808 Commits von 6 Entwicklern. Das Projekt verfügt über Unit-Tests,
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 \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{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}.
Vier von den sechs vorhandenen 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.
Das liegt zu diesem Zeitpunkt vier Jahre in der Vergangenheit.
Damit ist diese Bibliothek de facto sechseinhalb Jahre alt und wurde seitdem einmal um Featuers erweitert.
Issues und Pull-Requests werden weitestgehend ignoriert.
Die Bibliothek verwendet die MIT-Lizenz.
\\\cite{bib:kreativkorp-barcode}.

\subsubsection*{Bacon/BaconQrCode}
\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}, \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
einen Commit beigetragen haben. Zu diesem Zeitpunkt fanden 177 Commits statt. Githubs DependencyGraph verzeichnet
nahezu 80.000 Projekte, die BaconQrCode verwenden \cite{bib:bacon-baconqrcode} und Packagist meldet 50 Millionen Downloads
\cite{bib:packagist-baconqrcode}.
Wie \enquote{chillerlan/php-qrcode} baut auch Scholzen auf existierende Technik von \enquote{ZXing} auf.
Eine Dokumentation neben der Readme-Datei existiert nicht und
diese ist sehr minimalistisch. \enquote{BaconQrCode} kann QR-Codes als Rasterbilder und Vektorgrafiken (SVG und EPS) generieren.
Spezielle Styles sind nicht erwähnt. Ein Großteil der Issues und Pull-Requests wurden behandelt.
\enquote{BaconQrCode} unterliegt einer BSD-2-Clause-Lizenz
\cite{bib:bacon-baconqrcode}.

\subsection{Subjektiver Vergleich im Bezug auf die Problemstellung}
Im Folgenden werden subjektive Einschätzungen und Meinungen des Autors über die Eignung der beleuchteten
Bibliotheken vorgestellt.
Um eine Bibliothek als \enquote{am geeignetsten} für einen Anwendungsfall unter den betrachtenen Bibliotheken zu kurieren,
müssen die konkreten Anforderungen für diesen Anwendungsfall beachtet werden.
Das ist so, da verschiedene Eigenschaften der Bibliotheken verschiedene Auswirkungen 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 unterstützten Funktionen, in Annahme dessen, dass die Bibliothek
        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.
        Hierzu zählen beispielsweise: Bearbeitung von Issues, Bearbeitung von Pull-Requests, Präsenz von Tests,
        Präsenz einer angemessenen Dokumentation, häufige Commits, mehrere Entwickler, Anzahl der
        Sterne auf Github, sowie der Anzahl der
        Downloads bzw. Installationen, falls verfügbar.

    \item [Workflow-Eignung] \hfill \\
        Die Eignung einer Bibliothek in existierende Workflows und Randbedingungen übernommen zu werden. Maßgeblich ist,
        ob und mit wie viel Aufwand eine Bibliothek in das Projekt übernommen werden kann.
        Beispielsweise ist es deutlich aufwändiger eine JavaScript-Bibliothek in einem PHP-Projekt zu verwenden, als eine native PHP-Bibliothek.
        Ebenfalls ist relevant, ob die Lizenz einer Bibliothek eine Verwendung gestattet, bzw. welche Bedingungen gelten.
\end{description}

Hierbei werden den verschiedenen Bibliotheken Punkte $[0,10]$ in den drei zuvor genannten
Kategorien vergeben. Nicht ermittelte Werte werden in ihrer Kategorie durch \enquote{$-$} repräsentiert, wodurch
eine weitere Verwendung ausgeschlossen wird.
Die Kumulativpunktzahl $[0,30]$ einer Bibltiothek beschreibt deren Gesamteignung, nach subjektivem
Empfinden des Autors.

\subsubsection*{kjua}
\enquote{kjua} ist funktional für dieses Projekt gut aufgestellt, da es optisch ansprechende QR-Codes mit Logo unterstützt. Das wird
mit acht Punkten in \enquote{Funktionalität} bemessen.
\enquote{kjua} macht andererseits einen eher desolaten Eindruck und lässt somit begründete Zweifel an dessen Zukunftssicherheit zu.
Eine knappe Dokumentation ist verfügbar. Für die Dokumentation werden zwei Punkte in \enquote{Gepflegtheit} angerechnet.
\enquote{kjua} ist als JavaScript-Bibliothek nur schwer mit den Anforderungen vereinbar,
da der QR-Code in einem PDF eingebunden werden soll. Hierfür ist ein serverseitiger PDF-Generator vorgesehen.
\enquote{kjuas} Lizenz erlaubt Verwendung in kommerziellen, Closed-Source-Projekten \cite{bib:opensource-license-mit}.
Die Exklusivität für Nutzung in Webbrowsern schließt eine Einbindung in den Workflow aus.
\begin{table}[htbp]
    \centering
    \begin{tabular}{|l|l|l|l|}
        \hline
        \textbf{Funktionalität} & \textbf{Gepflegtheit} & \textbf{Workflow-Eignung} & \textbf{$\Sigma$}\\
        \hline
        8 & 2 & 0 & 10\\
        \hline
    \end{tabular}
    \caption{Subjektive Evaluation: kjua}
\end{table}

\subsubsection*{soldair/node-qrcode}
Soldairs Lösung sieht dokumentativ und funktional vielversprechend aus.
Hierdurch bilden sich acht Punkte in \enquote{Funktionalität} ab.
Da diese Bibliothek eine Node.js-Bibliothek ist und Node.js ohne Browser, als Kommandozeilenapplikation, ausgeführt werden
kann \break\cite{bib:nodejs-api-cli}, bietet sich
\enquote{soldair/node-qrcode} als serverseitige Anwendung an. Die Lizenz spricht nicht gegen eine Verwendung. Dennoch wäre es
ein vermeidbarer Mehraufwand generierte QR-Codes aus einer Node.js-Applikation in eine PHP-Umgebung zu
übertragen. Das bildet sich mit vier Punkten in \enquote{Workflow-Eignung} ab.
Darüberhinaus macht \enquote{soldair/node-qrcode} einen verbesserungswürdigen Eindruck der Projektpflege, wofür es lediglich
drei Punkte gibt.
\begin{table}[htbp]
    \centering
    \begin{tabular}{|l|l|l|l|}
        \hline
        \textbf{Funktionalität} & \textbf{Gepflegtheit} & \textbf{Workflow-Eignung} & \textbf{$\Sigma$}\\
        \hline
        8 & 3 & 4 & 15\\
        \hline
    \end{tabular}
    \caption{Subjektive Evaluation: soldair/node-qrcode}
\end{table}

\subsubsection*{chillerlan/php-qrcode}
Rochkos Lösung macht einen aktiv gepflegten Eindruck und wird von großen Downloadzahlen gestützt.
Rochko stellt eine ausführliche Dokumentation und Codebeispiele bereit.
Hierfür wird die volle Punktzahl in \enquote{Gepflegtheit} vergeben.
Der Funktionsumfang übersteigt weit die Anforderungen und gestattet so ausführlich gestaltete QR-Codes zu generieren
\cite{bib:chillerlan-php-qrcode-demo},
die somit die hedonische Qualität fördern \cite{bib:koenig-vorlesung-ux}.
Bewertet wird das mit einer vollen Punktzahl in \enquote{Funktionalität}.
\enquote{chillerlan/php-qrcode} lässt sich nahtlos in das existierende Projekt eingliedern,
da es als PHP-Bibliothek über Composer eingebunden werden kann und eine eigene API bereitstellt \cite{bib:chillerlan-php-qrcode}.
Die von Rochko verwendete Lizenz gestattet eine unkomplizierte Verwendung. \enquote{chillerlan/php-qrcode} funktioniert sowohl mit
PHP- $7.x$ als auch $8.x$. Die Bibliothek benötigt zwei weitere Abhängigkeiten. Eine dieser Abhängigkeiten ist ebenfalls von Rochko
bereitgestellt \cite{bib:chillerlan-php-qrcode-composerjson} und weist eine ähnlich gute Projektpflege auf
\cite{bib:chillerlan-php-settings-container}. Das wird mit der Maximalwertung in \enquote{Workflow-Eignung} berechnet.
\begin{table}[htbp]
    \centering
    \begin{tabular}{|l|l|l|l|}
        \hline
        \textbf{Funktionalität} & \textbf{Gepflegtheit} & \textbf{Workflow-Eignung} & \textbf{$\Sigma$}\\
        \hline
        10 & 10 & 10 & 30\\
        \hline
    \end{tabular}
    \caption{Subjektive Evaluation: chillerlan/php-qrcode}
\end{table}

\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
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
Änderungen an der Bibliothek an sich erfordern würde.
Die Funktionalität wurde aufgrund der desaströsen Gepflegtheit und Eignung nicht näher untersucht,
da eine Verwendung selbst mit guter Funktionalität nicht infrage käme.
\begin{table}[htbp]
    \centering
    \begin{tabular}{|l|l|l|l|}
        \hline
        \textbf{Funktionalität} & \textbf{Gepflegtheit} & \textbf{Workflow-Eignung} & \textbf{$\Sigma$}\\
        \hline
        - & 3 & 0 & -\\
        \hline
    \end{tabular}
    \caption{Subjektive Evaluation: Kreativekorp/barcode}
\end{table}

\subsubsection*{Bacon/BaconQrCode}
\enquote{BaconQrCode} nennt keine speziellen Optionen, um näheren Einfluss auf den generierten QR-Code auszuüben.
Es werden Rasterbilder und verschiedene Vektorformate als Renderziel unterstützt. Aufgrund der fehlenden Optionen,
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 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,
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]
    \centering
    \begin{tabular}{|l|l|l|l|}
        \hline
        \textbf{Funktionalität} & \textbf{Gepflegtheit} & \textbf{Workflow-Eignung} & \textbf{$\Sigma$}\\
        \hline
        5 & 8 & 7 & 20\\
        \hline
    \end{tabular}
    \caption{Subjektive Evaluation: Bacon/BaconQrCode}
\end{table}

\subsection{Fazit}
Nach Evaluation der verschiedenen QR-Code-Bibliotheken im Kontext der vorliegenden Problemstellung erweist sich aus Sicht des Autors
\break\enquote{chillerlan/php-qrcode} mit 30 Gesamtpunkten als die am besten geeignetste Bibliothek.
Somit wird \enquote{chillerlan/php-qrcode} als QR-Code Technologie in der Lösung dieser Problemstellung verwendet.

\begin{table}[htbp]
    \centering
    \begin{tabular}{|l|l|l|l|l|}
        \hline
        \textbf{Bibliothek} & \textbf{Funkt.} & \textbf{Gepflegtht.} & \textbf{WF.-Eignung} & \textbf{$\Sigma$}\\
        \hline
        \hline
        chillerlan/php-qrcode & 10 & 10 & 10 & 30\\\hdashline
        Bacon/BaconQrCode & 5 & 8 & 7 & 20\\\hdashline
        soldair/node-qrcode & 8 & 3 & 4 & 15\\\hdashline
        kjua & 8 & 2 & 0 & 10\\\hdashline
        kreativekorp/barcode & - & 3 & 0 & -\\
        \hline
    \end{tabular}
    \caption{Gesamtübersicht: Subjektive Evaluation der QR-Code Bibliotheken}
    \label{tbl:qrlib-compare-barchart}
\end{table}

\section{PDF-Generator}
Firmenintern ist der PDF-Generator \enquote{mpdf/mpdf} etabliert und wird bereits
in zahlreichen Projekten verwendet.
Um die projektübergreifende Kontinuität der Technik zu wahren und um somit die
Wartbarkeit und Nachhaltigkeit des hier behandelten Softwareproduktes
zu fördern, wird sich für den PDF-Generator entschieden, der bereits firmeninterner Standard ist.
Unabhängig dessen ist \enquote{mpdf} ein gut gepflegtes Projekt mit einem Alter von mehr als acht Jahren,
Sponsoren, 72 Entwicklern, über 31 Millionen Downloads, über 3.900 Sterne-Markierungen, über 800 Commits
und regelmäßigen Updates. \enquote{Mpdf} ein Composer-Paket und für verschiede PHP-Versionen verfügbar.
Mpdf verwendet eine GPL-2.0 Lizenz \cite{bib:mpdf}.
