diff --git a/bar_chart.png b/bar_chart.png new file mode 100644 index 0000000..dec5b01 Binary files /dev/null and b/bar_chart.png differ diff --git a/bar_chart_grouped_by_objects.png b/bar_chart_grouped_by_objects.png new file mode 100644 index 0000000..fbde631 Binary files /dev/null and b/bar_chart_grouped_by_objects.png differ diff --git a/chapters/stand-der-technik.tex b/chapters/stand-der-technik.tex index 94e65b9..d5650b0 100644 --- a/chapters/stand-der-technik.tex +++ b/chapters/stand-der-technik.tex @@ -22,14 +22,16 @@ Jedoch verweist diese Bibliothek selbst auf ihren desolaten Zustand und empfielt 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}. +um über Neuigkeiten auf dem Laufenden gehalten werden zu wollen \cite{bib:github-stars}. Jquery-qrcode ist MIT-lizensiert +\cite{bib:larsjung-jquery-qrcode}. \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}. +QR-Codes unterstützt \cite{bib:larsjung-kjua}. 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 wurde Kjua von 243 Nutzern mit einem Stern markiert. +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. Kjua ist MIT-lizensiert \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 @@ -38,20 +40,21 @@ und detailreichen Erklärungen. Der letzte Commit ist zu diesem Zeitpunkt knapp 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}. +Die Bibliothek wurde 74 Millionen mal heruntergeladen mit 6308 Sternen markiert. +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 \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. +Eugen Rochko und weitere. Das zeigt sich durch den zu diesem Zeitpunkt auf 5 Millionen stehendem Downloadzähler, +mehrere Entwickler und den 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 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. +Issues und Pull Requests sind alle bearbeitet. Es gibt zu diesem Zeitpunkt 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 +\textit{chillerlan/php-qrcode} wurde von 1212 Github-Nutzern mit einem Stern markiert. Die Bibliothek ist MIT-lizensiert \cite{bib:chillerlan-php-qrcode}. \subsubsection*{kreativekorp/barcode} @@ -62,7 +65,9 @@ Das Projekt wurde bis zum heutigen Tage 189 mal mit einem Stern markiert \cite{b 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 +Damit ist diese Bibliothek de-facto sechseinhalb Jahre alt und wurde seitdem ein mal um Featuers erweitert. +Issues und Pull-Requests werden weitestgehend ignoriert. +Die Bibliothek verwendet die MIT-Lizenz \cite{bib:kreativkorp-barcode}. \subsubsection*{Bacon/BaconQrCode} @@ -74,12 +79,13 @@ Insgesamt machen die stichprobenartig betrachteten Projekte einen desolaten Eind 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. Ein Großteil der Issues und Pull-Requests wurden behandelt +nahezu 80.000 Projekte die BaconQrCode verwenden\cite{bib:bacon-baconqrcode} und Packagist spricht von 50 Millionen Downloads +\cite{bib:packagist-baconqrcode}. Eine Dokumentation neben der Readme-Datei existiert nicht und die +diese ist bescheiden. BaconQrCode kann QR-Codes als Rasterbild und Vektorgrafiken (SVG und EPS) generieren. +Spezielle Styles sind nicht erwähnt. Ein Großteil der Issues und Pull-Requests wurden behandelt. +BaconQrCode ist mit einer BSD-2-Clause-Lizenz lizensiert \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. @@ -89,15 +95,85 @@ Hierfür werden die zuvor vorgestellten Bibliotheken zur Erstellung von QR-Codes \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. + syntaktisch und pragmatisch korrekt \cite{bib:heinemann-vorlesung-re} ist. \item [Gepflegtheit] \hfill \\ - Das Ausmaß, in dem das Projekt aktiv gepflegt und ordnungsgemäß entwickelt zu sein scheint. + 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, 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. + Die Eignung einer Bibliothek in existierende Workflows und Constraints übernommen zu werden. Maßgeblich, + ob und mit wie viel Aufwand eine Bibliothek in das Projekt übernommen werden kann. Ebenfalls ist relevant, + ob die Lizenz einer Bibliothek überhaupt deren Einbundung gestattet, bzw. welche Bedingungen gelten. \end{description} + +Hierfür werden den verschiedenen Bibliotheken Punkte ($[0,10]$) in den zuvor genannten Kategorien vergeben. +Die Kumulativpunktzahl einer Bibltiothek beschreibt deren Gesamteignung. + +\subsubsection*{kjua} +Kjua ist funktionell 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. +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. +Kjua ist als Javascript-Bibliothek nur schwer mit den Anforderungen vereinbar, +da der QR-Code in einem PDF eingebunden werden soll. Hierfür wäre ein serverseitiger Generator prädestiniert. +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{nicepic} + \includegraphics[width=1\textwidth]{images/qrlib-compare-barchart.png} + \captionof{figure}{Vergleichsergebnisse QR-Code Bibliotheken} + \caption*{Quelle: Eigene Darstellung} + \label{fig:qrlib-compare-barchart} +\end{nicepic} + +\subsubsection*{soldair/node-qrcode} +Soldairs Lösung sieht dokumentativ und funktional vielversprechend aus. +Hieraus bilden sich 8 Punkte in \enquote{Funktionalität}. +Da diese Bibliothek eine Node.js-Bibliothek ist und Node.js ohne Browser, als Kommandozeilenapplikation ausgeführt werden +kann \cite{bib:nodejs-api-cli}, böte sich +Soldair/node-qrcode als serverseitige Anwendung an. Auch die Lizenz spräche nicht gegen eine Verwendung. Dennoch wäre es +ein vermeidbarer Mehraufwand und ggf. imperformant 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 Soldair/node-qrcode einen verbesserungswürdigen Eindruck der Projektpflege, wofür es lediglich +drei Punkte gibt. + +\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 +\cite{bib:chillerlan-php-qrcode-demo}, +die somit ebenso die hedonische Qualität fördern \cite{bib:koenig-vorlesung-ux}. +Bewertet wird das mit einer vollen Punktzahl in \enquote{Funktionalität}. +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. Chillerlan/php-qrcode funktioniert sowohl mit +PHP \^7.4 und \^8.0. 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. + +\subsubsection*{kreativekorp/barcode} +Kreativekorp beeindruckt durch Nutzungsbeispiele und Dokumentation in der Readme-Datei, sowie einer Vielzahl unterstützter +Barcode-Formate, darunter auch QR-Codes und einiger improvisierter Tests. +Hierfür werden drei Punkte in \enquote{Gepflegtheit} vergeben. +0 Punkte in \enquote{Workflow-Eignung} rechtfertigen sich durch die Abwesenheit jeglicher +Unterstützung für Paketmanager, wodurch eine saubere Verwendung in dem Brownfield-Projekt Änderungen an der Bibliothek +selbst 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. + +\subsubsection*{Bacon/BaconQrCode} +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 10 Punkten für \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. Für die \enquote{Gepflegtheit} werden 8 Punkte vergeben. +Da es sich hierbei um eine PHP-Bibliothek handelt, die über Composer in PHP- \^7.4 und \^8.0 Projekte geladen werden kann +und eine API bereitstellt, ist die \enquote{Workflow-Eignung} gut. Die BSD-2-Clause-Lizenz verkompliziert eine Integration, +da dadurch eine Copyright-Notiz an Nutzer gezeigt werden muss \cite{bib:opensource-license-bsd-2}. +Dadurch werden drei Punkte einer vollkommenen Workflow-Eignung abgezogen, wodurch sieben Punkte vergeben werden. diff --git a/dexes/literature.bib b/dexes/literature.bib index 544ab5a..8088225 100644 --- a/dexes/literature.bib +++ b/dexes/literature.bib @@ -5,6 +5,13 @@ publisher = {Hochschule Worms}, } +@book{bib:koenig-vorlesung-ux, + author = {Werner König}, + title = {Vorlesung: User Experience}, + year = {2022}, + publisher = {Hochschule Worms}, +} + @article{bib:Parviainen_Tihinen_Kaariainen_Teppola_2022, title={Tackling the digitalization challenge: how to benefit from digitalization in practice}, volume={5}, @@ -181,6 +188,30 @@ note = {Zugriff: Januar 2023} } +@misc{bib:chillerlan-php-qrcode-demo, + author = {Eugen Rochko}, + howpublished = "\url{https://smiley.codes/qrcode}", + title = {{SVG QR Code Generator}}, + year = {2023}, + note = {Zugriff: Januar 2023} +} + +@misc{bib:chillerlan-php-qrcode-composerjson, + author = {Eugen Rochko}, + howpublished = "\url{https://github.com/chillerlan/php-qrcode/blob/main/composer.json}", + title = {{composer.json}}, + year = {2022}, + note = {Zugriff: Januar 2023} +} + +@misc{bib:chillerlan-php-settings-container, + author = {Eugen Rochko}, + howpublished = "\url{https://github.com/chillerlan/php-settings-container}", + title = {{A container class for immutable settings objects. Not a DI container.}}, + year = {2022}, + note = {Zugriff: Januar 2023} +} + @misc{bib:kreativkorp-barcode, author = {Rebecca G Bettencourt}, howpublished = "\url{https://github.com/kreativekorp/barcode}", @@ -197,6 +228,14 @@ note = {Zugriff: Januar 2023} } +@misc{bib:packagist-baconqrcode, + author = {{Packagist}}, + howpublished = "\url{https://packagist.org/packages/bacon/bacon-qr-code}", + title = {{BaconQrCode is a QR code generator for PHP.}}, + year = {2023}, + note = {Zugriff: Januar 2023} +} + @misc{bib:github-stars, author = {{Github}}, howpublished = "\url{https://docs.github.com/en/get-started/exploring-projects-on-github/saving-repositories-with-stars}", @@ -235,3 +274,25 @@ year = {2016}, author = {{Die SOPHISTen}}, } + +@misc{bib:opensource-license-mit, + author = {{Opensource.org}}, + howpublished = "\url{https://opensource.org/licenses/MIT}", + title = {{The MIT License}}, + note = {Zugriff: Januar 2023} +} + +@misc{bib:opensource-license-bsd-2, + author = {{Opensource.org}}, + howpublished = "\url{https://opensource.org/licenses/BSD-2-Clause}", + title = {{The 2-Clause BSD License}}, + note = {Zugriff: Januar 2023} +} + +@misc{bib:nodejs-api-cli, + author = {{OpenJS Foundation}}, + howpublished = "\url{https://nodejs.org/api/cli.html#command-line-api}", + title = {{Command-line API}}, + year = {2023}, + note = {Zugriff: Januar 2023} +} diff --git a/images/make-qrlib-compare-barchart.py b/images/make-qrlib-compare-barchart.py new file mode 100755 index 0000000..4b6d26a --- /dev/null +++ b/images/make-qrlib-compare-barchart.py @@ -0,0 +1,37 @@ +#!python +import matplotlib.pyplot as plt + +# Create data for the chart +objects = { + "(js) kjua": [8, 2, 0], + "(js) soldair/node-qrcode": [8, 3, 4], + "(php) chillerlan/php-qrcode": [10, 10, 10], + "(php) kreativekorp/barcode": [0, 3, 4], + "(php) bacon/baconqrcode": [5, 8, 4], +} + +# Transpose the data +objects_data = list(zip(*[value for key, value in objects.items()])) + +# Create the x-axis of the chart +x = list(objects.keys()) + +# Property names +property_names = ["Funktionalität", "Gepflegtheit", "Workflow-Eignung"] + +# Create the chart +for i, object_data in enumerate(objects_data): + plt.bar(x, object_data, bottom=[sum(objects_data[j][k] for j in range(i)) for k in range(len(x))], width=0.5, label=property_names[i]) +# Add title and legend to the chart +plt.title('Vergleich von QR-Code Bibliotheken im Kontext:\nWeinland-Mosel Einlieferungswerkzeug') +plt.legend() +plt.ylabel("Gesamteignung") + +# Rotate the x-axis labels to avoid overlapping +plt.xticks(rotation=45) + +# Increase the bottom margin to avoid x-axis labels getting cut off +plt.subplots_adjust(bottom=0.35) + +#save the figure +plt.savefig("images/qrlib-compare-barchart.png") diff --git a/images/qrlib-compare-barchart.png b/images/qrlib-compare-barchart.png new file mode 100644 index 0000000..5ee2a9c Binary files /dev/null and b/images/qrlib-compare-barchart.png differ diff --git a/main.pdf b/main.pdf index 72824a3..24da568 100644 Binary files a/main.pdf and b/main.pdf differ