Anfang Oktober haben wir ein Gewinnspiel gestartet, bei dem ein kleines Programm geschrieben werden sollte, um Texte in Bilder hinein zu generieren. Die genauen Bedingungen könnt ihr hier noch einmal nachlesen. Am Spiel haben sich fünf Personen beteiligt: Stefan, Jens, Andreas, Valentin und Tobias. Zu gewinnen gibt es ein GIMP-Buch, wobei der Preis nicht im Vordergrund stehen sollte, sondern der Spass am Mitmachen. Die GNU/Linux.ch-Redaktion bedankt sich bei euch ganz herzlich für die Teilnahme.
Bei zwei der Einsendungen handelt es sich um Python-Lösungen, drei weitere Kandidaten haben die Aufgabe als Bash-Skript umgesetzt. Um den Gewinner zu ermitteln, habe ich ein Bewertungsschema erstellt, damit möglichst objektive Kriterien verwendet werden. Selbstverständlich stellen wir euch den Code aller Lösungen zur Verfügung, damit ihr euch selbst ein Bild machen könnt. Aber nun seht selbst, wie die Beiträge bewertet wurden:
Der Code
Den Quelltext der Einsendungen findet ihr hier auf fünf Verzeichnisse aufgeteilt. Zusatzinformationen, die von den Teilnehmern eingereicht wurden, habe ich als Textdateien (info.md) abgelegt. Somit habt ihr die Möglichkeit, die Skripte selbst auszuprobieren. Vielleicht gibt es auch bei euch den Anwendungsfall, Bilder mit einem Text aus dem Dateinamen zu ergänzen. Dann könnt ihr aus den Lösungsvorschlägen den passendsten aussuchen.
Bewertungskriterien
Damit ich nicht irgendeine Lösung subjektiv als Gewinner auswählen musste, habe ich einen kleinen Katalog von Kriterien erstellt, um die Preisvergabe etwas objektiver zu gestalten. Auch daran kann man Mäkel finden; aber lassen wir die Kirche im Dorf.
Die Werte bedeuten: 1 = schlecht, 2 = geht so, 3 = gut, 4 = vorbildlich. Auf eine Gewichtung der Kriterien wurde verzichtet, um es nicht zu kompliziert zu machen.
Kriterium | Stefan | Jens | Andreas | Valentin | Tobias |
Code | Python | Bash | Python | Bash | Bash |
Funktionalität | 1 | 3 | 3 | 3 | 2 |
Features | 3 | 2 | 2 | 2 | 4 |
Code-Qualität | 2 | 4 | 3 | 2 | 4 |
Lizenz-Einhaltung | 4 | 4 | 4 | 3 | 4 |
Dokumentation | 2 | 2 | 2 | 3 | 4 |
Originalität | 3 | 2 | 4 | 1 | 3 |
Summe | 15 | 17 | 18 | 14 | 21 |
Stefan
Es mag an mir liegen, aber ich habe es nicht geschafft Stefans Programm zum Laufen zu bringen. Er schreibt, dass er gerade erst begonnen hat, Python zu lernen. Das respektiere ich und bewerte seine Einsendung dementsprechend. Der Code ist lesbar und enthält wenig Dokumentation. Stefan hat den Code auf zwei Python-Skripte verteilt, was bei dieser einfachen Aufgaben nicht wirklich nötig ist. Daher summieren sich die LInes of Code auf 230 Zeilen; soviel ist nicht nötig. Das Skript verarbeitet Input- und Output-Verzeichnisse und ermöglicht die Auswahl verschiedener Dateitypen. Das gefällt mir.
Jens
Das Bash-Skript ist kurz (56 Zeilen), effizient und macht genau das, was es soll. Die Bilder werden als Input-Parameter übergeben und die Ergebnisse in ein Output-Verzeichnis geschrieben. Es gibt eine Dokumentation im Header und, wie bei allen anderen Einsendungen, etwas wenig Dokumentation im Code. Mir gefällt diese Lösung: kein Bling-Bling, keine Bells and Whistles, die Aufgabe wurde sauber erfüllt. Der Code selbst erfreut alle Minimalisten, ist sehr gut lesbar und beschränkt sich auf das Wesentliche.
Andreas
Andreas liefert eine solide Lösung ab. Als einziger präsentiert er den Code in einem Repository. Was mir auch gut gefällt ist die Darstellung des Künstlernamens in einem speziellen Font. Der Python-Code ist sauber; allerdings, finde ich die Main-Funktion etwas unterfordert. Sie delegiert nur, statt mehr Kontrolle zu übernehmen. Ausserdem fehlt mir ein Programmheader und die Dokumentation im Code könnte etwas ausführlicher sein. Trotzdem ist es eine saubere Lösung in nur 108 Zeilen Code.
Valentin
Auch Valentins Bash-Skript löst die Aufgabe ohne Probleme. Die Lizenz-Angabe (CC0) besteht aus einer Zeile; das ist kein Problem, könnte aber etwas prominenter sein. Dafür gibt es einen ausführlichen Header im Code, der per 'echo' ausgegeben werden sollte, was mir jedoch nicht gelang. Die Dokumentation im Code finde ich bei Valentin besser als bei den anderen Teilnehmern. Er bemüht 82 Codezeilen, was abzüglich des Headers, in etwa dem entspricht, was Jens geliefert hat. Die Verständlichkeit des Codes finde ich nicht optimal.
Tobias
Nicht schlecht, Herr Specht! Gute Dokumentation, sowohl im Code, als auch im Header und als md-Datei. Der Code ist sauber geschrieben und leicht zu verstehen. Auch bei den Features hat Tobias Lösung etwas zu bieten: Input, Output, Schriftart, Hilfe. Einziges Problem: es heisst doch nicht 'magick convert', sondern 'convert'. Kann aber auch ein Distro-spezifischer Unterschied sein. Nach dieser kleinen Änderung im Code, lief das Skript.
And the winner is: Tobias!
Aber was heisst denn Gewinner? Ich finde es toll, dass ihr euch alle die Mühe gemacht habt, an unserem Gewinnspiel mitzuwirken. Deshalb haben wir auch eure Lösungen veröffentlicht. Wenn man sich die unterschiedlichen Lösungen anschaut, kann man viel lernen und Inspirationen gewinnen. Obwohl ich mir bei der Bewertung viel Mühe gegeben habe, ist sie nicht zweifelsfrei. Aber hey, dabei sein ist alles!
Herzlichen Dank an Stefan, Jens, Andreas, Valentin und Tobias.
Cool, das hat Spaß gemacht zu lesen
Hallo Ralf, hast du ImageMagick installiert? Weiss nicht, weshalb du das Script nicht zum laufen bringst, ich kann es auf einem frisch installierten Ubuntu 21.10 problemlos ausführen. Es braucht Python3.9 und ImageMagick dafür (apt install python3 imagemagick).
Ja, ImageMagick verwende ich schon lange.