generated from leonetienne/LaTeX-Paper-template
feat: vergleich qr-code bibliotheken
This commit is contained in:
parent
2d42eaa169
commit
c7c4956c29
BIN
bar_chart.png
Normal file
BIN
bar_chart.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
BIN
bar_chart_grouped_by_objects.png
Normal file
BIN
bar_chart_grouped_by_objects.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 20 KiB |
@ -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.
|
||||
|
@ -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}
|
||||
}
|
||||
|
37
images/make-qrlib-compare-barchart.py
Executable file
37
images/make-qrlib-compare-barchart.py
Executable file
@ -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")
|
BIN
images/qrlib-compare-barchart.png
Normal file
BIN
images/qrlib-compare-barchart.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 50 KiB |
Loading…
x
Reference in New Issue
Block a user