Linux-Magazin - Dezember 2023
Linux-Magazin - Dezember 2023
12/23
Slack-Alternativen
für mehr Privacy S. 58 Java 21 S. 74 Firecracker S. 52
Fünf handliche Open-Source-Lösungen, Attraktives Release mit Mit Vollvirtualisierung
mit denen Sie beim Firmen-Chat die zahlreichen Neuerungen, kurzfristig auftretende
volle Kontrolle über Ihre Daten behalten aber ohne LTS-Support Lasten effizient auffangen
SOFTWARE DESIGN
PATTERNS
Mit Entwurfsmustern bei
der Softwareentwicklung
wertvolle Erfahrungen
speichern und immer
wieder nutzen ab S. 16
ԏ Fünfgrafische Download-
Manager im Vergleich S. 38
ԏ Reguläre Ausdrücke optimal ein-
setzen: Grundlagen und Tricks S. 48
3 Stufen
Cloud Consulting & Cloud Exit
Jetzt planen:
thomas-krenn.com/cloud3
+49 (0) 8551.9150-300
Login Editorial
Jens-Christoph Brendel
Stellv. Chefredakteur
Das Gleichgewicht des seligen Gebens wächst ihm eine starke Konkurrenz, die Definition schließt eine Nutzungsein-
und Nehmens in der Open-Source-Welt seinen Umsatz schmälert. Außerdem schränkung für bestimmte Bereiche ex-
hatte von Anfang an keine wirtschaftliche kommt der Provider schon deshalb viel plizit aus. Hintergeht Hashicorp seine
Basis. Selbst wenn ein Entwickler seinen billiger davon, weil er nichts zur Entwick- Anwender und Entwickler, wenn es den
Code allen umsonst zur Verfügung stellte lung und Pflege des Produkts beiträgt. Er Open-Source-Status aufgibt? Sind die
und im Gegenzug von allen profitieren kann beliebig viele Interessenten bedie- Investoren die Wurzel des Übels? Sollte
würde, die Verbesserungen beitragen: nen, hat aber kaum Kosten. Für den Ent- man das Projekt zur Strafe forken und
Von irgendetwas muss er oder die Firma, wickler stellt sie sich dann plötzlich wie- einer Stiftung übergeben? Das ist inzwi-
die ihn bezahlt, leben. Oft soll ihm sein der, die Existenzfrage. schen geschehen: Die Linux Foundation
Produkt den Unterhalt sichern, und dann Tatsächlich war es ein Datenbankher- hat den Fork adoptiert und damit Stel-
ist es meist nicht die beste Lösung, es zu steller, MariaDB, der 2016 als erster einen lung bezogen. Open-Source-Ikone Bruce
verschenken. Stattdessen sollen es soge- Ausweg fand: die Business Source License. Perens sieht es hingegen so: „Im Allge-
nannte Open-Source-Geschäftsmodelle Sie erlaubt zunächst ganz ähnlich wie meinen befürworte ich Systeme, die es
ermöglichen, von einem Open-Source- eine Open-Source-Lizenz die Einsicht in Menschen ermöglichen, mit der Erstel-
Projekt zu leben. Dazu kombinieren sie den Quellcode, dessen Anpassung und lung von Open Source Geld zu verdienen,
beispielsweise freie Core-Versionen mit Weitergabe sowie die unbeschränkte selbst wenn der Preis dafür ist, dass die
bezahlten Enterprise-Features (Dual Li- Nutzung der Software – jedoch nur für Software für einige Zeit nicht unter einer
censing) oder kostenfreie Software mit den nicht kommerziellen Bereich. Für die vollständigen Open-Source-Lizenz ver-
kostenpflichtigem Support und Schulun- gewerbliche Nutzung schränkt sie diese fügbar ist. Open Source zu machen sollte
gen. Das hat eine ganze Weile lang leid- Rechte für ein paar Jahre ein, danach nicht bedeuten, dass man ein Büßer-
lich funktioniert – dann kam die Cloud. tritt automatisch eine reine Open-Source- hemd trägt und von Almosen lebt, wäh-
Die Cloud erlaubte es, dass ein Provider Lizenz an ihre Stelle. Wer die Software rend die Nutzer des eigenen Produkts,
sich einige begehrte Open-Source-Pro- in den ersten Jahren nach Lizenzierung oft die größten Unternehmen der Wall
gramme kostenlos herauspicken und sie für eigene Zwecke in einer produktiven Street, die Knete einstecken.“ So spricht
anschließend als Services seiner Wolke Umgebung nutzen will, der muss dafür ein kluger Pragmatiker.
teuer verkaufen konnte, etwa eine freie bezahlen. Diesem Modell haben sich
Datenbank als Service in einer Public inzwischen etliche bekannte Hersteller
Cloud. Für die Kunden des Providers kann angeschlossen, darunter CockroachDB,
das attraktiv sein: Sie haben mit Installa- Couchbase, Sentry oder erst vor Kurzem
tion, Wartung oder Skalierung nichts Hashicorp, der Produzent von Terraform,
mehr zu tun, zudem können sie von der Consul und Vagrant.
engen Verzahnung mit anderen Cloud- Dieser Schritt erlaubt den Entwicklern,
Diensten profitieren. Für den Datenbank- eine Zeitlang ihr Produkt zu monetarisie-
hersteller ergeben sich aber fast nur ren und damit zu überleben. Allerdings
Nachteile: Durch den Cloud-Provider er- gibt es auch Bedenken: Die Open-Source-
12.2023 www.linux-magazin.de 3
12
###### #######
Grundlegende Entwurfsmuster
24 Design Pattern, das nur einmal
vorkommende Objekte modelliert. Py- Wie man wartungsfreundliche
16 konservieren Erfahrungen und
sparen auf diese Weise bei der Software-
thon bietet verschiedene Möglichkeiten,
ein Singleton zu implementieren, die alle
30 und zukunftssichere Schnitt-
stellen mit API Design Patterns aufsetzt,
entwicklung viel Zeit, Geld und Nerven. spezifische Vor- und Nachteile haben. zeigt Mike Schilli am Beispiel von LROs.
Service
Editorial ........................................... 3
IT-Profimarkt ................................ 92
README ........................................94
Der von Amazon ent-
Inserenten/Autoren/Events ...... 96
Impressum ................................... 97
52 wickelte Virtual Machine
Manager Firecracker bietet auch
Vorschau ...................................... 98 eine Alternative zu Containern.
4 www.linux-magazin.de 12.2023
###### #####
Grafische Download-Manager
58 nikation per Chat gibt es durch-
aus Alternativen zu Slack, die mehr Pri- Für das Durchstöbern seiner
38 helfen Ihnen dabei, auch bei
umfangreicheren Download-Aktionen
vacy und Datenschutz realisieren als der
populäre, aber unverschlüsselte Cloud-
84 Google-Drive-Bibliothek per
Textmustersuche hat sich Mike Schilli
nicht den Überblick zu verlieren. Dienst. Wir stellen Ihnen fünf davon vor. in Go ein kleines CLI-Tool geschrieben.
12.2023 www.linux-magazin.de 5
Aktuell News
News
Europäischer Exascale-Supercomputer für Jülich
Die europäische Supercomputing-Initiative EuroHPC JU und
das deutsch-französische Supercomputerkonsortium ParTec-
Eviden haben den Bau des Exascale-Supercomputers JUPITER
vertraglich besiegelt. JUPITER steht für „Joint Undertaking Pio-
neer for Innovative and Transformative Exascale Research“. Das
© Forschungszentrum Jülich
System wird als erster europäischer Superrechner der Exascale-
Klasse mit einer Rechenleistung von mehr als 1 Exaflop/s am
Forschungszentrum Jülich in Nordrhein-Westfalen aufgebaut.
Dort betreibt ihn das Jülich Supercomputing Centre (JSC), eines
der drei nationalen Supercomputing-Zentren des Gauss Centre
for Supercomputing (GCS).
Das für rechenintensive Simulationen und KI-Anwendungen
in Wissenschaft und Industrie konzipierte System soll be- Jülich erwartet den ersten Exascale-Rechner.
reits 2024 in Betrieb gehen. Die Kosten für JUPITER und dessen
Betrieb über einen Zeitraum von voraussichtlich sechs Jahren
belaufen sich auf 500 Millionen Euro, teilt das Forschungszen- neuen in Europa entwickelten und hergestellten Rhea-Prozessor
trum Jülich mit. Die Finanzierung übernehmen zur Hälfte die von SiPearl. Die CPU soll eine außergewöhnlich hohe Speicher-
Europäischen Union und jeweils zu einem Viertel das Bundes- bandbreite für komplexe Arbeitslasten bieten. Beim Booster-
ministerium für Bildung und Forschung (BMBF) sowie das Mi- Modul kommt die beschleunigte Computing-Plattform von
nisterium für Kultur und Wissenschaft des Landes Nordrhein- Nvidia zum Einsatz.
Westfalen (MKW NRW). Die Komponenten integriert Eviden direkt in seine flüssig-
JUPITER basiert laut den Verantwortlichen auf einer modu- keitsgekühlte BullSequana-XH3000-Plattform. Die Cluster- und
laren Supercomputer-Architektur und verfügt über ein hoch Booster-Module betreibt ParTec dynamisch als einheitlichen
skalierbares Booster-Modul sowie ein eng damit verbundenes, Supercomputer unter Verwendung seines modularen ParaSta-
universell einsetzbares Cluster-Modul. Letzteres nutzt den tion-Modulo-Betriebssystems. Ӻ
6 www.linux-magazin.de 12.2023
mitp-Verlag
IT Web Fotografie Online-Marketing
12.2023 www.linux-magazin.de
www.mitp.de
Aktuell News
Kurznachrichten
Kraft 1.1: Mit Kraft verwalten Handwerker Entwicklern. Neu: Zu den Updates gehört 86Box 4.0: Ähnlich wie Dosbox, emuliert
ihre Dokumente und vor allem ihre Rechnun- ein flexibleres F-String-Parsing, das Be- auch 86Box ältere PC-Modelle. Neu: Erst-
gen. Neu: Die neue Version erlaubt erstmals schränkungen in der Syntax aufhebt. Es mals lassen sich die Grafikkarten ATI Mach 8
Makros in Kopf- und Fußzeilen. Über eine erlaubt jetzt beispielsweise jeden gültigen und Mach 32 emulieren. Dabei handelt es
neue Schaltfläche lassen sich dort an der Python-Ausdruck als Ausdruckskomponen- sich nicht um klassische GPUs, sondern um
aktuellen Cursor-Position schnell Templates ten innerhalb von F-Strings. Darunter fallen Erweiterungskarten, die bestimmte 2D-Ope-
einfügen. In der Vorversion konnte man ledig- Zeichenketten, die denselben Typ Anfüh- rationen beschleunigen können. Außerdem
lich den kompletten Text gegen ein Template rungszeichen verwenden wie der enthalten- haben die Entwickler am Code für Tastaturen
ersetzen. Lizenz: GPL de F-String, mehrzeilige Ausdrücke, Kom- und die Maus geschraubt. Im Ergebnis re-
https://volle-kraft-voraus.de/De/De mentare, Backslashes sowie Unicode-Es- agiert die Mausemulation jetzt flotter. Der
cape-Sequenzen. Darüber hinaus gibt es virtuelle Controller für Keyboards mit AT-
Slax 12.1/15.0.2: Die schlanke Linux-Distribu-
jetzt eine Debugging-API, die eine breite und PS/2-Anschluss soll zudem nicht mehr
tion arbeitet standardmäßig als Live-System
Palette von Ereignissen abdeckt, darunter plötzlich bei der Eingabe stoppen. 86Box 4.0
und pflegt Versionen mit Debian und Slack-
Aufrufe, Rückgaben, Zeilen, Ausnahmen und kann sich nun via VDE-Protokoll mit anderen
ware als Unterbau. Neu: Das neueste Release
Sprünge. Lizenz: PSFL laufenden 86Box-Maschinen verbinden, der-
basiert wahlweise auf Debian 12.1 oder
https://www.python.org zeit aber nur unter Linux Lizenz: GPLv2
Slackware 15.0.2-current. Von diesen Distri-
https://86box.net
butionen übernimmt Slax auch die Versions- Deno 1.37: Mit dem Node.js-Konkurrenten
nummern. Bislang speicherte Slax alle Än- lassen sich komplette Anwendungen in Java- Porteus 5.01: Die kompakte Distribution eig-
derungen im Verzeichnis /slax/changes/. script entwickeln. Neu: Die jüngste Version net sich besonders für den Betrieb von Wech-
Mehrere verschiedene Sessions waren so erzeugt auf Wunsch einen sogenannten Deno selmedien. Neu: Das aktuelle Release basiert
nicht möglich. Das ändert die neue Version, Kernel, über den sich die Javascript-Runtime auf Slackware 15.0 und enthält die Updates
die jeder Session einen eigenen Ordner un- auch in Jupyter Notebooks nutzen lässt. aus Slackware-15.0-patches. Als Paketma-
terhalb davon spendiert. Beim Boot-Vorgang Deno 1.37 verbessert zudem die Integration nager stehen Slapt-get, Slackpkg sowie Slpkg
muss sich der Anwender entscheiden, ob er in Visual Studio Code samt Language Server bereit. Das neue Tool Slapt-mod ist ein Wrap-
eine neue Session starten oder eine der be- (LSP). Die entsprechende Erweiterung ent- per für Slapt-get, der ein Modul aus einem
stehenden fortsetzen möchte. Lizenz: GPL deckt intelligenter die deno.json, versteht Package erzeugt. Das neue Skript Convertz
https://www.slax.org die neue Einstellung deno.disablePaths konvertiert sämtliche XZ-komprimierten
und unterstützt das Umbenennen von Datei- Module in Zstd-komprimierte Fassungen.
Python 3.12: Die Programmiersprache
en besser. Lizenz: MIT Lizenz: GPL
kommt in einer neuen Major-Version zu den
https://deno.land http://www.porteus.org
8 www.linux-magazin.de 12.2023
Incus: Erstes Release des LXD-Forks
Das Linux Containers Project hat eine erste Veröffentlichung von Incus in Version 0.1
angekündigt. Incus ist ein Fork von Canonicals LXD, der von Aleksa Sarai gestartet
wurde und nun unter dem Dach des Linux Containers Projects angesiedelt ist. Der
Fork war der Entscheidung von Canonical gefolgt, LXD von Linux Containers zu tren-
nen. Die erste Incus-Version entspricht in etwa LXD 5.18, enthält aber neben der offen-
sichtlichen Umbenennung noch eine Reihe von Änderungen. Mit der ersten Version
hat Linux Containers unter anderem die Gelegenheit genutzt, eine Menge obsoleter
oder problematischer Funktionen aus LXD zu entfernen.
So hatte LXD als reines Container-Projekt begonnen und seine REST-API /1.0/con- Akademie
tainers verwendet. Bei der Einführung virtueller Maschinen übernahm der neue End-
$JC(ŝGMV
punkt /1.0/instances alle Operationen sowohl für Container als auch für VMs, dennoch
behielt Canonical /1.0/
containers für Legacy-
Clients bei. Darüber
hinaus fügte es aber
einen Endpunkt /1.0/
IGUWEJV"
virtual-machines hin- Schulungen für Linux-Admins, die
zu, der jedoch nie durchblicken wollen. Fachlich und didak-
verwendet wurde. Bei tisch kompetente Dozenten, spannende
Incus haben die Ent- Schulungsthemen und eine lockere
wickler diese Legacy- Atmosphäre im Kurs – all das erwartet
Endpunkte entfernt, Sie bei uns an der Heinlein Akademie.
© Incus
ab 27.11.
Foreman / Katello
Curl-Entwickler entschuldigt sich
Der Hauptentwickler des Open-Source-Werkzeugs Curl, Daniel Stenberg, hat die ak- ab 27.11.
tuelle Version 8.4.0 veröffentlicht und dabei eine mehrere Jahre alte Sicherheitslücke IPv6 Grundlagen
(CVE-2023-38545) behoben. Laut Stenberg handelte es sich um die gravierendste
Lücke in Curl seit Jahren. Die Ursache ist ein Heap-Buffer-Overflow im Ablauf eines ab 04.12.
Socks5-Proxy-Handshakes. In seinem Blog beschreibt Stenberg, wie es zu dem Fehler OpenShift: Installation & Administration
kam, und geht dabei auch auf die fehlende Speichersicherheit von C ein, in dem Curl
programmiert ist.
Der Entwickler, der das Projekt seit 1996 leitet und als profilierter C-Programmierer ab 04.12.
gilt, schreibt dazu: „Wenn man den Code jetzt liest, ist es unmöglich, den Fehler nicht Puppet und Bolt Entwicklung
zu sehen. Ja, es tut wirklich weh, die Tatsache akzeptieren zu müssen, dass ich diesen
Fehler gemacht habe, ohne es zu merken, und dass der Fehler dann 1315 Tage lang ab 11.12.
unentdeckt im Code blieb. Ich bitte um Entschuldigung. Ich bin auch nur ein Mensch.“ Logfile-Analyse
Weiter erklärt Stenberg, dass die Lücke wohl auch mit besseren Tests hätte entdeckt
werden können. Aber schon jetzt nutze das Projekt zahlreiche Werkzeuge zur statischen
ab 11.12.
Analyse, und die Lücke sei dabei nicht aufgefallen. Wie Stenberg einräumt, hätte man
DNS und DNSsec mit BIND
diese Art Lücke aber auch durch die Wahl einer Programmiersprache mit Speicher-
sicherheit verhindern können. Eine entsprechende Portierung könne er als einziger
Entwickler des Projekts allerdings nicht stemmen. Er will jedoch künftig mehr Abhän-
Jetzt anmelden
gigkeiten mit einer speichersicheren Sprache nutzen.
Künftig könnten stückweise Teile von Curl ersetzt werden, wie das mit Hyper geschieht,
www.heinlein-akademie.de
schreibt Stenberg. Hyper ist eine in Rust geschriebene HTTP-Bibliothek, die Curl als
Backend nutzen kann. Diese Veränderungen geschähen aber sehr langsam und zeig-
ten schmerzhaft die damit verbundenen Probleme, so Stenberg. Ӻ
12.2023 www.linux-magazin.de
Aktuell Zahlen & Trends
10 www.linux-magazin.de 12.2023
Zahlen & Trends Aktuell
© Linux-Magazin
verbinden. Darüber hinaus nutzen auch sion etwas geändert hat und warum
Geräte wie Router RNDIS für Netzwerk- Kroah-Hartman diesen neuen Versuch
verbindungen. zum Entfernen von RNDIS unternimmt,
Die von Microsoft initiierte Remote ist noch nicht klar. Es bleibt abzuwarten,
Network Driver Interface Specification ob der Patch jetzt tatsächlich in den
stammt aus den Zeiten von Windows XP. Will RNDIS kicken: Greg Kroah-Hartman. Hauptzweig des Kernels wandert. Ӻ
12.2023 www.linux-magazin.de 11
Aktuell Zahlen & Trends
© Bitkom
haben, sind die Herausforderungen nach wie vor groß, teilt der
Bitkom mit. In der repräsentativen Umfrage unter 503 Unter-
nehmen ab 20 Beschäftigten in Deutschland beklagen die Be-
fragten vor allem, dass die DSGVO Geschäftsprozesse kompli- Meinungen zur DSGVO.
zierter mache (78 Prozent) und zu praxisfern sei (77 Prozent).
56 Prozent berichten, dass durch die DSGVO die Entwicklung Jedes zweite Unternehmen treibt seit der DSGVO-Einführung
neuer Produkte und Dienstleistungen verzögert werde. Rund einen höheren Aufwand für den Datenschutz und geht davon
die Hälfte (48 Prozent) stellt fest, dass Innovationen aus an- aus, dass das auch so bleiben wird (2022: 47 Prozent). 33 Prozent
deren Regionen aufgrund der DSGVO in der EU nicht genutzt der Befragten haben einen höheren Aufwand und erwarten,
werden könnten. dass dieser weiter zunehmen wird (2022: 30 Prozent). 86 Pro-
Zugleich räumen die Unternehmen in der Fünf-Jahres-Rück- zent der Datenschutzverantwortlichen in den Unternehmen
schau durchaus auch Vorteile der Datenschutzregeln ein: Die schaffen es kaum, aktuellen Entwicklungen beim Datenschutz
Datensicherheit im Unternehmen habe sich verbessert, und die in der Rechtsprechung zu folgen (2022: 81 Prozent).
DSGVO setze weltweit Maßstäbe (jeweils 61 Prozent), zudem Drei Viertel (74 Prozent, 2022: 64 Prozent) stellen fest, dass Da-
sei das Vertrauen in digitale Prozesse gestärkt worden (51 Pro- tenschutz in Deutschland so kompliziert geworden ist, dass es
zent). Die Wettbewerbsbedingungen in der EU seien nun ein- ihnen schwerfällt, Mitarbeiter über Datenschutz aufzuklären.
heitlicher (45 Prozent). 12 Prozent der Befragten plädieren so- Eine deutliche Mehrheit von 69 Prozent sieht in der DSGVO
gar dafür, die DSGVO zu verschärfen, um die Bürgerinnen und einen Nachteil im internationalen Wettbewerb gegenüber an-
Bürger besser zu schützen. deren Unternehmen, die nicht der DSGVO unterliegen. Ӻ
12 www.linux-magazin.de 12.2023
Zahlen & Trends Aktuell
© Laion
600 Nvidia-A100-Karten nutzt. ein wenig schlechter ab. Dabei wögen
Als Motivation für die Arbeit an LeoLM die Vorteile durch die Verbesserungen
nennen die Beteiligten die starke Bin- für Deutsch schwerer als die Verschlech-
dung von Llama 2 ans Englische. Die Trainingsparameter der deutschen Version. terungen für Englisch, betont Laion. Ӻ
Anzeige
Docker: # 2 Tage
- 20. November (online)
- 11. Dezember
Kubernetes: # 3 Tage
- 22. November (online)
- 10. Januar
Ansible: # 3 Tage
- 12. Februar
- 10. Juni
14 www.linux-magazin.de 12.2023
IT-SA 2023 Aktuell
© NürnbergMesse / FrankBoxler
der Menschen und Firmen. Hier gebe es
immer noch Informationsbedarf.
„Stellen Sie sich einmal vor, was man
alles Gutes tun könnte mit den 200 Mil-
liarden Schaden, den Ransomware verur-
sacht!“, sinnierte Plattner. Es sei schlicht
nicht mehr die Frage, ob man getroffen
werde, sondern nur noch, wann. Backup, 2 BSI-Chefin Claudia Plattner (links) und Bundes-CIO Markus Richter (Mitte).
Restore, Resilienz, Awareness – allerorts
müsse das Sicherheitsniveau signifikant
erhöht werden, meint die BSI-Chefin: Richter freut sich, für das BSI „eine Präsi- mit echter Resilienz wird es möglich sein,
„Es darf nicht mehr so leicht sein, uns dentin mit viel Kompetenz und Energie den freien Raum Internet zu bewahren,
anzugreifen – so etwas kann das Weiter- gefunden zu haben. Das ist das, was so wie wir das alle wollen.“
bestehen einer Firma bedrohen.“ Deutschland jetzt braucht.“ Sabotage, Es bleibt zu hoffen, dass sich die IT-
Nach der viel diskutierten Unabhängig- Spionage, Cybercrime – Angreifer setzen Security-Branche wirklich, wie Richter es
keit beziehungsweise der Weisungsge- immer perfidere Mittel ein, aber „vieles sich wünscht, zum Motor des Fortschritts
bundenheit des BSI gefragt, betonten wäre vermeidbar, wenn man nur die entwickelt, den Deutschland für eine er-
Plattner und Richter die gute Zusammen- Empfehlungen des BSI beachten würde.“ folgreiche Digitalisierung dringend be-
arbeit der Behörde mit dem Bundesinnen- Der Bundes-CIO betonte, gerade mit EU- nötigt. Das Geld ist da, bestätigt auch der
ministerium. Dem ist das BSI zwar unter- Vorgaben wie NIS-2 1 und dem Cyber Branchenverband Bitcom: 13 Prozent
stellt (als Exekutivorgan), will aber zu- Resilience Act (CRA 1) hätten die Unter- mehr wollen Unternehmen im nächsten
gleich „vollständige wissenschaftliche nehmen mittelfristig viele Hausaufgaben Jahr für IT-Security ausgeben, was die
Unabhängigkeit“ bewahren. zu machen, permanent und überall. „Nur Summe der Ausgaben 2024 voraussicht-
lich erstmals über die 10-Milliarden-Euro-
Grenze treiben wird.
Fast zur Randnotiz geriet auf der IT-SA
das Thema Open Source – allerdings ein-
deutig im positiven Sinne, denn FOSS gilt
als zentral und unersetzlich. Die Bundes-
regierung will Open Source weiterhin
stärken, das Zentrum für Digitale Souve-
ränität (ZenDiS 1) wird zum Jahres-
wechsel anfangen, Personal einzustellen,
und man startet darüber hinaus Koope-
rationen mit anderen europäischen Län-
dern. Denn, so resümierten Plattner und
Richter unisono: Open Source nimmt in
der IT-Sicherheit eine so zentrale Rolle
ein, dass man das nicht mehr besonders
erwähnen muss. (csi/jlu) Ӻ
© Markus Feilner
12.2023 www.linux-magazin.de 15
Entwurfsmuster in der objektorientierten Softwareentwicklung
Musterhafte Software
Passt eine gute Lösung auf eine Vielzahl von Problemen, Welcher Softwareentwickler kennt das
nicht: Man steht vor einer größeren Pro-
erspart das eine lange, anstrengende und potenziell fehler- grammieraufgabe, und es beschleicht
einen das Gefühl, eine ähnliche Aufgabe
behaftete Suche nach dem schon bekannten Weg. In der schon einmal gelöst zu haben. Wie ge-
nau, das will einem jedoch beim besten
Softwareentwicklung können Entwurfsmuster wertvolle Er- Willen nicht mehr einfallen. Nun muss
man also erneut Energie in einen eigent-
fahrungen speichern und nachnutzbar machen. Mirko Sonntag lich nicht neuen Entwurf stecken. Zu
schade, denn wie schön wäre es gewe-
sen, hätte man von der zuvor gemachten
Erfahrung profitieren können, oder noch
besser: könnte man sogar aus dem Er-
fahrungsschatz einer ganzen Community
schöpfen! In diesem Artikel geht es um
16 www.linux-magazin.de 12.2023
Grundlegende Entwurfsmuster Titelthema
12.2023 www.linux-magazin.de 17
Titelthema Grundlegende Entwurfsmuster
Button ToolbarFactory
{abstract} {abstract}
name createToolbar()
createButton(String name)
...
DarkButton
...
2 Das Abstract-Factory-Muster delegiert die Erzeugung von Objekten an ein separates Fabrikobjekt. Familien von Produkten lassen
sich so an einer zentralen Position erstellen und ganz neue Produktfamilien einfach einführen.
Dramas. Knapp 20 Jahre nach Christopher Software 1. Mittlerweile gibt es Muster- sind eine Sammlung von Erfahrungen
Alexanders Veröffentlichung wurde der sammlungen für Softwarearchitekturen, vieler Köpfe. Sie verbessern die Kom-
Ansatz auf die Informatik übertragen. Die Enterprise Application Architecture 1, munikation unter Experten, zeigen un-
sogenannten Viererbande (Gang of Four: Enterprise Integration 1, Cloud Compu- terschiedliche Alternativen bei der Pro-
Erich Gamma, Richard Helm, Ralph John- ting 1, Workflows 1 oder den Entwurf blemlösung auf, erhöhen die Flexibilität
son und John Vlissides) verschriftlichte von APIs 1, um nur einige zu nennen. einer Lösung oder verbessern die Wie-
die Entwurfsmuster für objektorientierte Das ist nur logisch, denn Musterkataloge derverwendung.
18 www.linux-magazin.de 12.2023
Grundlegende Entwurfsmuster Titelthema
Klassen soll das System haben, und in können, ohne den bereits bestehenden Softwareentwurf beispielhaft Entwurfs-
welcher Granularität? Wo und wie sollen Code verändern zu müssen. Diese und muster aus diesen drei Kategorien an.
welche Klassen instanziiert werden? Wie weitere Prinzipien liegen den Entwurfs-
viele Instanzen darf es für welche Klassen mustern zugrunde.
Wie Objekte erstellen?
geben? Welche Schnittstellen soll es ge- Aber aufgepasst! Kein Entwickler soll
ben? Welche Art von Beziehungen sollen Prinzipien und Muster exzessiv anwen- Die Frage klingt zunächst einmal trivial,
die Klassen und Objekte zueinander be- den. Es ist weder nötig noch möglich, an entpuppt sich bei genauerer Betrach-
sitzen? Wie kann man Komponenten fle- jeder Stelle allen Prinzipien zu folgen tung aber als ein ernsthaftes Problem.
xibel zusammensetzen? Wie lassen sich oder ein Muster an das nächste zu reihen. Um ein einzelnes Objekt anzulegen, be-
Algorithmen leicht wiederverwenden? Das führt nur zu sehr komplexem Code. nutzt man den Konstruktor der Klasse
Bei der Softwareentwicklung können Prinzipien muss man an manchen Stellen und übergibt, falls nötig, die entspre-
wir uns auf eine Konstante immer ver- verletzen, Muster haben Grenzen. Ein chenden Parameter zur Initialisierung.
lassen: die Veränderung. Wenn Anwen- Entwickler sollte danach streben, Prin- Gilt es jedoch, komplexere Strukturen
dungen längere Zeit in Gebrauch bleiben, zipien und Muster dort einzusetzen, wo anzulegen, verliert man auf diese Weise
dann entsteht zwangsläufig der Bedarf, zukünftig Erweiterungen zu erwarten an Flexibilität. Möchte man in Zukunft
sie aus verschiedensten Gründen zu än- sind. An anderen Stellen im Code, die fallbasiert unterschiedliche Objekte an-
dern: Kunden wollen eine neue Funktion voraussichtlich stabil bleiben, kann man legen, muss man unschöne Abfragen ein-
haben, die Schnittstelle eines Drittsystems mit weniger Flexibilität gut leben. Tech- bauen und die Anwendung verändern.
ändert sich, die neue Version einer ge- nische und fachliche Erfahrung hilft bei Angenommen, wir entwickeln ein
nutzten Bibliothek verlangt ein anderes diesen Entscheidungen maßgeblich. Textverarbeitungsprogramm, konkret
Datenformat. Diese Liste lässt sich quasi Objektorientierte Entwurfsmuster teilt dessen Werkzeugleiste. Wir betrachten
beliebig verlängern. Gute Entwürfe ge- man in drei verschiedene Kategorien ein: lediglich einen Teilaspekt: Wir wollen
hen vorausschauend mit möglichen Ver- Erzeugungsmuster, Verhaltensmuster Buttons für verschiedene Zwecke hinzu-
änderungen um und erhöhen den Grad und Strukturmuster. Erzeugungsmuster fügen, und es soll unterschiedliche gra-
an Wiederverwendung. kümmern sich darum, neue Objekte von fische Darstellungen (Light Mode, Dark
Dabei haben sich bestimmte Prinzipien Klassen anzulegen. Strukturmuster be- Mode) je nach Vorliebe des Benutzers
herauskristallisiert, die zu guten Ent- schreiben Möglichkeiten, Klassen oder geben. Im einfachsten Fall entsteht eine
würfen führen. Das Prinzip, auf eine Objekte geschickt so miteinander zu as- 1
Lösung wie in Abbildung . Das ist zu-
Schnittstelle hin zu programmieren statt soziieren, dass dabei beispielsweise grö- nächst einmal völlig in Ordnung, denn
auf eine konkrete Implementierung, hilft ßere, aber flexible Strukturen entstehen irgendwo müssen schließlich Entschei-
bei der Entkopplung von Klassen und oder gute Schnittstellen zu Klassen, Da- dungen getroffen werden.
führt damit zu mehr Robustheit. Die Im- tenstrukturen oder Systemen eingeführt Betrachten wir den initialen Entwurf
plementierung einer Schnittstelle kann werden. Der Fokus von Verhaltensmus- durch die Brille der Erweiterbarkeit: Mög-
man problemlos austauschen, ohne die tern hingegen liegt auf Algorithmen, liche zukünftige Erweiterungen können
aufrufende Klasse (also den Klienten) an- Zuständigkeiten für und Interaktionen die Einführung neuer Stile, neuer Knöpfe
passen zu müssen. zwischen Objekten. Im Folgenden sehen oder eines vollkommen anderen Layouts
Ein weiteres Prinzip ist es, Objektkom- wir uns anhand von Leitfragen beim der Werkzeugleiste sein. In jedem Fall
position gegenüber der Klassenverer-
bung zu bevorzugen. Sowohl Komposi-
tion als auch Vererbung ermöglichen das Grafik
Document
Erweitern einer Anwendung durch neues {abstract}
if (echtesBild == null) {
Verhalten. Bei der Klassenvererbung load() getSize() return size;
überschreibt eine Kindklasse das Verhal- paint() } else {
load() return echtesBild.getSize()
ten der Elternklasse. Das ist eine statische save() }
Änderung, die bereits zur Kompilierzeit
feststeht. Die Komposition hingegen de-
legiert die Ausführung eines Algorithmus BildProxy
an ein anderes Objekt. Auf diese Weise
lässt sich ein bestimmtes Verhalten oder Bild echtesBild: Bild
sogar ein ganzer Algorithmus zur Lauf-
getSize() getSize() if (echtesBild == null) {
zeit austauschen. paint() paint() echtesBild = load();
Das dritte hier zu nennende Prinzip ist load() load() }
das Open/Closed-Prinzip. Es besagt, dass save() save() echtesBild.paint();
12.2023 www.linux-magazin.de 19
Titelthema Grundlegende Entwurfsmuster
zeichne() zeichne()
Flexible Komponenten
Manchmal steht man vor dem Problem,
dass es Komponenten mit mehreren
Tabelle kombinierbaren Ausprägungen geben
soll. Unsere Textverarbeitung soll ver-
zeichne()
schiedene Komponenten wie Text, Ta-
bellen, Bilder und geometrische Formen
grafisch darstellen können. Da liegt es
5 Das objektorientierte Herangehen kann zu einer Inflation der Klassenanzahl führen. nahe, jeder Komponente eine Klasse zu
spendieren. Wir erhalten also die Klassen
Text, Tabelle, Bild, Rechteck, Kreis
müssten wir unsere Hauptklasse Text- Welche Schnittstellen? und so weiter, die alle von der abstrakten
ProcessingApp anfassen. Ein besserer Klasse Komponente erben.
Entwurf wäre es, die Erstellung der Ob- In einer komplexen Software gibt es viele Jetzt kommt die Anforderung hinzu,
jekte in eine Fabrik auszulagern, also in verschiedene Arten von Schnittstellen. einen schönen dicken Rahmen um jede
eine Klasse, deren Zweck die Erstellung Objekte haben eine Schnittstelle, Sys- Komponente ziehen zu können. Geben
2
von Objekten ist . teme und Subsysteme ebenfalls. Es gibt wir dem üblichen objektorientierten Re-
Dieses Erzeugermuster nennt sich Ab- interne und externe Schnittstellen, aktu- flex nach, diese Anforderung per Klassen-
stract Factory. Jeder Stil wird durch eine elle und veraltete. Sehen wir uns das am vererbung zu lösen, stehen wir plötzlich
eigene Fabrik abgebildet, deren gemein- Beispiel einer Art Objektschnittstelle an. mit doppelt so vielen Klasse da: Text-
same Schnittstelle eine abstrakte Klasse Wenn man in einer Textverarbeitung MitRahmen, TabelleMitRahmen, BildMit-
ist. Jede Fabrik erstellt Familien von Ob- ein Dokument öffnet, dann muss es zu- Rahmen und so weiter. Als wäre das nicht
jekten (hier: Werkzeugleiste und zuge- erst vollständig geladen sein, damit das schon aufwendig genug, bemerkt der
hörige Buttons). Die Hauptklasse ist nun Programm es anzeigen kann . Nun 3 Kunde, dass größere Texte, Bilder oder
nicht mehr selbst dafür zuständig, die lässt sich der Text schnell einlesen, die Tabellen nicht mehr auf den Bildschirm
Objekte zu erzeugen. Stattdessen wird Bilder jedoch nicht. Wenn ein Dokument passen, und wünscht sich für diese Fälle
ihr eine konkrete Fabrik übergeben, die mehrere große Bilder enthält, dauert der auch noch eine Scrollbar.
sie zum Erzeugen der Werkzeugleiste Ladevorgang entsprechend lange, was Mit der Klassenvererbung explodiert
verwendet. So lässt sich ein neuer Stil für den Benutzer unschön ist. Besser wäre spätestens jetzt die nötige Anzahl der
einfach hinzufügen, indem man eine es, wenn die Software den Text unmittel- 5
Klassen : Text, TextMitRahmen, Text-
zusätzliche Fabrik und neue Produkte bar anzeigt und die Bilder eines nach dem MitScrollbar, TextMitRahmenUnd-
(Werkzeugleiste, Button) anlegt. Ein Stil anderen einfach nachlädt. Besonders ele- Scrollbar, und so weiter. Was ist, wenn
lässt sich auch zur Laufzeit austauschen: gant klappt das, wenn bereits Metadaten jetzt noch jemand auf die Idee kommt,
Man muss lediglich der Hauptklasse die über die Bilder vorliegen, vor allem die den Komponenten Überschriften zu ge-
entsprechende Fabrik zuweisen und die Maße, sodass sich der Text dann schon ben? So kann es nicht weitergehen. Was
Werkzeugleiste neu zeichnen. korrekt formatieren lässt. wir hier eigentlich tun, ist, Objekten zu-
Die Hauptklasse besitzt keine statischen Das Strukturmuster Proxy schafft hier sätzliches Verhalten in verschiedenen
Abhängigkeiten mehr zu den konkreten 4
Abhilfe . Unser BildProxy ist ein Stell- Kombinationen zu geben.
Implementierungen der Produkte. Der vertreterobjekt für das echte Bild. Proxy Das Strukturmuster Decorator Pattern
Nachteil dieses Ansatzes liegt darin, dass und das Bild implementieren dieselbe löst dieses Problem durch Anwendung
das Einführen ganz neuer Produkte (zum Schnittstelle, der Proxy kontrolliert aber des Prinzips Komposition über Vererbung.
Beispiel Dropdowns) zu einer Änderung den Zugriff auf das Bild. Er verhält sich Wie schon zuvor sind die grafischen
der abstrakten Fabrik und aller konkreten genauso wie das echte Bild, besitzt Bild- Komponenten Kinder einer abstrakten
Fabriken führt. informationen und kann auf diese Weise 6
Klasse . Die grafischen Erweiterungen
20 www.linux-magazin.de 12.2023
Grundlegende Entwurfsmuster Titelthema
Client
Komponente komp = new Rahmen(3, new Scrollbar(
tuEtwas() new Überschrift("Ein Bild", new Bild( ... ))));
komponente komponente.zeichne()
Komponente Decorator
Text {abstract} {abstract}
super.zeichne();
zeichne() zeichne() zeichne()
zeichneMitRahmen();
Bild
Rahmen
zeichne()
zeichne()
zeichneMitRahmen()
6 Das Decorator-Muster erweitert die Funktionalität einer Klasse, ohne die Methoden mithilfe von Vererbung zu überschreiben. Im
Beispiel werden grafische Komponenten flexibel mit zusätzlichen Elementen wie einem Rahmen oder einer Scrollbar erweitert.
(Rahmen, Scrollbar, Überschrift) wer- mehrung der Klassen zu erzwingen oder schieden ausrichten: linksbündig, rechts-
den jedoch bei Bedarf als Komposition komplexe Fallabfragen innerhalb der bündig oder zentriert. Es gibt aber noch
hinzugefügt. Man spricht dabei von so- Klassen auszulösen. Die Komponenten weitere Komponenten, die man auf diese
genannten Dekorierern. lassen sich sogar zur Laufzeit mit zusätz- Weise formatieren kann, zum Beispiel
Es gibt einen abstrakten Dekorierer, lichem Verhalten erweitern. Tabellenzellen, Kopfzeilen oder Bilder.
ebenfalls als Kindklasse der Komponen- Da die Dekorierer geschachtelt werden, Naiv könnte man die Algorithmen für
te, von dem die konkreten Dekorierer muss der Entwickler die Reihenfolge im die Ausrichtung in eine Klasse Absatz
erben. Der Dekorierer hält eine Referenz Blick haben, denn die Ausführung der stecken. Sie erhält eine Variable mit der
auf eine grafische Komponente (echte Logik folgt ihr. Das Muster birgt außer- Art der Ausrichtung und wählt abhängig
Komponente oder Dekorierer) und kann dem Gefahren. Zum einen erben Kom- davon den passenden Algorithmus aus.
somit sowohl deren Logik als auch die ponenten und Dekorierer von derselben Das führt allerdings zu einer Duplizie-
eigene dekorierende Logik ausführen. Nun abstrakten Komponentenklasse, obwohl rung des Codes in den entsprechenden
kann man Dekorierer beliebig kombi- Dekorierer eigentlich gar keine Kompo- Klassen, etwa für Tabellenzellen und so
nieren und einer konkreten Komponente nenten sind. Das muss man berücksich- weiter. Folglich erstellen wir lieber eine
hinzufügen. So erzeugt new Scroll- tigen, wenn aus bestimmten Gründen die abstrakte Klasse Komponente, von der die
bar(new Text()) einen Text mit einer Objektidentität eine Rolle spielen sollte. Klassen Absatz, Tabellenzelle, Kopf-
Scrollbar und new Überschrift("Ein Zum anderen können viele kleine Deko- zeile sowie Bild erben 7 . Status und
Bild", new Rahmen(3, new Bild())); riererklassen entstehen, die sehr ähnlich Logik der Ausrichtung liegen in der Klas-
ein Bild mit Überschrift und Rahmen. aussehen, nur wenig Funktionalität ent- se Komponente und werden von allen vier
Das Decorator Pattern erzeugt hierbei halten und deren Objekte verschachtelt Klassen verwendet.
Veränderlichkeit hinsichtlich unter- sind. Das kann für ungeübte Entwickler Was nach einem logischen Entwurf
schiedlicher konkreter Ausprägungen schwer zu verstehen sein und erschwert klingt, beschränkt jedoch die Flexibilität
der grafischen Komponenten. Es lassen außerdem das Debugging. und Erweiterbarkeit. Um eine neue Aus-
sich sehr einfach neue grafische Aspekte richtungsart einzuführen, den Blocksatz,
hinzufügen, ohne das bestehende Pro- müssen wir jetzt die Klasse Komponente
Flexible Algorithmen
gramm anpassen zu müssen. Das ermög- verändern. Es entsteht ein neuer Ausrich-
licht, auf sehr elegante Art und Weise die Bleiben wir beim Beispiel der Textver- tungsstatus, und es gilt, den bestehen-
verschiedenen Aspekte zu kombinieren, arbeitung. Ein Dokument besteht aus den Algorithmus anzupassen. Das ist
ohne dadurch eine explosionsartige Ver- Absätzen. Jeder Absatz lässt sich ver- zwar unschön, aber machbar. Allerdings
12.2023 www.linux-magazin.de 21
Titelthema Grundlegende Entwurfsmuster
stehen bald weitere Anforderungen vor tierungen mit den jeweiligen Algorith- Einschränkungen?
der Tür, die unseren Entwurf strapazieren, men erben. Die Komponenten besitzen
wie eine Ausrichtung abhängig von der nun für jede Algorithmenfamilie eine Die Muster funktionieren weitgehend
Art der Komponente, etwa bei Tabellen- Member-Variable und rufen die Logik bei unabhängig von konkreten objektorien-
zellen oben linksbündig oder mittig Bedarf auf. tierten Programmiersprachen, und es
rechtsbündig. Außerdem kommen wei- Der Entwickler kann den Komponen- gibt Codebeispiele für viele Sprachen 1.
tere ergänzende Formatierungsarten ten ihr Formatierungsverhalten nun fle- Manche Muster, zum Beispiel Adapter
hinzu, etwa Schriftart oder Aufzählung. xibel zuweisen, die Konfiguration lässt oder Fassade, lassen sich auch bei pro-
Es gibt jetzt also drei Familien von Al- sich auch noch zur Laufzeit ändern. Die zeduralen Sprachen einsetzen.
gorithmen (Ausrichtung, Schriftart, Auf- Auswahl eines Algorithmus erfolgt nicht Es gibt einige wenige Fälle, bei denen
zählung), von denen jeweils eine heran- mehr auf Basis von Bedingungsanwei- sich Muster in einer objektorientierten
gezogen wird. In der Vererbungshierar- sungen, sondern über eine Zuweisung. Sprache leichter oder schwerer umsetzen
chie müsste man nun anfangen, in den Neue Algorithmen oder auch deren Va- lassen. Zwei Beispiele: Das Singleton-
konkreten Komponenten Ausnahmen rianten lassen sich damit einführen, ohne Muster kann man in Python auf recht
vom Standardverhalten einzurichten, dass man dafür den bestehenden Code unterschiedliche Arten implementieren
indem man Methoden überschreibt: Ein anpassen müsste. (mit einer Meta-Klasse oder den Kon-
Bild hat keine Schriftart, eine Tabellen- Allerdings gilt es zu bedenken, dass struktoren __new__ oder __init__), die
zelle nutzt die genannten besonderen die Algorithmen den Komponenten für Ungeübte teilweise schwer zu lesen
Ausrichtungen. Vererbung ist hier nicht irgendwo zugewiesen werden müssen. sind. In Java gibt es keine Mehrfachver-
der richtige Ansatz und führt zu Code- Der Client-Code muss folglich die Al- erbung, weshalb sich das klassenbasierte
duplikaten, wenn mehrere Komponenten gorithmen, deren Unterschiede und Adapter-Muster nicht realisieren lässt.
dieselben Ausnahmen implementieren. möglicherweise spezifisiche Implemen- Das sind jedoch eher Ausnahmen.
Außerdem muss man bei der Einführung tierungsdetails kennen. Ein weiterer Entwurfsmuster lassen sich universell
neuer Algorithmen in den drei Familien Nachteil: Die Algorithmen einer Familie einsetzen und in jedem Softwareprojekt
mehrere Klassen adaptieren. teilen sich notwendigerweise eine nutzen, unabhängig von der Größe oder
Wie finden wir aus dieser Misere einen Schnittstelle. Deshalb müssen einfachere der Fachdomäne. Auch die gewählte Ent-
Ausweg? Sie erinnern sich: Komposition Algorithmen unter Umständen eine wicklungsmethodik spielt keine Rolle.
über Vererbung! Das Verhaltensmuster komplexere Schnittstelle implementie- Ob man nun nach V-Modell oder Scrum
8
Strategy ist hierbei der richtige Weg . ren als eigentlich nötig. Beispielsweise entwickelt, beeinflusst solche codenahen
Wir verlagern die Familien verwandter erhalten sie Parameter übergeben, die Entwurfsentscheidungen nicht. Relevan-
Algorithmen in separate Klassen. Für sie gar nicht benötigen. Darüber hinaus ter ist da die persönliche Qualifikation.
jede Familie gibt es eine abstrakte Ober- führt das Muster zu einer erhöhten An- An den Umgang mit Entwurfsmustern
klasse, von der die konkreten Implemen- zahl von Objekten in der Anwendung. nicht gewohnte Entwickler werden zu-
nächst etwas mehr Probleme haben, den
Programmcode zu verstehen oder so zu
erweitern, dass das Muster nicht verletzt
if (("links").equals(ausrichtung)) { wird. Das sollte sich jedoch nach einer
// Elementlinks ausrichten Phase der Einarbeitung legen.
} else if (("rechts".equals(ausrichtung)) {
// Element rechts ausrichten Aus der Praxis ist nicht selten der Ein-
} else { wand zu hören, dass Entwurfsmuster zu
// Element zentriert ausrichten
}
schlechter Performance führen. Hier gilt
es zu differenzieren. Einerseits ist es tat-
sächlich so, dass manche Muster zu einer
deutlich höheren Anzahl von Objekten
Absatz
führen, zu zusätzlichen Klassen und As-
soziationen. Das Ziel ist ja schließlich
Komponente
Kopf {abstract} eine bessere Erweiterbarkeit und nicht
bessere Performance. Andererseits gibt
String ausrichtung es viele verschiedene nicht-funktionale
Tabellenzelle ausrichten()
Anforderungen, und die Geschwindig-
keit steht in vielen Fällen gar nicht an
erster Stelle. Eine robustere Software
Bild oder eine einfachere Softwarewartung
sind häufig wichtiger.
In der Welt der Embedded Software
7 Die naive Lösung für die Ausrichtung sieht einfach aus, beschränkt aber die Flexibili- kann es aber in der Tat auf Millisekunden
tät. Zudem erzwingt sie komplizierte Ausnahmen, wenn Anforderungen hinzukommen. ankommen – denken Sie zum Beispiel an
22 www.linux-magazin.de 12.2023
Grundlegende Entwurfsmuster Titelthema
aufzählung
Absatz schriftart
Bild
AusrichtungRechts
ausrichten()
AusrichtungZentriert
ausrichten()
ausrichtung.ausrichten()
AusrichtungBlocksatz
ausrichten()
ausrichten()
8 Das Stragegy-Muster kapselt Familien von Algorithmen. Das ermöglicht, Algorithmen leicht zuzuweisen und auszutauschen, sogar
zur Laufzeit. Das gezeigte Beispiel weist grafischen Elementen verschiedene Formatierungsalgorithmen zu.
die Steuerung von Ventilen oder Geräte- dokumentieren und teilen möchten, nicht de Probleme etabliert haben. In welcher
steuerungen im Fahrzeug (Airbag, ABS). selten aus der wissenschaftlichen Com- anderen Branche würde man schon frei-
Die Entscheidung zwischen Flexibilität munity. Man kann also davon ausgehen, willig auf einen so breiten Erfahrungs-
und Performance ist immer ein Trade-off, dass in Zukunft noch weitere Muster zum schatz verzichten? Daher empfehle ich
man kann nicht beides in vollem Maß Wissensschatz hinzukommen. jedem Entwickler, seine Axt zu schärfen,
bekommen. Höhere Flexibilität führt zu Die Liste der objektorientierten Ent- bevor er in den Wald geht – in diesem
Geschwindigkeitseinbußen. Mit allge- wurfsmuster ist hingegen stabil, und Fall mit dem Wissen über objektorientier-
meinen Aussagen zur Performance einer das wird voraussichtlich auch so bleiben. te Entwurfsmuster. Diese Investition zahlt
Lösung sollte man dennoch vorsichtig Der Bedarf ist eher anderer Natur: Zwar sich schnell aus. (jcb/jlu) Ӻ
sein. Letztendlich können nur Messun- gehören Entwurfsmuster zu einer guten
gen der konkreten Umsetzung von Algo- softwaretechnischen Ausbildung, doch
rithmen in einer konkreten Umgebung es gibt noch viele Entwickler, denen sie Weitere Infos und
Unterschiede in der Laufzeit offenbaren. nicht geläufig sind. Der Mangel an IT- interessante Links
Alles andere ist Stochern im Nebel. Fachkräften verstärkt diesen Effekt noch. www.lm-online.de/qr/49566
Dadurch gibt es unter den Entwicklern
immer mehr Quereinsteiger, denen be-
Wohin geht die Reise?
stimmte Teile der Ausbildung fehlen. Die-
Wie eingangs erwähnt, wurden in den se Tatsache und der Umstand, dass es in Der Autor
letzten Jahren neue Muster entwickelt der Softwareentwicklung oft sehr schnell
Prof. Dr. Mirko Sonntag lehrt Softwaretech-
oder entdeckt. Das liegt zum einen am gehen muss, führen zu Entwürfen, die
nik an der Hochschule Esslingen, mit den
beschleunigten technischen Fortschritt: man im weiteren Verlauf eines Projekts
Gebieten Programmieren, Softwaretechnik,
Dadurch gibt es immer wieder zusätz- oder über die Lebensdauer eines Produkts
Software Testing und Advanced Software
liche Bereiche, für die Lösungen gefragt oft adaptieren muss. Das verursacht bei
Engineering. Zusätzlich forscht er am Fraun-
sind. Mit dem Einsatz von KI in der Soft- der Softwarewartung einen ärgerlichen,
hofer Anwendungszentrum KEIM an neuen
wareentwicklung und dem Aufkommen unnötigen Mehraufwand.
Mobilitätskonzepten. Darüber hinaus unter-
vom Quantencomputing sind bereits Schriftlich festgehaltene Entwurfsmus-
stützt er die berufliche Weiterbildung durch
spannende Gebiete am Horizont zu er- ter gibt es schon seit fast 30 Jahren. Sie
Schulungen im Bereich Softwaretechnik an
kennen. Zum anderen gibt es viele Ex- umfassen eine Sammlung von Lösungs-
der Technischen Akademie Esslingen.
perten, die gern Wissen und Erfahrungen wegen, die sich für wiederholt auftreten-
12.2023 www.linux-magazin.de 23
Das Singleton-Pattern in Python Die berühmte Gang of Four (GoF 1)
definiert ein Singleton so: „Ensure a class
only has a single instance, and provide a
an der Funktionsweise des Import-Sys- Python in sys.modules nach, findet dort singleton_module aus dem Dictionary,
tems. Der Befehl import module_name den Eintrag os und holt sich das Modul- sodass beim nächsten Import wieder
importiert das Modul mit dem Namen objekt, ohne den Einleseprozess noch- der gesamte Einlesevorgang stattfindet.
module_name. So importiert beispiels- mals zu durchlaufen. Dieses Nachschla- Damit ist das Singleton kaputt, da bei
weise import os das Modul os aus der gen im Dictionary sys.modules läuft um dem Import from module import sing-
Standardbibliothek, das viele betriebs- mehrere Größenordnungen schneller leton_module eine neue Singleton-In-
systemnahe Funktionen abstrahiert und ab als das Einlesen beim ersten Import. stanz entsteht.
damit plattformübergreifend zur Ver- Jedes Python-Objekt hat einen Referenz- Python agiert so dynamisch, dass sich
fügung stellt, zum Beispiel das Erstellen zähler, der angibt, wie viele Referenzen fast immer ein Weg finden lässt, um der-
von Verzeichnissen oder den Abruf von auf es zeigen. Bei jedem Import erhöht artige Zwänge wie hier beim Singleton
Metadaten. sich dieser Zähler, und sys.getref- zu umgehen. Das dynamische Neuladen
Für das Singleton-Verhalten beim count(os) gibt jedes Mal eine größere von Modulen kann aber durchaus nütz-
komplexen Import-Prozess ist das Ca- Zahl zurück. lich sein und gute Dienste leisten, bei-
ching maßgebend. Beim ersten Import Listing 1 zeigt eine Singleton-Imple- spielsweise dann, wenn Systeme vom
eines Moduls liest Python den Datei- mentierung, die das Modul-Caching Nutzer erstellten Code zur Laufzeit ak-
inhalt ein und wandelt ihn in mehreren nutzt. Im selben Modul, das die Klasse tualisieren müssen.
Schritten in ein Python-Objekt um. Die- definiert, entsteht die Instanz singleton Eine weitere Möglichkeit, ein Singleton
ses Objekt speichert es dann im Dictio- = Singleton(100). Der Operator del umzusetzen, bietet die spezielle Metho-
nary sys.modules mit dem Modulnamen löscht ein Objekt. Das passiert hier direkt de __new__. Im Vergleich zur speziellen
als Schlüssel und dem Modulobjekt nach der Instanziierung. Damit steht
als Wert. Beim Import import os sieht die Klasse Singleton nicht länger bereit.
Es kann also lediglich eine einzige In- Eingebaute Module
stanz geben, die mit dem Import from
Bei sys handelt es sich um ein eingebautes
Listing 1: Singleton mit Modul singleton_module import singleton
Modul, also eines, das im Python-Inter-
class Singleton:
an beliebig vielen Stellen im Programm
zur Verfügung steht. preter integriert ist. Im Gegensatz zum
"""Only one instance planned. Modul os, dessen Quelltext in der Datei
""" os.py vorliegt, gibt es für sys keine Datei
# pylint: disable-msg=too-few-
Singletons mit __new__ sys.py. Beim interaktiven Ausprobieren
public-methods Dieser Ansatz lässt sich aber umgehen, von sys.getrefcount(os) in Systemen
def __init__(self, value): wenn man es denn darauf anlegt. Das wie IPython oder JupyterLab kann der
self.value = value Dictionary sys.modules ist veränderbar Zähler zwischen zwei Importen durchaus
und lässt nicht nur das Hinzufügen von um zwei, drei oder mehr ansteigen, da die-
Schlüssel-Wert-Paaren zu, sondern auch se Systeme selbst zusätzliche Referenzen
singleton = Singleton(100)
das Löschen. So entfernt del sys.mo-
del Singleton auf Objekte erzeugen.
dules['singleton_module'] das Modul
# pylint: disable=unused-argument
def create_only_one():
if '_inst' not in vars(cls):
"""Test singleton.
cls._inst = super().__new__(cls)
"""
return cls._inst
print('singleton 1:', OnlyOne(10))
print('singleton 2:', OnlyOne(20))
class OnlyOne(Singleton):
"""Test singleton. ### Aufruf ###
Each instance sets a new value. create_only_one()
""" singleton 1: 4815132688: OnlyOne(value=10)
def __init__(self, value): singleton 2: 4815132688: OnlyOne(value=20)
12.2023 www.linux-magazin.de 25
Titelthema Singleton mit Python
Methode __init__, die es bei den meis- __new__ als erstes Argument cls, also frei wählen könnte, haben sich self und
ten Klassen gibt, kommt __new__ sel- die Klasse. Während __init__ nichts cls als Konvention etabliert.
tener vor. Während __init__ als erstes (None) zurückgeben darf, muss __new__ Listing 2 zeigt eine Singleton-Umset-
Argument self übergeben bekommt, die neue Instanz zurückgeben. Obwohl zung mit __new__. Entscheidend ist hier
also eine Referenz auf die Instanz, erhält man die Namen für die Argumente auch cls._inst, das eine Referenz auf die ein-
zige Instanz enthält. Existiert cls._inst
noch nicht, kommt __new__ der Eltern-
Listing 3: Singleton mit initialen Argumenten klasse zum Zug und erzeugt eine Instanz.
class OnlyOneInitOnce(OnlyOne): Beim nächsten Aufruf von __new__ exis-
tiert cls._inst bereits, sodass aus dem
"""Test singleton.
Aufruf von cls._inst_ als Ergebnis die
Subsequent instances cannot set a new value. bereits bestehende Instanz resultiert.
""" Die Klasse OnlyOne erbt von der
_first = True Singleton-Klasse und implementiert ihr
spezifisches Verhalten, das im Beispiel
def __init__(self, value): minimal ausfällt: Die Instanz speichert
nur einen Wert mit dem generischen
if self.__class__._first:
Namen value. Wichtig ist die spezielle
super().__init__(value)
Methode __repr__, die eine Text-Re-
self.__class__._first = False präsentation einer Instanz zurückgibt.
Idealerweise sollte dieser String mit
def create_only_one_init_once(): eval(object_string) wieder eine In-
"""Test singleton that can only be initialized with `value` once. stanz erzeugen. Hier enthält der Objekt-
String zusätzlich noch die Objekt-ID, um
"""
die Objekte einfacher auseinanderhalten
print('singleton init once 1:', OnlyOneInitOnce(10))
zu können. In Produktionscode ist das
print('singleton init once 2:', OnlyOneInitOnce(20)) typischerweise nicht so.
Die Funktion create_only_one in Lis-
### Aufruf ### ting 2 erzeugt zwei Instanzen mit unter-
create_only_one_init_once() schiedlichen Anfangswerten und zeigt
deren String-Repräsentation an. Die
singleton init once 1: 4920752400: OnlyOneInitOnce(value=10)
identische Zahl für die ID beweist, dass
singleton init once 2: 4920752400: OnlyOneInitOnce(value=10)
es sich bei den vermeintlich zwei Instan-
zen eigentlich nur um eine handelt. Das
ist das Verhalten eines Singletons.
Listing 4: Variation zu Listing 3 Durch die zweite Instanziierung mit
SENTINEL = object()
einem anderen Anfangswert ändert sich
auch der Wert von value in der ersten
Instanz, da es sich ja um zwei Referenzen
class OnlyOneInitOnceRaise(OnlyOne): auf dieselbe Instanz handelt. Das kann
"""Test singleton. durchaus das gewünschte Verhalten sein.
Subsequent instances cannot set a new value. Es ergibt sich aber ein gewisser Geister-
effekt, da die Änderung von value in der
Values in `__init__` raise an exception
ersten Instanz nicht offensichtlich ist.
"""
Listing 3 zeigt eine Variation, bei der
_first = True man den Wert von value nur bei der
ersten Instanziierung setzen kann. Beim
def __init__(self, value=SENTINEL): zweiten Mal ignoriert der Code in
__init__ den Wert von value. Damit
if self.__class__._first:
fällt der Geistereffekt der indirekten Än-
value = None if value is SENTINEL else value
derung von value in der ersten Instanz
super().__init__(value) weg. Hier steuert das Klassenattribut
self.__class__._first = False _first, ob value eine Wirkung hat.
else: Jetzt hat allerdings der Wert von value
bei der zweiten Instanziierung keine Wir-
if value is not SENTINEL:
kung – ein möglicherweise unerwünsch-
raise TypeError('cannot use arguments in `__init__`')
tes Verhalten. Listing 4 zeigt eine weitere
26 www.linux-magazin.de 12.2023
Basics.
Variation, die Werte für value nur bei der den Fällen (a) „ein Argument an __init__
Projekte.
ersten Instanziierung erlaubt. Ab der
zweiten Instanziierung wirft die Metho-
de __init__ eine Ausnahme, wenn man
übergeben“ und (b) „kein Argument
übergeben“ zu unterscheiden, ist ein
eindeutiges Objekt nötig. Es hat hier den
Ideen.
ihr ein Argument übergibt. Um zwischen Namen SENTINEL und muss außerhalb
Know-how.
Listing 4: Variation zu Listing 3 (Fortsetzung von vorheriger Seite)
def create_only_one_init_once_raise():
Jet z t
testen!
"""Test singleton that can only be initialized with `value` once.
Raises exception if `value` is given the second time.
"""
30% sparen
print('singleton init once raise 1:', OnlyOneInitOnceRaise(10))
print('singleton init once raise 2:', OnlyOneInitOnceRaise())
try:
OnlyOneInitOnceRaise(20)
except TypeError as err:
nur 8,00 €
print(err)
Jetzt
cls._singleton_internals_defaults.copy())
if hasattr(cls, '_overide_singleton_internals'):
cls._singleton_internals.update(
cls._overide_singleton_internals)
if cls._singleton_internals['first']: bestellen!
• Tel.: 0911 / 993 990 98
• E-Mail: [email protected]
Oder bequem online bestellen unter
12.2023 www.linux-magazin.de
shop.raspberry-pi-geek.de
Titelthema Singleton mit Python
der Klasse definiert sein, damit es zur spezifischen, also der erbenden Klasse. Klassen, die diese neuen Metaklassen be-
Klassendefinitionszeit verfügbar ist. Per Listing 5 zeigt eine alternative Implemen- erben, verhalten sich wieder auf eigene
Konvention bestehen globale Variablen- tierung mit einer Metaklasse. Sie fällt Weise. Im Unterschied zu Methoden in
namen nur aus Großbuchstaben. wesentlich komplexer aus als die Lösung Klassen, die als erstes Argument die In-
in Listing 4. Der große Vorteil besteht in stanz erhalten, bekommen Metaklassen
der Isolierung der gesamten Singleton- als erstes Argument die Klasse. Per Kon-
Singleton mit Metaklasse
Funktionalität in der Metaklasse. vention kommt für das erste Argument
Die Implementierung in Listing 4 ver- Metaklassen verhalten sich zu Klassen bei Klassenmethoden der Name self
schiebt einen großen Teil der Singleton- wie Klassen zu Instanzen. Alle Klassen zum Einsatz, bei Metaklassenmethoden
Funktionalität in die erbende Klasse. haben standardmäßig die Metaklasse dagegen der Name cls.
Damit vermischt sich die Singleton-Funk- type. Indem Klassen von type erben, las- Die spezielle Methode __call__ einer
tionalität mit der für die Anwendung sen sich eigene Metaklassen erzeugen. Metaklasse ruft Python auf, wenn die
runden Klammern nach dem Klassen-
namen erscheinen. Somit bewirkt Class-
Listing 5: Metaklasse für Singleton (Fortsetzung von vorheriger Seite) Name(*args, **kwargs) den Aufruf
cls._singleton_internals['first'] = False __call__(cls, *args, **kwargs) der
Metaklasse von ClassName. Durch die
instance = object.__new__(cls)
Implementierung von __call__ der
instance.__init__(*args, **kwargs) Metaklasse lässt sich der Prozess der Er-
cls._singleton_internals['instance'] = instance zeugung einer Klasseninstanz komplett
else: anpassen. Listing 5 zeigt diese Anpas-
if (not cls._singleton_internals['new_args_allowed'] and sung, um denselben Effekt wie den von
(args or kwargs)): Listing 4 zu erreichen.
Das Klassenattribut _singleton_inter-
raise TypeError('cannot use arguments in `__init__`')
nals ist ein Dictionary, das alle für die
return cls._singleton_internals['instance']
Steuerung der Instanziierung nötigen
Informationen enthält. Wenn die Klasse
dieses Attribut noch nicht besitzt, erhält
Listing 6: Singleton mit Metaklasse sie eine Kopie des Dictionarys _single-
ton_internals_defaults. Verfügt die
class Singleton(metaclass=MetaSingleton):
Klasse über das Attribut _overide_sing-
"""Singleton with metaclass."""
leton_internals, überschreiben dessen
def __init__(self, value=None): Werte die Vorgabewerte.
self.value = value Bei der ersten Instanziierung, wenn also
cls._singleton_internals['first']
def __repr__(self):
den Wert True hat, erzeugt die Methode
eine neue Instanz und speichert sie unter
return f'{id(self)}: {self.__class__.__name__}(value={self.
dem Schlüssel instance in _single-
value!r})'
ton_internals. Je nach Einstellung von
new_args_allowed wirft die Methode
def create_singleton(): eine Ausnahme, wenn sie ab dem zwei-
"""Create instances of Singleton.""" ten Aufruf Argumente erhält. Am Ende
gibt sie die gespeicherte Instanz zurück.
print(Singleton(10))
Die Nutzung dieser Metaklasse zeigt
print(Singleton())
Listing 6. Hier legt class Singleton(me-
try: taclass=MetaSingleton) die Metaklasse
Singleton(20) fest. Ansonsten gibt es in der Klasse kei-
except TypeError as err: nen Code, der sich mit der Singleton-
Funktionalität beschäftigt. Das Ergebnis
print(err)
entspricht dem aus Listing 4.
Listing 7 zeigt die Anpassung des Ver-
### Aufruf ### haltens mithilfe von _overide_single-
create_singleton() ton_internals. Hier erlaubt new_args_
5088426896: Singleton(value=10) allowed==True Argumente auch ab
der zweiten Instanziierung. Erneut über-
5088426896: Singleton(value=10)
nimmt die Metaklasse die gesamte Sing-
cannot use arguments in `__init__`
leton-Funktionalität.
28 www.linux-magazin.de 12.2023
Singleton mit Python Titelthema
Das Borg-Pattern zeichen eine neue Referenz auf das Ob- lässt es sich mit wenig Aufwand als ein
jekt rechts vom Gleichheitszeichen. Damit Python-Modul oder stattdessen als Meta-
Alex Martelli argumentiert 1, nicht die teilen sich alle Instanzen __dict__, das klasse mit vollständiger Kontrolle über
Identität der Instanzen setze die ge- alle Instanzattribute enthält. Die Funktio- das Klassenverhalten implementieren.
wünschte Singleton-Funktionalität am nalität in Listing 8 entspricht bis auf die Python ist äußerst dynamisch und er-
besten um, sondern der Shared State verschiedenen Objekt-IDs der in Listing 2. laubt tiefgehende Eingriffe in das Pro-
zwischen Instanzen: Die Instanzen sind Für das Borg-Pattern kann auch eine grammverhalten zur Laufzeit, die bei an-
unterschiedliche Objekte, verhalten sich Metaklasse zum Einsatz kommen. Der deren Sprachen eher zur Compile-Zeit
aber identisch. Angelehnt an die Mensch- Code in Listing 6 bildet dazu eine gute erfolgen. Zudem eignet sich die Sprache
Maschine-Hybriden aus Star Trek, die alle Grundlage. für Anwender mit unterschiedlichen Pro-
miteinander ihre Gedanken teilen, hat er grammiererfahrungen: Experten können
für das Muster den Namen Borg gewählt. komplexe Implementierungen mit Meta-
Fazit
Listing 8 zeigt eine Implementierung. klassen umsetzen. (jcb/jlu) Ӻ
Wichtig ist die Zuweisung von _shared_ Python bietet mehrere Möglichkeiten,
state zu __dict__ aller Instanzen. Eine das Singleton-Pattern umzusetzen. Je
Zuweisung erzeugt links vom Gleichheits- nach Anspruch und Anwendungsfall Weitere Infos und
interessante Links
www.lm-online.de/qr/49533
Listing 7: Singleton mit Metaklasse und Option
class SingletonWithNewArgs(Singleton):
"""Singleton with metaclass, no arguments to further instantiation
Der Autor
allowed.
Dr.-Ing. Mike Müller, Geschäftsführer der
"""
Python Academy 1 und erfahrener Python-
_overide_singleton_internals = {'new_args_allowed': True} Trainer, nutzt Python als bevorzugte Pro-
grammiersprache, seit er es 1999 entdeckte.
def create_singleton_with_new_args(): Er ist erster Vorstandsvorsitzender des
Python Software Verband e.V. 1 und war
"""Create instances of SingletonWithNewArgs."""
Chairman der EuroPython 2014 in Berlin.
print(SingletonWithNewArgs(10)) Auch die EuroSciPy 2008 und 2009 sowie
print(SingletonWithNewArgs()) die PyCon DE 2011 und 2012 hat er erfolg-
print(SingletonWithNewArgs(20)) reich geleitet.
Listing 8: Borg
class Borg: return f'{id(self)} {self.__class__.__name__}
"""All instances share state. (value={self.value!r})'
"""
_shared_state = {} def create_borgs():
"""Make instance.
def __new__(cls, *args, **kwargs): """
instance = super().__new__(cls) borg1 = AllTheSame(10)
instance.__dict__ = cls._shared_state print('borg1:', borg1)
return instance borg2 = AllTheSame(20)
print('borg2:', borg2)
class AllTheSame(Borg): print('borg1:', borg1)
"""Test borg.
""" ### Aufruf ###
def __init__(self, value=None): create_borgs()
self.value = value borg1: 6008347600 AllTheSame(value=10)
borg2: 6008346320 AllTheSame(value=20)
def __repr__(self): borg1: 6008347600 AllTheSame(value=20)
12.2023 www.linux-magazin.de 29
sp Ravlo / 123RF.com
API-Design mit Patterns
Kasper
Auf Antwort warten
© Ka
Auch beim API-Design lohnen sich Patterns, damit wartungs- und zukunftssichere Systeme
entstehen. Mike Schilli widmet sich Anfragen, die von Natur aus länger dauern. Mike Schilli
Man sollte nicht glauben, dass das The- stimmten Implementierungen vorab Schema F, die Dokumentation zwar im
ma API Design Patterns so viel hergibt: kennt, kann ein wartungsfreundliches Augenwinkel, aber eigentlich unnötig.
Schließlich hat sich REST zum Anlegen, und zukunftssicheres System bauen.
Auflisten, Modifizieren oder Löschen von Jedenfalls gilt es, sich beim Entwurf
Baldrian für Ungeduldige
Ressourcen auf der Server-Seite seit Jahr- von APIs ähnlich wie beim Design von
zehnten als Standard etabliert. Aber es Applikationscode das geplante Endpro- Ein interessantes Design Pattern für APIs
gibt ein dickes Buch zum Thema 1, das dukt aus der Sicht zukünftiger Anwender ist das für Server-Antworten, die etwas
ausführlich, wenngleich auch für meinen vorzustellen. Wird es so funktionieren, mehr Zeit benötigen. Normale Requests
Geschmack etwas zu weitschweifig, die oder warten böse Überraschungen beim verarbeitet der Server so schnell wie
Vor- und Nachteile bestimmter Design- ersten Ausprobieren? möglich, doch manche brauchen von
entscheidungen beleuchtet. Natur aus länger. Verlangt ein User zum
Ist es besser, den Zugriff auf zwei ver- Beispiel Akteneinsicht in seine Google-
Doku im Augenwinkel
wandte Ressourcen einheitlich oder durch Daten, lässt sich der Riese ein paar Tage
getrennte Aufrufe zu implementieren? Bei APIs besteht die Zielgruppe häufig Zeit, bis die Antwort als Datei vorliegt.
Welche Schnittstelle bevorzugt ein Client, aus Entwicklern, die schon mit etlichen Eine natürliche, aber voreilige Design-
der lange laufende Server-Prozesse per Webschnittstellen Erfahrung gesammelt Entscheidung wäre es, Requests einfach
API kontrollieren möchte? Was spricht für haben und einfach annehmen, dass sofort zu beantworten, wenn die Ant-
und gegen persistente Datenhaltung? bestimmte Aktionen immer auf gleiche wort vorliegt. Das bringt aber API-User in
Wie sollte der Server längliche Ergebnis- Weise ablaufen: neue Ressourcen erzeu- die Bredouille: Wie lange soll der Client
se scheibchenweise an den Client über- gen, bestehende auflisten, modifizieren warten, bis die Antwort eintrifft – zehn
mitteln? All dies will vor dem Schreiben oder löschen. Idealerweise schreiben Sekunden, eine Minute, eine Stunde? Zu
der ersten Codezeile überlegt sein, denn Anwender die Schnittstelle ihres Appli- keiner Zeit kann er sich sicher sein, dass
nur wer die Vor- und Nachteile von be- kationscodes zur Web-API einfach nach der Server noch an der Antwort arbeitet.
30 www.linux-magazin.de 12.2023
API Design Patterns Titelthema
while True:
res_url=f"{BASE_URL}/result/{id}"
logging.info(res_url)
response=requests.get(res_url)
logging.info(response.json())
if response.json()["ready"]:
break
time.sleep(10)
2 Die Ausgabe des Clients.
12.2023 www.linux-magazin.de 31
Titelthema API Design Patterns
Listing 3: API-Server
01 #!/usr/bin/env python3 18 def start_task() -> dict[str, object]:
02 from flask import Flask 19 result = run_speedtest.delay()
03 from celery import Celery, Task 20 return {"result_id": result.id}
04 import time 21
05 import speedtest 22 @app.get("/result/<id>")
06
23 def task_result(id: str) -> dict[str, object]:
07 app = Flask(__name__)
24 result = celery_app.AsyncResult(id)
08 celery_app = Celery(app.name, broker="redis://
25 return {
localhost", backend="redis://localhost")
26 "ready": result.ready(),
09 celery_app.conf.update(app.config)
10 27 "successful": result.successful(),
16 32 if __name__ == '__main__':
17 @app.route('/start', methods=['POST']) 33 app.run(debug=True, host='0.0.0.0', port=8001)
32 www.linux-magazin.de 12.2023
API Design Patterns Titelthema
MAGAZIN 33 % Rabatt
TESTEN SIE JETZT 3 AUSGABEN FÜR 21,00 €
OHNE DVD 17,00 €
-GUT SCHEIN
5 EURO
wacht sie und speichert die Ergebnisse in Listing 4 deshalb eine Datei startup.sh. tion -p8001:8001 die beiden Welten beim
einer Redis-NoSQL-Datenbank. Die muss Sie feuert das Duo mittels & im Hinter- Aufruf von docker run. Die Option --rm
ebenfalls als Server-Prozess laufen, damit grund ab, bevor es ans Starten des Py- räumt den Container ab, nachdem der
das ganze System funktioniert. thon-Webservers in api-server.py geht. User mit [Strg]+[C] abgebrochen hat.
Zur Vermeidung von Installationsmüll Das Makefile in Listing 5 definiert das Wichtig ist die Option host='0.0.0.0'
liegt die Testumgebung in einem Docker- Target docker, um das Docker-Image aus des API-Servers aus Listing 3. Sie veran-
Container gemäß dem Dockerfile aus dem Dockerfile (Listing 2) zusammen- lasst den Server dazu, sich mit allen Inter-
Listing 2. Naturgemäß läuft in einem zubauen. Das Image erhält dabei das faces des Containers zu verbinden. Nur so
Container jedoch immer nur ein einziger Tag api-patterns, und das Target start kann dieser die Port-Öffnung zum kon-
Prozess im Vordergrund, und das soll der startet mit docker run einen auf dem trollierenden Host durchstoßen.
API-Server von Listing 3 sein. Für die bei- Docker-Image basierenden Container.
den Begleitprozesse, den Celery-Worker
Dienstags Müllabfuhr
sowie die Redis-Datenbank, definiert
Vom Urknall zum Zerfall
In dieser Version hält der Redis-Server als
Die vermischten Aus- Backend einmal gewonnene Ergebnisse
gaben der insgesamt dauerhaft vor. Das würde bei einem öf-
drei verschiedenen fentlich verfügbaren Dienst schnell dazu
Server nach dem Star- führen, dass veraltete Daten Platz ver-
ten des Containers schwenden. Deswegen muss sich ein
zeigt Abbildung .5 robustes System selbst ums Aufräumen
Nach einigen Sekun- kümmern. Die dazu aktivierte Methode
den ist alles betriebs- hängt von der Anwendung ab. In unse-
bereit, und die Anzeige rem Fall könnte ein Cronjob alle fünf Mi-
verharrt mit dem API- nuten anspringen und Einträge löschen,
Server im Vordergrund. die älter als zehn Minuten sind. Wenn
Nun darf der Client Clients die Ergebnisse ihrer Messungen
auf dem Host seine bis dahin nicht abgeholt haben, brauchen
Requests absetzen. sie sie wohl auch nicht mehr.
Wer mag, kann auch Läuft der API-Service auf mehreren In-
mit einem Webbrowser stanzen, kommen Client-Anfragen nicht
auf der API herumfuhr- immer beim selben Server an, und das
werken. Der Container Backend muss von allen Instanzen aus
läuft, bis ein [Strg]+[C] erreichbar sein. Nur so kann ein weiterer
von der Konsole ihn Bearbeiter den von einem anderen Server
herunterfährt und die gestarteten Task über dessen ID finden
Begleitprozesse wegen und den Status melden. (uba/jlu) Ӻ
des zerfallenden Uni-
versums mit in den
Orkus reißt. Listing 4: Startup-Skript
Der API-Server #!/bin/bash
lauscht im Container
/usr/bin/redis-server &
auf Port 8001. Damit
celery -A api-server.celery_app
er für den Client auch
worker --loglevel=info &
außerhalb des Con-
./api-server.py
tainers, also auf dem
Host, zur Verfügung
5 Der Container startet mit drei Servern. steht, verbindet die Op-
Dateien zum Artikel
herunterladen unter
Listing 5: Makefile
www.lm-online.de/dl/48773
DOCKER_TAG=api-patterns
start:
docker run -v`pwd`:/build -p8001:8001 -it --rm $(DOCKER_TAG)
./startup.sh
Weitere Infos und
interessante Links
docker:
www.lm-online.de/qr/48773
docker build -t $(DOCKER_TAG) .
34 www.linux-magazin.de 12.2023
Einführung Software
Neben dem Linux-Magazin ohne DVD als Unterbau und ist auf den Betrieb von Software und Tools
gibt es die DELUG-Ausgabe mit einem Wechselmedien aus zugeschnitten.
speziell zusammengestellten Datenträger. Beim Download von sehr vielen oder
Gebündelt unter einer HTML-Oberfläche sehr großen Dateien helfen die in der Bit-
Seite B: Froscon 2023 (Teil 2)
enthält er Programme und Tools, die wir parade vorgestellten Tools Gabut Down-
in der jeweiligen Ausgabe testen, sowie Die Rückseite der DVD hält ein HTML- load Manager, KGet, Motrix, Persepolis
nicht im Heft besprochene Software, die Menü mit zahlreichen weiteren Inhalten Download Manager und Xtreme Down-
die Redaktion besonders empfiehlt. bereit. Darunter fallen zunächst 19 Vor- load Manager. Java-Programmierer be-
träge vom zweiten Veranstaltungstag kommen die neue Version 2023-09 der
der Froscon 2023, die die Videos aus der Entwicklungsumgebung Eclipse an die
Seite A: LMDE 6
letzten Ausgabe ergänzen. Die Referen- Hand. Sie unterstützt allerdings noch
Auf Seite A der DVD offeriert Ihnen ein ten beschäftigen sich unter anderem mit nicht die neuen Funktionen des aktu-
HTML-Menü drei aktuelle Distributionen. moderner Webentwicklung in Python, ellen OpenJDK 21, das ebenfalls auf der
Den Anfang macht die schlanke und der Datenbank Firebird, Open-Source- DVD auf seinen Einsatz wartet. Mehr
flexible Server-Distribution DietPi v8.22 Software in der öffentlichen Verwaltung, zum neuen Java 21 lesen Sie ab Seite 74.
für den Raspberry Pi und x86-Rechner. Containern und Kubernetes im Embed- Bei Interesse betreiben Sie außerdem
Als Desktop-System empfiehlt sich die ded-Umfeld, den Umgang mit Legacy- alte MS-DOS- und Windows-Versionen
Debian Edition von Linux Mint, die in der Code und schließlich noch mit Dingen, im Emulator 86Box, starten mit Amazon
1
brandneuen Version 6 vorliegt . Por- für die man besser keine Tabellenkal- Firecracker gertenschlanke virtuelle
teus 5.01 schließlich nutzt Slackware 15 kulation verwenden sollte. Maschinen, speichern wichtige Informa-
tionen in PostgreSQL 16, automatisieren
Aufgaben mit Rundeck, lassen in Jupyter
Fünf Slack-Alternativen
Inhalt Notebooks untergebrachten Javascript-
Wollen Sie Absprachen im Team lieber Code von der Laufzeitumgebung Deno
36 Tooltipps
nicht über den kommerziellen Cloud- ausführen, schreiben Server-Programme
Sechs CLI-Werkzeuge im Kurztest Dienst Slack abwickeln, finden Sie auf in Go, lösen mit NumPy mathematische
38 Bitparade der DVD gleich fünf quelloffene Alter- Aufgaben in Python oder vertiefen sich
nativen: den IRC-Server InspIRCd, Matrix, in Software zu den weiteren Artikeln aus
Fünf grafische Download-Manager
Mattermost, Rocket.Chat und Zulip. diesem Heft. (jlu) Ӻ
12.2023 www.linux-magazin.de 35
Software Tooltipps
Viele Anwender verwenden GNU Cat zur Das C-basierte Werkzeug Cppcheck über- Die Namensauflösung über hosts-Datei-
Konsolenausgabe von Textdateien. Die prüft C/C++-Code auf Fehler und unsau- en bietet in kleinen Netzen eine simple
Rust-basierte Alternative Bat liefert eine bere Codestrukturen. Viele Distributionen Alternative zum Betrieb eines komplexen
optisch aufbereitete Ausgabe. Die meis- liefern ältere Versionen des Tools aus, DNS-Servers. Das Bearbeiten der /etc/
ten Distros enthalten nur ältere Versio- das aktuelle Release müssen Sie selbst hosts per Editor birgt aber auch Fehler-
nen, Binärpakete des aktuellen Releases kompilieren. Um eine oder mehrere quellen, die das Go-Tool Goodhosts zu
finden Sie auf Github. Bat 0.23 be- Quelldateien auf Korrektheit zu prüfen, umgehen versucht. Fertige Binärpakete
herrscht eine neue Notation für nicht geben Sie sie beim Aufruf als Parameter finden Sie bei Github.
druckbare Zeichen und versteht mit -S an. Geben Sie stattdessen einen Ordner- Für seine Arbeit benötigt Goodhosts
ein Alias für --wrap=never. namen an, nimmt sich Cppcheck den administrative Rechte. Ohne Parameter
Wie bei Cat übergeben Sie die auszu- kompletten dahinterliegenden Verzeich- aufgerufen, gibt es den aktuellen Inhalt
gebende Datei als Aufrufparameter. Bat nisbaum vor und arbeitet alle enthalte- der /etc/hosts aus. Neue Einträge legen
erkennt die verwendete Programmier- nen C- und C++-Dateien ab. Eine Zusam- Sie mit dem Unterbefehl add an, gefolgt
oder Satzsprache selbst und wählt ein menfassung des Ergebnisses gibt das von der IP-Adresse und dem oder den
geeignetes Highlighting. Eine Liste aller Tool in der Konsole aus, mit --xml erfolgt zugehörigen Host-Namen. Mit check und
gut 170 unterstützten Sprachen liefert die Ausgabe auf Wunsch auch im XML- remove suchen beziehungsweise entfer-
die Option -L, mit der Sie bei Bedarf Format. Einen detaillierten Report erhal- nen Sie Einträge. Die Unterbefehle back-
auch ein bestimmtes Highlighting fest ten Sie mit der Option --checkers-re- up und restore ermöglichen das Anlegen
vorgeben. Anders als Cat besitzt Bat ei- port, hinter der Sie den Namen der Datei und Wiedereinspielen von Sicherungen.
nen integrierten Pager, der ein beque- angeben, in der Cppcheck das Ergebnis Beim Bearbeiten von Einträgen mit dem
mes Navigieren durch den Inhalt erlaubt. ablegen soll. Das Tool nimmt eine Viel- Unterbefehl edit öffnet Goodhosts le-
Er lässt sich mit -P aber auch deaktivie- zahl von Prüfungen vor. So untersucht es diglich die hosts-Datei im Standardedi-
ren. Nicht druckbare Zeichen blendet Bat zum Beispiel den Codestil und bemängelt tor des Systems. Generell ist das Tool
aus, sofern Sie sie nicht mit -A explizit ungenutzte Funktionen. Mit dem Para- nicht auf die Arbeit mit der /etc/hosts
einblenden lassen. Das Tool nummeriert meter --enable beschränken Sie die Prü- beschränkt: Mit dem Parameter --file
alle Ausgabezeilen. Mit --style wählen fung bei Bedarf auf bestimmte Bereiche, können Sie damit auch andere Dateien
Sie dabei aus knapp einem Dutzend plattformspezifische Tests stoßen Sie mit pflegen, die einen ähnlichen Aufbau wie
verschiedener Formatierungen, mit -p --plattform an. Standardmäßig prüft eine hosts-Datei aufweisen.
schalten Sie die Nummerierung ab. Da- das Werkzeug, ob der Code C11- respek- MMMMm Goodhosts bietet vor allem
neben bietet Bat rund 20 Themes, mit tive C++20-kompatibel ist. Die Prüfung Einsteigern die Sicherheit, beim Bearbei-
denen Sie das Erscheinungsbild nach auf ältere Versionen erzwingen Sie ge- ten der /etc/hosts keine gravierenden
Wunsch anpassen. Eine Liste aller ver- gebenenfalls mit dem Parameter --std. Fehler zu machen, kann aber durchaus
fügbaren Varianten liefert --list-the- MMMMM Cppcheck bietet umfang- auch erfahrenen Anwendern die Arbeit
mes, das Wunsch-Theme geben Sie hinter reiche Möglichkeiten, um C/C++-Code erleichtern. Es erledigt seine Aufgabe
--theme an. auf Fehlerquellen zu prüfen. Einige Dis- tadellos, lediglich das Fehlen einer Man-
MMMMM Wer eine schicke Alternative tributionen liefern Zusatz-Tools wie gra- page fällt unangenehm auf. Immerhin
zu Cat sucht, wird bei Bat fündig. Ӻ fische Frontends mit. Ӻ gibt es eine Online-Hilfe (-h). Ӻ
36 www.linux-magazin.de 12.2023
Tooltipps Software
Sed, der Standard-Stream-Editor auf Searxng, die Weiterführung des im Sep- SSH unterstützt seit Langem das Tunneln
Unix-Systemen, stößt bei Formaten wie tember 2023 eingestellt Searx-Projekts, von Verbindungen. Wollen Sie nicht jedes
JSON an seine Grenzen. Hier springt das streut Internet-Suchanfragen über meh- Mal alle Verbindungsparameter manuell
in C implementierte Jq in die Bresche. rere Suchmaschinen, um die Privacy zu eingeben, können Sie auf das Go-basierte
Das aktuelle Release 1.7 liegt auf Github verbessern. Während sich Searx in den Werkzeug Ssh-tunnel-manager zurück-
in Form fertiger Binärpakete für viele Repos der meisten Distributionen findet, greifen. Release- oder Binär-Pakete gibt
Plattformen und Betriebssysteme vor. gibt es von Searxng bisher nur eine Ent- es noch nicht; Sie müssen das Repository
Jq erwartet die zu verarbeitenden wicklerversion, die Sie via git clone be- klonen und den Code selbst kompilieren.
Daten als Datenstrom über die Standard- ziehen, per make install in einer virtu- Nach der Installation legen Sie mit add
eingabe, wobei Leerzeichen als Trenner ellen Entwicklungsumgebung einrichten eine neue Konfiguration an, die das Tool
fungieren. Als Parameter geben Sie den und mit make run lokal starten. als JSON-Datei im Ordner $HOME/.ssh-
Filterausdruck an, den Jq auf die einge- Das Werkzeug prüft die Verbindung zu tunnel-manager/ ablegt. Für jeden Tun-
henden Daten anwenden soll. Die durch- den genutzten Suchportalen und öffnet nel geben Sie einen eindeutigen Namen,
laufen dann sequenziell alle vorgegebe- einen Browser mit der Suchoberfläche, den FQDN des SSH-Gateways, den ver-
nen Filter. Einige Parameter für Jq können die an die frühe Google-Suchplattform wendeten Gateway-Benutzernamen
Steuerelemente enthalten, die manche erinnert. Geben Sie einen Suchbegriff ein, sowie FQDN und Port des Ziels an. Die
Shell als eigene Meta-Elemente interpre- ermittelt Searxng das Ergebnis auf ver- Authentifizierung erfolgt per passwort-
tiert. Die Jq-Entwickler empfehlen da- schiedenen Plattformen und gibt es ge- losem SSH-Key, das Tool unterstützt we-
rum, Parameter grundsätzlich in einfache bündelt aus. Dabei ergänzt es jeden Tref- der passwortgeschützte Schlüssel noch
Anführungszeichen zu setzen. Standard- fer um die Angabe, über welche Such- herkömmliche Credentials. Mit list auf-
mäßig interpretiert Jq eingehende JSON- maschinen es den jeweiligen Link gefun- gerufen, zeigt Ssh-tunnel-manager alle
Objekte sofort bei Eintreffen und filtert den hat. Zudem bietet es eine Reihe al- konfigurierten Verbindungen an, nicht
sie. Soll es seine Arbeit erst beginnen, ternativer Suchvorschläge an. Im Menü mehr benötigte Einträge entfernen Sie
wenn alle Daten vorliegen, geben Sie oben rechts treffen Sie Einstellungen zum mit remove. Eine Verbindung starten Sie
den Schalter -s an. Im Gegensatz dazu Erscheinungsbild sowie zur Privatsphäre mit dem Unterbefehl tunnel, gefolgt
interpretiert Jq mit -R alle Daten im Roh- und legen fest, welche Suchplattformen vom Verbindungsnamen. Über weitere
format und filtert sie zeilenweise. Das Searxng bei einer Anfrage kontaktiert. Da- Parameter geben Sie den Port an, auf
Resultat der Verarbeitung landet in der bei können Sie getrennt angeben, welche dem die Zielmaschine eingehende Ver-
Standardausgabe, wobei optionale Para- Plattformen das Tool für allgemeine, Bild-, bindungen erwartet. Lauscht der SSH-
meter für die Formatierung und farbliche Video- oder Dateisuchen nutzt. So befragt Dienst des Gateway-Servers nicht auf
Aufbereitung sorgen. Eine Ausgabe im es beispielsweise bei der Videosuche Port 22, lässt sich Ssh-tunnel-manager
ASCII-Format gelingt mit -a. auch CCC-TV, Peertube und die öffent- nicht verwenden, die Angabe eines alter-
MMMMM Die aktuelle Version ist das lich-rechtlichen Mediatheken. nativen Ports ist nicht vorgesehen.
erste Major-Release des Projekts seit fünf MMMMm Derzeit eignet sich Searxng MMMmm Der noch junge Ssh-tunnel-
Jahren. Jq 1.7 korrigiert zahlreiche Fehler eher für experimentierfreudige Anwen- manager ist ein interessantes Tool mit
und poliert viele Optionen auf. Ein Up- der. Es lohnt sich jedoch durchaus, das Potenzial, es fehlen aber noch grundle-
date lohnt sich also. Ӻ Projekt im Auge zu behalten. Ӻ gende Funktionen. (Uwe Vollbracht/jlu) Ӻ
12.2023 www.linux-magazin.de 37
y S
valnyuk
© Zavalnyuk r ey / 123RF.com
Serg
38 www.linux-magazin.de 12.2023
Bitparade Software
12.2023 www.linux-magazin.de 39
Software Bitparade
40 www.linux-magazin.de 12.2023
Bitparade Software
Bedienung
Nach dem Start der Anwendung öffnet
sich das modern gestaltete Programm-
fenster mit drei Bereichen. In einer dun-
kel eingefärbten Steuerleiste auf der lin-
ken Seite finden Sie die wichtigsten Be-
dienelemente, daneben erscheinen die
nach ihrem Status sortierten Aufgaben.
Das größte Fenstersegment ganz rechts
nehmen die tabellarisch untereinander
angeordneten Download-Listen ein.
Klicken Sie zunächst links unten auf
den Button mit den drei Schieberegler- 8 Im Infobereich präsentiert KGet alle nötigen Informationen zum aktuellen Download.
12.2023 www.linux-magazin.de 41
Software Bitparade
0 Motrix zeigt den Fortschritt der einzelnen Aufträge an. q Ausführliche Informationen gibt es im Dialog Task Details.
42 www.linux-magazin.de 12.2023
Bitparade Software
diesen Auftrag zuerst explizit mit einem gen, klicken Sie im Programmfenster auf die Anwendung dann jedoch nur solche
Klick auf das Start-Symbol in der Steuer- den Schalter mit dem Fenstersymbol. Downloads, die wir mithilfe eines direk-
leiste aktivieren. ten Links über das HTTP-Protokoll ange-
Ein von vorneherein als Single Down- stoßen hatten. Per FTP erfolgende Down-
Inkonsistenzen
load gekennzeichneter Auftrag startet loads erschienen in der Liste weiter als
stattdessen sofort nach der Übernahme. Vor allem bei der Steuerung mehrerer downloading. Erst das erneute Markieren
Im Hauptfenster reiht er sich dann rechts simultan ablaufender Aufträge zeigt Per- der FTP-Downloads und die wiederholte
in die Download-Liste ein, und Persepolis sepolis noch Inkonsistenzen. Auswahl der Pausenfunktion hielt auch
zeigt die üblichen statistischen Daten Mithilfe des Hamburger-Menüs oben diese Aufträge an.
dazu an. In einem gesonderten Fenster links in der Schalterleiste steuern Sie die Um wirklich alle aktiven Aufträge un-
können Sie außerdem nahezu in Echtzeit Oberfläche und die Aufträge. Um alle abhängig vom verwendeten Protokoll
die aktuellen Informationen zum ablau- aktivierten Downloads zu pausieren, temporär zu deaktivieren, müssen Sie im
fenden Download nachvollziehen . e nutzen Sie den Menüpunkt Download | System-Tray mit der rechten Maustaste
An dieser Stelle lassen sich auch unvoll- Stop all active downloads. Im Test stoppte auf das rote Symbol des Download-Ma-
ständige Downloads be-
enden oder pausieren.
Für jeden neuen Auftrag
öffnet Persepolis ein eige-
nes Info-Fenster, sodass
bei zahlreichen simultan
ausgeführten Downloads
schnell die Übersicht ver-
loren geht.
Um das Info-Fenster mit
den Echtzeitinformationen
zu einem Auftrag anzuzei- w Das Programmfenster des Persepolis Download Managers wirkt optisch recht altbacken.
PROFI
ITMARKT Computec Media GmbH
Anzeigenabteilung
Dr.-Mack-Str. 83
D-90762 Fürth
E-Mail: [email protected]
Print, im Marktteil
90 www.linux-magazin.de 03.2021
PROFI
IT MARKT www.it-profimarkt.de
Software Bitparade
44 www.linux-magazin.de 12.2023
Bitparade Software
Umgebung, sodass Sie dort anschlie- Programmfenster zeigt rechts in einem Steuermöglichkeiten. So ordnen Sie im
ßend einen Starter vorfinden. Die aktu- großen Segment die Menü Downloads |
ellere, bislang noch als Beta deklarierte laufenden Aufträge in- Queue and scheduler
Version 8.0.29 gibt es als DEB- und RPM- klusive ihres jeweiligen Aufträge verschiedenen
Paket sowie in einer Variante für Arch- u
Status an . Warteschlangen zu, die
Linux-basierte Distributionen 1. In den Reitern In- der Download-Manager
complete und Complete dann zeitgesteuert ab-
oberhalb der Auftrags- arbeitet. Dabei können
Nutzung
liste zeigt Xtreme Sie nicht nur Uhrzeiten
Nach dem Start öffnet die stabile Variante Download Manager i Für Videodateien hält der für das Abarbeiten der
des Programms ein kompaktes, modern die unvollständigen Xtreme Download Manager Warteschlangen ange-
gestaltetes Programmfenster, in dem beziehungsweise abge- eigene Dialoge bereit. ben, sondern auch Ter-
beim ersten Aufruf ein Hinweis zur Instal- schlossenen Aufträge minaufträge täglich wie-
lation eines Browser-Addons erscheint. an. Auf diese Weise be- derholen lassen.
Diese für diverse gängige Webbrowser halten Sie auch bei sehr vielen Aufträgen
verfügbare Erweiterung integrieren Sie stets den Überblick.
Multimediales
durch einen Klick auf die Schaltfläche Links neben dem Listenbereich finden
Install addon unterhalb des jeweiligen Sie mehrere Kategorien, in denen sich Besondere Aufmerksamkeit widmet der
Browser-Namens in Ihr System . z die heruntergeladenen Dateien ablegen Xtreme Download Manager Multimedia-
Das Addon benötigt der Download- lassen. Beim Anlegen eines neuen Down- inhalten. Videos lassen sich von allen
Manager für das Monitoring des Web- load-Auftrags wählen Sie eine der Ziel- gängigen Plattformen herunterladen,
browsers. Er erkennt darüber automa- kategorien aus, indem Sie im Feld File meist sogar in definierter Qualität. So-
tisch, wenn Inhalte aus dem Internet rechts auf das kleine Dreieck klicken und bald Sie ein Video betrachten, blendet
heruntergeladen werden sollen. Nach aus der sich daraufhin öffnenden Liste Xtreme Download Manager rechts unten
dem Einbinden des Addons öffnet der den gewünschten Zielpfad auswählen. im Bildschirm den Hinweisbalken Down-
Download-Manager sofort ein kleines In der Titelleiste befinden sich noch load Video ein. Ein Klick darauf öffnet ein
Fenster New Download mit den benötig- vier weitere Menüs. Dabei eröffnen File, Menü mit den verfügbaren Dateiformaten
ten Einstellungen für das Herunterladen Downloads und Tools einige zusätzliche und Dateigrößen für das Herunterladen.
von Inhalten, sobald Sie auf Ein Linksklick auf einen der Einträge
einer Webseite einen Down- führt in einen Download-Dialog, der im
load-Link anklicken. Feld File bereits den passenden Eintrag
Soll der Download ohne für die gewünschte Videodatei vorhält.
weitere Umstände starten, Nach einem Klick auf das Ordnersymbol
klicken Sie auf Download rechts definieren Sie den Zielpfad für die
Now unten in Fenstermitte. Videodatei. Das Auswahlfeld Convert to
Die Anwendung öffnet nun darunter gestattet es, den Clip in ein an-
ein kleines Informations- i
deres Format zu konvertieren . Passen
fenster mit statistischen An- alle Einstellungen, starten Sie das Herun-
gaben zum laufenden Auf- terladen über die Schaltfläche Download
trag. Darin können Sie den Now unten mittig im Fenster. Die Anwen-
Download bei Bedarf auch dung zeigt den Verlauf des Downloads in
pausieren. Das eigentliche u Die schlichte Auftragsliste von Xtreme DM. einem gesonderten Fenster an.
www.linux-magazin.de/subscribe
Software Bitparade
net die Software nach einem nehmen. Der Gabut Download Manager
Klick auf das vorhandene Da- richtet sich an anspruchsvollere Nutzer,
teiformat einen Einstelldialog, die Wert auf eine moderne Oberfläche
in dem Sie das Zielformat aus- mit intuitiver Bedienung legen. Motrix
wählen. Zudem lassen sich liefert ähnlich wie KGet lediglich Grund-
Parameter wie die Frame- funktionen, bietet jedoch eine sehr mo-
Rate, der verwendete Codec derne Oberfläche. Der Persepolis Down-
und dessen Qualität sowie load Manager erfüllt trotz rustikaler Op-
die Sample-Rate und das Sei- tik seine Aufgaben ebenfalls zuverlässig
tenverhältnis anpassen . o und gibt einen sehr guten Überblick
Nach einem Klick auf OK über die abzuarbeitenden Aufträge. Der
und anschließend einem Xtreme Download Manager verwöhnt
weiteren Mausklick im Kon- Power-User mit vielen Multimedia-Son-
vertierungsfenster auf den derfunktionen, die eine entsprechende
o Videodateien können Sie im Xtreme Download Schalter Convert unten rechts Browser-Erweiterung und sogar ein Kon-
Manager jederzeit nachbearbeiten. wird die Ausgangsdatei in das verterprogramm überflüssig machen.
Zielformat umgewandelt. Vor der Installation eines Download-
Managers sollten Sie sich also darüber
Nach Abschluss des Vorgangs zeigt der schlüssig werden, welche Funktionen Sie
Fazit
Xtreme Download Manager den Datei- wirklich benötigen. (jlu) Ӻ
namen und Speicherpfad an. Sie haben Unter Linux gibt es eine Vielzahl freier
nun die Möglichkeit, entweder das Video Download-Manager, die sich funktional
durch einen Klick auf den Open abzu- keineswegs vor ihren proprietären Kon- Dateien zum Artikel
spielen oder den Zielordner mit einem kurrenten für andere Betriebssysteme herunterladen unter
Klick auf Open Folder zu öffnen. verstecken müssen. Dabei decken die www.lm-online.de/dl/48774
Da die heruntergeladenen Videos auch Programme das gesamte Anwendungs-
im Hauptfenster des Download-Managers spektrum ab.
erscheinen, können Sie mit einem Rechts- KGet aus dem Fundus des KDE-Plasma-
klick auf die gewünschte Datei und an- Desktops eignet sich eher für anspruchs- Weitere Infos und
schließender Wahl der Option Convert lose Anwender, die lediglich mehrere interessante Links
das Video auch nachträglich noch in ein parallele Downloads abwickeln möchten, www.lm-online.de/qr/48774
anderes Format konvertieren. Dazu öff- ohne Sonderfunktionen in Anspruch zu
Grafische Download-Manager
Gabut DM KGet Motrix PersepolisDM Xtreme DM
Lizenz LGPLv2.1 GPLv2 MIT GPLv3 GPLv2
plattformübergreifend ԏ ԏ ԏ ԏ ԏ
Anpassung Bandbreite ԏ ԏ ԏ ԏ ԏ
Anpassung simultaner Downloads ԏ ԏ ԏ ԏ ԏ
Dateien splitten ԏ ԏ ԏ ԏ ԏ
zeitgesteuerte Downloads ԏ ԏ ԏ ԏ ԏ
Unterstützung HTTP(S)/FTP ԏ ԏ ԏ ԏ ԏ
Unterstützung Bittorrent ԏ ԏ ԏ ԏ ԏ
Unterstützung für ԏ ԏ ԏ ԏ ԏ
Video-Downloads (Streaming)
Videokonverter integriert ԏ ԏ ԏ ԏ ԏ
Pausieren von Downloads ԏ ԏ ԏ ԏ ԏ
Wiederaufnahme ԏ ԏ ԏ ԏ ԏ
abgebrochener Downloads
Download-Kategorien wählbar ԏ ԏ ԏ eingeschränkt ԏ
Log-Dateien ԏ ԏ ԏ ԏ ԏ
Schnellfunktion über System-Tray ԏ ԏ ԏ ԏ ԏ
46 www.linux-magazin.de 12.2023
LINUX-
MAGAZIN
IHRE DIGITALE AUSGABE
ÜBERALL DABEI!
shop.linuxmagazin.de
Reguläre Ausdrücke clever einsetzen (Teil 1)
Schreckgespenster
ka
©k terinamore / 123RF.com
ateri
Mit regulären Ausdrücken quälen angeblich Informatikpro- äe, äi oder ee. Bevor wir uns der Lösung
dieses Problems widmen, beleuchte ich
fessoren ihre Studenten. Tatsächlich bilden Regexe im Linux- zunächst den Sonderfall der Negation.
Möchte ich einen Ausdruck, der Vokale
Universum ein überaus mächtiges Werkzeug. Thomas Reuß explizit ausschließt, muss ich die Zeichen-
klasse negieren: [^AEIOUaeiou]. Das Zir-
kumflex-Zeichen dreht die Logik inner-
Wer programmiert, stolpert irgendwann welche Zeichen vorkommen sollen. Die halb der eckigen Klammern um. Statt nur
zwangsläufig über sie: reguläre Ausdrü- Komplexität kennt hier kaum Grenzen. auf Vokale trifft der Ausdruck jetzt auf
cke. In Programmiersprachen sind sie alles außer Vokale zu. Alternativ zur No-
praktisch allgegenwärtig, es gibt sie für tation mit eckigen Klammern definiert
Zeichenklassen
PHP, C, Python und Java. Außerdem tau- die Spezifikation für wichtige Zeichen-
chen sie unweigerlich im Kontext von Möchte ich zum Beispiel die Menge der klassen Kurzschreibweisen. So lassen sich
Unix-Urgesteinen wie Grep, Sed und Awk Vokale der deutschen Sprache als Aus- Dezimalzahlen durch \d, alphanumeri-
auf. Dabei dienen reguläre Ausdrücke druck definieren, formuliere ich sie als sche Zeichen per \w und Weißraum per
stets demselben Zweck, dem Erkennen [AEIOUaeiou]. Die eckigen Klammern \s ausdrücken 1. In den Links zum Ar-
von Mustern. Immer dann, wenn dafür kennzeichnen eine Menge, die Buchsta- tikel finden Sie die Definitionen 1.
die simple Suchen-Ersetzen-Funktion im ben stehen für die Vokale. Wenn es um
Editor nicht mehr genügt, gelten Regexe die Menge der Diphthonge geht, also der
Quantifizieren
als das Mittel der Wahl. Doppellaute au, äu, ei, eu und so weiter,
Das Schreckgespenst verliert viel von gestaltet sich die Sache schon schwieri- Mithilfe von Zeichenklassen können Sie
seinem Schrecken, sobald Sie verstanden ger. Selbstverständlich könnte ich die eine Menge von Zeichen definieren, die
haben, dass im Rahmen von regulären Doppellaute über die Zeichenklassen ab- vorhanden sein müssen. Allerdings kön-
Ausdrücken eine Reihe von Zeichen eine bilden, etwa als [aäe][eiu]. nen Sie auf diese Weise nicht angeben,
völlig neue Bedeutung bekommen. Da- Wie Sie sehen, liefert die Aneinander- ob Sie genau einen Vokal möchten oder
rüber hinaus sollten Sie begreifen, dass reihung von Zeichenklassen genau die vielleicht doch mindestens zwei. Dazu be-
reguläre Ausdrücke auf Zeichenfolgen gewünschte Funktion. Allerdings hat die nötigen Sie Quantoren. Sie ermöglichen,
operieren. Das heißt, dass Sie damit an- Sache auch einen Haken: Der Ausdruck die Anzahl der angeforderten Zeichen
hand von Zeichenmengen beziehungs- passt nicht nur auf die gewünschten festzulegen. Wollen Sie zum Beispiel eine
weise Zeichenklassen angeben, wie oft Werte au, äu, ei, eu, sondern ebenso auf ae, deutsche Postleitzahl erkennen, müssen
48 www.linux-magazin.de 12.2023
Admin-as-a-Service Sysadmin
12.2023 www.linux-magazin.de 49
Sysadmin Admin-as-a-Service
Fazit
Listing 3: CSV-Datei Mit diesem Artikel sind Sie schon ein gu-
Name;Vorname;E-Mail; tes Stück in der Welt der regulären Aus-
drücke herumgekommen und fähig, in
Eberhofer;Franz;[email protected];
Dateien nach recht komplizierten Mus-
Flötzinger;Ignaz;[email protected];
tern zu suchen. Doch damit ist die Macht
Simmerl;Max;[email protected]; der Regexe und vor allem der damit aus-
gestatteten Tools längst noch nicht aus-
geschöpft. Im zweiten Teil dieses Artikels
Listing 4: Non-greedy Regex werde ich auf fortgeschrittene Features
01 >>> import re eingehen und dabei vor allem zeigen,
02 >>> r = re.compile(r"(?:(.*);)") wie Sie damit nicht nur Inhalte finden,
sondern sie auch für umfassende Ände-
03 >>> r.findall(r"Eberhofer;Franz;franz.eberhofer@niederkaltenkirchen.
bayern;") rungen einsetzen können. (csi) Ӻ
04 ['Eberhofer;Franz;[email protected]']
05 >>> r = re.compile(r"(?:(.*?);)")
Weitere Infos und
06 >>> r.findall(r"Eberhofer;Franz;franz.eberhofer@niederkaltenkirchen.
interessante Links
bayern;")
07 ['Eberhofer', 'Franz', '[email protected]'] www.lm-online.de/qr/49801
50 www.linux-magazin.de 12.2023
LUKAS
VERONIKA
Games Group
E-Commerce
SciFi-Nerd
CosPlay-Nerd
JOHANNES
N-Zone
Nintendo-Nerd
MANUEL
PCGH
Notebook-Nerd
SASCHA
play5 | PC Games
MATTHIAS Fantasy-Nerd
PC Games
Video-Nerd
SANTI
PCGH
Video-Nerd
TANJA
52 www.linux-magazin.de 12.2023
Firecracker Sysadmin
bis heute nicht optimal gelöst oder stellen kann. Dafür sorgt
sogar noch ein echtes Hindernis für den neben dem in der VM
produktiven Betrieb dar. Zeitgleich hat vorhandenen BIOS
Firecracker den Markt nicht annähernd der Umstand, dass in
so radikal durchdrungen, wie man es sich entsprechenden In-
bei AWS erhofft haben dürfte. Das hat stanzen üblicherweise
aber nicht zwingend etwas mit der Qua- Linux-Systeme auf
lität von Firecracker zu tun, sondern eher Basis von Standard-
mit dem Umfeld und der Tatsache, dass distributionen zum
noch immer fast alle Augen auf Container Einsatz kommen. Fire-
und Kubernetes gerichtet sind. cracker geht deutlich
Höchste Zeit also für ein Update: Was schneller zu Werke
kann Firecracker mittlerweile, in welche und startet neue In-
externen Lösungen passt es sich ein, und stanzen in unter einer
© Mathis Joffre
wie integrieren umsteigewillige Adminis- Sekunde, sofern die
tratoren die Lösung? in der Instanz gestar-
tete Distribution mit-
spielt. Häufig kommt
Die Technik
Alpine Linux zum 1 Firecracker fungiert im Gespann mit KVM als Hypervisor
An dieser Stelle kann ein kurzer Exkurs Einsatz, das sich in und als leichtfüßige Alternative zu Qemu.
in die Technik hinter Firecracker nicht solchen Einsatzszena-
schaden, denn die hat sich in den ver- rien bewährt hat.
gangenen vier Jahren verändert. Zur Er- Unter der Haube folgt Firecracker da- KVM selbst ist ja zunächst einmal nur ein
innerung: Firecracker ist eine AWS-eige- bei einer nicht sonderlich komplexen Satz verschiedener Funktionen aus dem
ne Entwicklung für den Dienst Lambda. 1
Architektur . AWS hat gut daran getan, Linux-Kernel, der seinerseits auf PVOps
Der kommt laut AWS für die Verarbei- das Rad in Sachen Virtualisierung nicht fußt. Unter der Bezeichnung PVOps fir-
tung von Daten zum Einsatz und führt vollständig neu zu erfinden, sondern auf miert wiederum eine Technik, die einst
auf Zuruf bestimmte Programme aus, einige bewährte Komponenten aus der auf Geheiß von Linus Torvalds persönlich
die in einer strikt separierten Umgebung Open-Source-Welt zu setzen. Noch heute Einzug in den Linux-Kernel fand und
laufen sollen. erstaunt es viele, wenn sie hören, dass Standardfunktionen definierte, um Voll-
Es geht bei Lambda – und das wird KVM als technischer Kern für Firecracker und Paravirtualisierung zu ermöglichen.
später noch wichtig werden – also nicht dient – eben jener VMM also, den AWS Egal, ob KVM oder Xen: Wer heute unter
primär um virtuelle Instanzen für den all- selbst im Kontext klassischer Para- und Linux virtualisiert, nutzt PVOps. Amazon
gemeinen Zweck. Dafür gibt es bei AWS Vollvirtualisierung eigentlich verteufelt. hat quasi eine Abkürzung genommen,
schließlich EC2, und Lambda soll keine An dieser Stelle kommt es nun allerdings indem es keinen komplett neuen Hyper-
In-House-Konkurrenz für EC2 sein. Der auf die Details an. visor entwickelt, sondern auf KVM ge-
relevante Unterschied: Die im Rahmen
von Lambda gestarteten Instanzen über-
nehmen kurzzeitig eine einzelne Auf-
gabe, wobei der Dienst implizit annimmt,
dass er die VM nach Abwicklung eben-
dieser Aufgabe löschen kann.
Ein valides Beispiel wäre etwa eine Re-
chenaufgabe aus dem KI- oder Machine-
Learning-Kontext. Rechnet eine Anwen-
dung gerade einen Datensatz durch, be-
nötigt sie dafür Rechenleistung. Lambda
eröffnet ihr die Möglichkeit, beliebig
viele virtuelle Instanzen zu starten, um
die anstehende Aufgabe zu berechnen,
und sie danach wieder zu deaktivieren.
Dieses Beispiel zeigt, warum klassische
Vollvirtualisierung für AWS keine Option
war: Eine KVM-Qemu-Instanz benötigt
locker eine halbe Minute, um überhaupt
so weit hochzufahren, dass sie ein vom 2 Anders als etwa Qemu kommt Firecracker mit einer ReSTful-API daher, über die sich
Nutzer eingepflegtes Programm starten der Betrieb und der Start von Instanzen steuern und kontrollieren lässt.
12.2023 www.linux-magazin.de 53
Sysadmin Firecracker
54 www.linux-magazin.de 12.2023
Firecracker Sysadmin
© Kata Containers
Eine zweite Schwachstelle besteht laut
Hocus-Entwicklern in der Art und Weise,
wie Firecracker auf an die Instanz an-
geschlossenen Blockspeicher zugreift.
Dafür kommt eine modifizierte Imple-
mentierung von Virtio-blk zum Einsatz, 4 Kata Containers bietet eine CRI-O-kompatible Laufzeitumgebung für den Betrieb von
des paravirtualisierten Treibers für den Containern, verschachtelt die Container dabei jedoch auf Wunsch in Firecracker-Instanzen.
Zugriff auf Blockspeichergeräte. Diese
benötigt laut Hocus zwar tatsächlich
deutlich weniger Arbeitsspeicher als die erst dann wirklich Fahrt aufnehmen werde, ist schon längst wieder in die ewigen
Standardimplementierung, bietet aller- wenn sie mit anderen Tools wie Libvirt Jagdgründe eingegangen. Weder für den
dings auch einen deutlich geringeren oder OpenStack integriert würde. Bis Betrieb mit Libvirt noch für den Betrieb
Datendurchsatz. Das bremst insbeson- heute liegt für Firecracker noch keine innerhalb von OpenStack ergeben sich
dere Anwendungen aus, die auf hohe Libvirt-Integration vor, und von Open- mithin sinnvolle Use Cases, zumindest
Bandbreiten bei den angeschlossenen Stack war bisher noch gar nicht die Rede. im Augenblick.
Speichergeräten angewiesen sind. Laut Das ist allerdings kein sträfliches Ver- Anders sieht die Sache aus, lässt man
Hocus realisiert Firecracker ausschließlich säumnis der Entwickler, sondern hat vor seinen Blick in die hippe Welt der Mikro-
einen MMIO-basierten Transport von allem mit den schon beschriebenen Ein- architektur-Apps und der Container
Daten, während Qemu bei der Paravir- satzszenarien für Firecracker zu tun. schweifen. Dort hat sich etwa Kata Con-
tualisierung auch die schnellere PCI-Vari- Ein Gespann aus Firecracker und Lib- tainers seit einigen Jahren Meriten erar-
ante verwenden kann. virt wäre nur dann sinnvoll, wenn das Ziel beitet, und das mit einem relativ simplen
Das Ende vom Lied hat wohl jeder darin bestünde, kurzlebige virtuelle In- Konzept: Die Lösung wirbt damit, klassi-
geahnt: Hocus entschied sich letztlich stanzen auf Standard-Servern auszurollen. sche Workloads aus der Container-Welt
gegen Firecracker und für das klassische Das gilt noch viel mehr für die Kombi- auszuführen, allerdings in Kombination
Gespann aus Qemu und KVM, mit vielen nation mit OpenStack. Wie beschrieben, mit ebenfalls klassischer Virtualisierung.
lokalen Anpassungen. Allerdings weisen taugt Firecracker jedoch kaum als voll- Wie OpenStack ist auch Kata Containers
die Entwickler ausdrücklich darauf hin, wertiger Ersatz für KVM und Qemu. Eine ein Projekt der OpenInfra Foundation. Im
dass das nicht als Kritik an Firecracker zu mögliche Integration mit Libvirt oder Grunde handelt es sich um ein Manage-
verstehen sei. Man habe die Software OpenStack ergäbe also nur Sinn, wenn es ment-Framework für den Betrieb von
lediglich in einer anderen Art und Weise explizit um den Betrieb entsprechender Containern, das Kubernetes ähnelt.
genutzt, als vom Hersteller vorgesehen. Workloads ginge. Primär ist Kata jedoch eine CRI-O-kom-
Seinen eigenen Blog-Eintrag 1 möchte Und genau da liegt der Hase im Pfeffer: patible Laufzeitumgebung für Container.
Hocus insofern vor allem als Warnung Dass Administratoren auf einem Stan- Der offene Standard CRI-O definiert eine
für Unternehmen verstanden wissen, die dard-Server mit KVM ohne umfassende Laufzeitumgebung für Container und
einen breitflächigen Ersatz von KVM und Verwaltungssoftware drumherum kurz- ermöglicht das Entwickeln verschiedener
Qemu durch Firecracker ins Auge fassen. lebige Instanzen mit Firecracker ausführen Implementierungen nach standardisier-
Sollen Instanzen lange laufen und dabei und das von Libvirt steuern lassen, ist, ten Vorgaben. Anders als etwa bei der
kontinuierlich Server-Dienste anbieten, wenn überhaupt, ein sehr seltener Use klassischen Docker-Laufzeitumgebung
ist Firecracker vermutlich nicht das rich- Case. Im Gespann mit OpenStack ergäbe oder Podman von Red Hat sitzt bei Kata
tige Werkzeug für die Aufgabe. Firecracker nur Sinn, um einen Dienst wie aber immer auch eine echte virtuelle In-
AWS Lambda nachzubauen. Dafür fehlt stanz im Boot. Laut Entwicklern erhöht
in OpenStack jedoch der gesamte Unter- das den Grad der Abstraktion und damit
Integration ist wichtig
bau. Einen Nachbau von AWS Lambda implizit die Sicherheit der Workloads in
Unser erster Artikel zu Firecracker ende- gab es für OpenStack – wenn überhaupt Containern. Weil Kata CRI-O implemen-
te 2019 mit der Anmerkung, dass die – in Form von Qinling 1 nur in Ansätzen. tiert, lässt es sich unmittelbar mit Kuber-
Lösung in der Open-Source-Welt wohl Selbst dieses Subprojekt von OpenStack netes verwenden. Administratoren brau-
12.2023 www.linux-magazin.de 55
Sysadmin Firecracker
Firecracker ausprobieren
Administratoren kritisieren an Firecracker
oft, dass man es kaum lokal testen könne,
um ein Gefühl für die Funktion und die
© OpenNebula
56 www.linux-magazin.de 12.2023
Firecracker Sysadmin
Damit das Beispiel funktioniert, muss auf Features fehlen, um über Monate oder große Sprünge hat die Firecracker-Ent-
dem Hostsystem KVM aktiviert und ge- gar Jahre laufende virtuelle Instanzen wicklung zumindest in der jüngeren Ver-
laden sein. Zudem müssen Sie eine TAP- sinnvoll zu betreiben, die kontinuierlich gangenheit nicht mehr gemacht. Gut
Netzwerkschnittstelle anlegen und mit eine Anwendung beherbergen. Für der- möglich also, dass die Lösung sich ein
dem eigentlichen Netzwerkgerät des artige Einsatzgebiete mangelt es Fire- Standbein vor allem im Container-Kon-
Systems verbinden. Haben Sie alle Vor- cracker an den von seinen Entwicklern text sowie im KI/ML-Umfeld erarbeiten
kehrungen getroffen, lässt die Instanz als unnötig betrachteten Funktionen, zum wird. Wer 2019 noch die Palastrevolution
sich mit dem Kommando aus der letzten Beispiel an einer Form der interaktiven im Hinblick auf KVM und Qemu ersehnte
Zeile von Listing 2 starten. Das hier ge- Speicherverwaltung zwischen Host und (oder je nach Standpunkt befürchtete),
nutzte Abbild einer Instanz beherrscht virtueller Instanz. sieht sich jedenfalls eines Besseren be-
zugegebenermaßen nicht sonderlich Tatsächlich beschränkt das in der Pra- lehrt. Damit Firecracker KVM und Qemu
viele Befehle. Möchten Sie die virtuelle xis die Einsatzzwecke von Firecracker in der Breite ablösen könnte, müssten
Firecracker-Instanz genauer untersuchen, weniger, als man glauben könnte. Ein seine Entwickler zuerst einige zentrale
finden Sie im Netz aber auch Abbilder für großer Teil der Container in der Industrie Funktionen nachrüsten.
Ubuntu mit umfassenderer Ausstattung. läuft heute selbst in virtuellen Instanzen, Ein Interesse daran hat Amazon allem
was doppelt ineffektiv ist: Wer Container Anschein nach nicht. Schließlich hätte
in KVM einpackt, holt sich neben dem niemand etwas davon, bauten die Fire-
Fazit
satten Overhead von Qemu obendrein cracker-Entwickler peu à peu ein Qemu
Firecracker ist nach wie vor eine ausge- den impliziten Overhead der Container- mit anderen Mitteln nach. (jcb/jlu) Ӻ
sprochen spannende Technologie für Umgebung ins Haus. Gerade in der Con-
die Verwendung im Rahmen des von tainer-Welt ist es normal, dass Instanzen
AWS entwickelten Einsatzszenarios. Das kommen und gehen, beispielsweise beim Dateien zum Artikel
Werkzeug adressiert spezifisch Einsatz- Skalieren einer Anwendung in die Breite. herunterladen unter
gebiete, in denen vollständig vom Host Hier kann Firecracker eine valide Alter- www.lm-online.de/dl/49906
abgeschirmte Rechenpower gefragt ist, native zu KVM und Qemu bieten. Ent-
um kurzlebige Aufgaben abzuwickeln. sprechend ist das Werkzeug heute – an-
Als vollständiger Ersatz für das klassische ders als noch vor vier Jahren – in Lösun-
Gespann aus KVM und Qemu taugt Fire- gen wie Kata Containers eingebettet. Weitere Infos und
cracker dagegen nicht, und will das auch Hinzu kommt, dass Firecracker aus interessante Links
gar nicht. Die AWS-Entwickler selbst AWS-Sicht mittlerweile einigermaßen www.lm-online.de/qr/49906
weisen darauf hin, dass in Firecracker durchentwickelt zu sein scheint. Allzu
www.linux-magazin.de/subscribe
Digitale Chat-Souveränität: Fünf Slack-Alternativen Der Mensch ist bekanntlich ein kom-
munikatives Wesen. Schon Paul Watzla-
wick stellte ganz treffend fest, dass man
58 www.linux-magazin.de 12.2023
Slack-Alternativen Sysadmin
© Gabriel Engel
1 IRC, der Klassiker unter den Chat-Systemen, ist merklich in die Jahre gekommen und
taugt heute nur noch für grundlegende Aufgaben.
schen die Mitarbeitenden oft sensible In- Anwender heute höhere Anforderungen ein anderes Chat-Prinzip populär, das
formationen aus, manchmal sogar solche als früher. Dass ein Chat für die Kommu- sich von etablierten Ansätzen insbeson-
von enormer wirtschaftlicher Bedeutung nikation etwa animierte GIFs und Emojis dere durch die Sortierung und die Dar-
für die Firma. Da Slack in der Cloud ge- unterstützen muss, ergibt sich aus den stellung von Themen unterscheidet. Hier
hostet ist, haben Firmen aber keine Kon- veränderten Kommunikationsgewohn- stehen nicht Kanäle und Queries im Vor-
trolle darüber, was mit den übermittelten heiten des letzten Jahrzehnts sowie aus dergrund, auch wenn diese Funktionen
12.2023 www.linux-magazin.de 59
Sysadmin Slack-Alternativen
in der Regel noch unterstützt werden. ԏ Der Oldie: IRC darf eintreten. Etliche IRC-Server bieten
Stattdessen denken zahlreiche moderne zwar die Möglichkeit, Verbindungen ein-
Chat-Systeme Kommunikation ähnlich Das gute alte IRC-Protokoll darf auch in zuschränken, beispielsweise anhand der
wie Mails in Form von Threads. Wenn einer Chat-Übersicht des Jahres 2023 IP-Adresse des Gegenübers. Bis auf die
es Kanäle gibt, kommunizieren die Teil- nicht fehlen. Noch immer finden sich et- Ebene einzelner Anwender hinunter funk-
nehmer darin nicht wild drauflos wie zum liche gut gepflegte IRC-Server, die sich in tioniert das aber nicht. Wer verhindern
Beispiel bei IRC. Stattdessen starten sie kürzester Zeit auf einer handelsüblichen will, dass sich ganz bestimmte Clients
unter der Haube von spezifischen Themen Linux-Maschine installieren lassen. Zudem mit einem Server nach IRC-Standard ver-
oder Fragestellungen entweder in öffent- gibt es nur für wenige Chat-Protokolle so binden, muss serverseitig entsprechend
lichen Kanälen oder privaten Konversa- viele gut erprobte Clients für praktisch grobschlächtig die erlaubten IP-Adress-
tionen einen Kommunikationsfaden, auf 1
jedes Betriebssystem wie für IRC . Wer räume konfigurieren.
den andere Nutzer dann antworten. Die lediglich für ein kleines Unternehmen Wie schon gesagt: IRC eignet sich aus
grafische Darstellung erfolgt dabei ge- oder ein einzelnes Team einen Weg zur heutiger Sicht nur dann als Slack-Alter-
trennt nach Themen. schnellen Kommunikation benötigt, der native, wenn es ausschließlich um die
Zulip, einer der von uns untersuchten kommt mit einem flugs aufgesetzten IRC- bloße Kommunikation zwischen Mitar-
Probanden, fokussiert sich auf diese Art Server schnell ans Ziel. beiterinnen und Mitarbeitern ohne die
der Darstellung, die speziell im Entwick- Das kann aber nicht darüber hinweg- Einhaltung der meisten üblichen Com-
ler-Kontext manchen Vorteil gegenüber täuschen, dass IRC altersbedingt etliche pliance-Regeln geht. Im Gegenzug erhält
der klassischen Darstellung bietet. So Schwächen in verschiedenen Bereichen der Administrator einen stabilen und
lassen sich hier Fragen zu einzelnen Bug- aufweist. Bis heute unterstützt es offiziell leicht zu administrierenden Dienst, der
Reports oder Commits in Chat-Fäden keinerlei Transportverschlüsselung von nur sehr wenige Ressourcen benötigt
packen. Auf diese Weise können mehrere Daten. Der Transfer zwischen Server und und sich schnell aufsetzen lässt.
Konversationen in öffentlichen Kanälen Client erfolgt also stets im Klartext. Das
zu verschiedenen Themen geordnet und ist kein Problem, wenn der IRC-Server
ԏ Rocket.Chat
trotzdem gleichzeitig stattfinden. sich sowieso nur aus dem lokalen Netz
Auf welche Weise ein Chat-System der Firma erreichen lässt. Verbinden sich Wer mit dem IRC-Feature-Set nicht aus-
einzelne Gesprächsthemen darstellt die Teilnehmer dagegen etwa per VPN kommt, landet auf der Suche nach Alter-
und ordnet, das ist für die Nutzer der mit dem Firmennetz, resultiert daraus ein nativen früher oder später mit einiger
Lösung von entscheidender Bedeu- handfestes Compliance-Problem. Wahrscheinlichkeit bei Rocket.Chat :2
tung. Bei der Auswahl des passenden Hinzu kommt, dass IRC jegliches Be- Das hat sich zu einer Art Standardalter-
Werkzeugs für das eigene Unterneh- nutzermanagement fehlt. Wer sich mit native zu Slack entwickelt, und das aus
men darf man eben diesen Faktor also einem Server verbindet, gibt den Spitz- guten Gründen: Das Programm kommt
nicht unterschätzen. namen an, den er nutzen möchte, und komplett quelloffen daher und unter-
stützt heute die meisten Features, die
auch Slack anbietet. Die Geschichte des
Werkzeugs ist dabei durchaus bewegt:
Bis 2015 war Rocket.Chat als Teil von
Konecty keine freie Lösung. Mittlerweile
steht der gesamte Quelltext unter der
MIT-Lizenz.
Ähnlich wie Slack bietet Rocket.Chat
eine Vielzahl von darstellbaren Formaten
für die Kommunikation. Das umfasst so-
wohl klassische Kanäle und Queries als
auch die bereits beschriebene Thread-
Ansicht. Über Themes lässt sich die grafi-
sche Erscheinung von Rocket.Chat indi-
viduell anpassen. Hier kommt eine Spezi-
alität zum Tragen, die auch bei anderen
Lösungen noch Thema sein wird: Das
Chat-Protokoll, das Rocket.Chat nutzt, ist
© Rocket.Chat
60 www.linux-magazin.de 12.2023
Slack-Alternativen Sysadmin
© Mattermost
des eigenen Clients nach seinen persön-
lichen Bedürfnissen einstellen.
Darüber hinaus liest sich die Feature-
Liste von Rocket.Chat wie die einer ak-
tuellen und umfangreichen Chat-Lösung. 3 Mattermost richtet sich vorrangig an Entwickler, zählt aber eher zur Riege der Free-
So bietet die Software wahlweise eine mium-Anwendungen: Notwendige Enterprise-Features gibt es nur gegen Geld.
eigene Nutzerverwaltung oder lässt sich
an LDAP- oder SAML-Verzeichnisse sowie
OAuth anbinden. Single-Sign-on unter- ein wie Markdown oder Mehrzeilencode. merzielle Version des Diensts an. Sie ent-
stützt das Produkt ebenso. Zur Auswahl Mathematische Formeln lassen sich mit- hält noch ausgefeiltere Optionen, um
steht dabei das Login über die Accounts tels einer TexMath-Implementierung um- die Optik an die CI der Firma anzupassen,
von Facebook, Github, Google, Microsoft setzen, animierte GIFs zeigt der Client kennt eine Agent-Struktur zum Beispiel
und etlichen weiteren Anbietern. Hinzu klaglos an, und in Sachen Emojis unter- für die Integration von Rocket.Chat in
kommen verschiedene Kommunikations- stützt Rocket.Chat sämtliche modernen Endanwender-Support-Systeme, liefert
funktionen, die über bloßen Chat weit Zeichensätze. Nachrichten lassen sich an vorgefertigte Skalierbarkeitskonzepte
hinausgehen. So bietet Rocket.Chat zum Ort und Stelle mit Reaktionen und auch für Rocket.Chat und offeriert auch kom-
Beispiel Audio- oder Videotelefonate. mit einer Bewertung nach dem Sterne- merziellen Support. Allerdings stehen die
Das ist zwar kein neues Feature, doch wer Prinzip versehen. Hilfreich ist häufig das zu dieser Lösung gehörenden Kompo-
den Chat nutzt, freut sich im Bedarfsfall Off-the-Record-Messaging: Dabei kom- nenten nicht unter einer freien Lizenz.
über die nahtlose Integration. munizieren zwei Teilnehmer via Slack Wer auf der Suche nach einer simplen
Besonders in Sachen Textkommunika- Ende-zu-Ende-verschlüsselt. Wer drin- Chat-Lösung für ein kleines oder ein mit-
tion leistet Rocket.Chat sich dabei keinen genden Bedarf verspürt, Dampf über den telgroßes Unternehmen ist, wird diese
Lapsus. Neben etlichen Formatierungs- Chef abzulassen, liegt hier also richtig. Features aber ohnehin kaum benötigen
möglichkeiten für Nachrichten bettet der Zusätzlich zu seinem Open-Source- und dürfte mit der selbst gehosteten
Rocket-Client Videos ebenso problemlos Produkt bietet Rocket.Chat eine kom- Open-Source-Variante gut zurechtkom-
AUSGABE VERPASST?
Alle Artikel
6,99 € zzgl. Versandkosten
62 www.linux-magazin.de 12.2023
Slack-Alternativen Sysadmin
© Wikipedia / VulcanSphere
tions für eingehende Nachrichten runden
das Angebot ab und zeigen: Zulip ist
vor allem individuell anpassbar. Das mag
manchem Administrator gerade ohne
einschlägige Zulip-Erfahrung anfangs
fast zu viel sein, doch keine Sorge: An das
Handling einer Zulip-Instanz gewöhnt
man sich schnell. 5 Element ist ein Matrix-Client und hilft dabei, ein Jabber-ähnliches Chat-Netz mit
Kanälen und Unterstützung für neueste Technologien zu nutzen.
ԏ Matrix
Dezentrales Messaging, das im Prinzip selbst. Wer ihn nicht ausrollen will, be- daher, und Matrix bietet ein paar der
eher funktioniert wie eine E-Mail und sorgt sich stattdessen einen Account bei Grundfunktionen, die IRC aus heutiger
Nachrichten über ein beliebig erweiter- einer bestehenden Instanz. Die eigent- Sicht so schmerzlich vermissen lässt.
bares Netzwerk austauscht – da klingelt liche Teilnahme an Chats erfordert dann
es beim einen oder anderen Administra- im Anschluss einen Client. Es gibt einige
Fazit
tor möglicherweise. Richtig: Wer schon Matrix-Clients für die gängigen Betriebs-
einmal mit Jabber und mit dem Betrieb systeme; Element 5 und Cinny gehören Wer Slack nicht nutzen will oder darf, der
einer Jabber-Instanz zu tun hatte, dem zu den beliebteren und sind beide für alle findet in der Welt der freien Software viele
kommen diese Konzepte durchaus ver- gängigen Desktop-OS verfügbar. Ist ein gute Alternativen. An der Spitze rangiert
traut vor. Mit dieser Vorerfahrung ver- entsprechender Client installiert und mit dabei Rocket.Chat als universellste Lö-
steht man auch die Ideen und Prinzipien dem angelegten Account einer Matrix- sung mit dem größten Feature-Set ohne
hinter Matrix schnell, denn das verspricht Instanz verbunden, kann die Schnatterei Münzeinwurf. Mattermost ist ebenfalls
im Grunde eine ähnliche Funktionalität. losgehen. Wer nicht schreiben will, kann auf der Höhe der Zeit, versteckt aber das
Dabei ist hier die korrekte Nutzung über Matrix komplementär auch Video- eine oder andere Feature zu viel hinter
zentraler Begrifflichkeiten durchaus und Audioanrufe tätigen. der Bezahlschranke. IRC taugt als Oldie
wichtig, denn hinter Matrix verbirgt sich Sehr angenehm dabei: Matrix spielt heute nur noch für einfache Einsatzszena-
im Chat-Kontext keine Chat-Software, ebenso wie die meisten verfügbaren rien, hat in Form von Matrix aber einen
sondern nur ein Protokoll. Es beschreibt Clients keine Spielchen in Sachen frei, würdigen Quasi-Nachfolger dezentraler
das Austauschformat für Nachrichten nicht ganz frei oder Freemium. Alle re- Bauart gefunden. Zulip schließlich richtet
zwischen Server und Client sowie zwi- levanten Funktionen der verfügbaren sich durch seine Darstellung von Nach-
schen Server und Server und implemen- Clients stehen ausnahmslos ohne finan- richten an eine sehr spezifische Benutzer-
tiert dabei einige zentrale Punkte, die zielle Gegenleistung zur Verfügung. Als gruppe von zumeist Administratoren. Es
bei Jabber fehlen. Dazu gehören instanz- Wermutstropfen kommen die mangelnde performt in der Kategorie Thread Views
übergreifende Chat-Räume für mehrere Bekanntheit und Verbreitung von Matrix aber beinahe so gut, dass man es außer
Personen. Matrix selbst ist als Stiftung ins Spiel. Beide Faktoren spielen aber Konkurrenz starten lassen müsste. Ad-
organisiert und verspricht, den entspre- kaum eine Rolle, will man lediglich ein ministratoren, die heute ein Chat-System
chenden Standard stets frei zu halten. kleineres Unternehmen mit einem Chat- einführen wollen, stehen damit also vor
Technisch präsentiert sich das Matrix- System versorgen. Zudem lassen sich der Qual der Wahl und sollten die Lösun-
Protokoll auf der Höhe der Zeit: Details Matrix-Server mittels Plugins um be- gen im Vorfeld auf jeden Fall gründlich
wie Verschlüsselung bezieht es in seine stimmte Funktionen erweitern; LDAP- evaluieren. (jcb) Ӻ
Vorgaben selbstverständlich ein. Unterstützung etwa fehlt ab Werk, man
Damit das Matrix-Netzwerk funktio- kann sie per Plugin aber nachrüsten.
niert, bedarf es dezentraler Server. Nicht Stil und Einfachheit von Matrix erin- Weitere Infos und
jeder Nutzer muss jedoch einen eigenen nern schon fast ein wenig an das gute, interessante Links
Matrix-Server betreiben. Den Code für alte IRC, jedoch kommen die gängigen www.lm-online.de/qr/49907
den Server liefert das Matrix-Projekt Matrix-Clients im moderneren Gewand
12.2023 www.linux-magazin.de 63
M ia
oss Med
V rtos
© Vi a / 123RF.com
om
Streit um die Autodaten
Sicherheitsalbtraum?
Die Ampelkoalition will bei der Nutzung von Autodaten ein gesetzt wurden. Den Angaben zufolge
erarbeitet das Verkehrsministerium einen
Treuhändermodell umsetzen, doch ein Expertenkreis schlägt Gesetzesentwurf, der „eine Ermächti-
gungsgrundlage für die Aufgaben des
ein anderes Konzept vor. Friedhelm Greis Datentreuhänders für den Bereich Kraft-
fahrzeuge vorsieht“.
Es dürfte sinnvoll sein, eine EU-Verord-
„Moderne Autos sind ein Datenschutz- zu Fahrzeugdaten. Grund dafür: Auf EU- nung abzuwarten, denn nach deren In-
albtraum.“ Um diese Einschätzung 1 der Ebene soll nach langer Verzögerung eine krafttreten könnte sie auch in Deutsch-
Mozilla-Stiftung zu ändern, könnte eine sektorspezifische Ergänzung der Daten- land gelten. Das hängt nach Angaben des
gesetzliche Regelung zur Nutzung von verordnung (Data Act) vorgelegt werden. Verbraucherzentrale Bundesverbands
Autodaten hilfreich sein. Nun scheint Be- Auf Anfrage teilte das Bundesverkehrs- davon ab, „inwieweit der europäische
wegung in die Pläne der Ampel zu kom- ministerium mit, der vom Wirtschaftsmi- Gesetzgeber mit der Änderung der Ty-
men, eine laut Koalitionsvertrag „wettbe- nisterium eröffnete Prozess diene einer pengenehmigungsverordnung eine Voll-
werbsneutrale Nutzung“ dieser Autoda- Vorabpositionierung angesichts einer harmonisierung vornehmen wird“.
ten zu ermöglichen. Doch die Einschät- möglichen EU-Regulierung zu Fahrzeug- Dazu schreibt das Ministerium: „Tech-
zung eines Expertengremiums wider- daten, -funktionen und -ressourcen und nisch und rechtlich gibt es konkurrieren-
spricht dem von SPD, Grünen und FDP finde derzeit auf Arbeitsebene statt. de Ideen und Konzepte, um den Zugang
bislang präferierten Treuhändermodell. zu Daten in Kraftfahrzeugen zu regeln.
Vor Kurzem startete das Bundesminis- Die Bundesregierung wird die Vorschläge
Gesetzesentwurf in Arbeit
terium für Wirtschaft und Klimaschutz ei- der EU-Kommission daher prüfen und
nen Abstimmungsprozess innerhalb der Das Thema Autodaten gehört zu den Pro- sich positionieren, sobald diese vorliegen,
Bundesregierung. Dabei geht es um die jekten der Ampel, die zwar im Koalitions- auch mit Blick auf das im Koalitionsver-
Vorbereitung einer sektoralen Regelung vertrag stehen, jedoch noch nicht um- trag angestrebte Treuhändermodell.“
64 www.linux-magazin.de 12.2023
Recht Forum
Nur noch wenig Zeit ter zusammengeführt werden (wie zum Kommunikation zwischen dem Fahrzeug
Beispiel im Adaxo-Konzept des VDA be- und dem Server des Fahrzeugherstellers
Das Problem an dem anstehenden Kom- schrieben)“. Das Thema Datentreuhänder sicher“, schreibt der VDA in seinem aus-
missionsvorschlag: Bis zur Wahl des neu- taucht hingegen nicht auf. führlichen Adaxo-Konzept 1.
en Europaparlaments dauert es nur noch Zentrale Aspekte des Papiers sind
rund ein halbes Jahr. Es dürfte schwierig durchaus begrüßenswert. So heißt es:
Kontrolle über Datencockpit
werden, bis dahin eine komplette Ver- „Grundvoraussetzung für die Nutzung
ordnung durch Parlament, Ministerrat der Daten ist die Zustimmung und Frei- Im Gegensatz zur Autoindustrie forderte
und die Trilogverhandlungen zu bringen. gabe durch den Nutzenden des Fahr- der Verbraucherzentrale Bundesverband
Über die Frage, wie man einen solchen zeugs und die DSGVO-konforme Nut- (VZBV) in einem Positionspapier 1 vom
Datentreuhänder konkret umsetzen zung der Daten.“ Nachvollziehbar ist November 2022 die Einrichtung eines
könnte, zeigten sich in einer Diskussion auch die Feststellung: „Ein genereller sogenannten Mobilitätsdatenwächters.
vor einem Jahr große Unterschiede zwi- direkter Remote-Zugriff auf die im Fahr- Über diese Autorisierungsstelle, eine
schen Ministerium und Autoindustrie. zeug verfügbaren Daten, Funktionen Art Datencockpit im Auto oder auf dem
Als Alternative zum Treuhändermodell und Ressourcen ist kritisch in Bezug auf Smartphone (Personal Information Ma-
entwickelte der Verband der Automobil- Fahrzeugsicherheit, Datenschutz, Haf- nagement Systems, PIMS), sollen die Fah-
industrie (VdA) schon 2017 das Nevada- tung, Zertifizierungsfähigkeit und Cyber rer mehr Kontrolle über ihre Fahrdaten
Konzept, das inzwischen durch das Ada- Security. Zudem ist auch der Schutz von erhalten. „Es würde transparent ersicht-
xo-Konzept ersetzt wurde. Adaxo steht geistigem Eigentum und Geschäftsge- lich werden, warum Unternehmen be-
als Abkürzung für „automotive data ac- heimnissen zu berücksichtigen.“ stimmte Informationen benötigen, wie
cess, extended and open“ und bedeutet Nach Ansicht des Expertenkreises, dem lange sie gespeichert werden und welche
so viel wie erweiterter und offener Fahr- 13 Mitglieder aus Automobilindustrie, Dritte darauf zugreifen dürfen“, schreiben
zeugdatenzugriff. Forschung und Gewerkschaften ange- die Verbraucherschützer.
Für die Autoindustrie ist laut VDA- hören, ist lediglich „ein direkter Fahr- Die Daten selbst sollten über einen
Geschäftsführer Marcus Bollig entschei- zeugzugriff im abgesicherten Zustand, Datentreuhänder ausgeleitet und dann
dend, „dass der erste direkte Zugriff auf wie er beispielsweise im Service- und an Hersteller, an private Anbieter oder
die Daten im Fahrzeug über diese eine, Wartungsfall durch einen zertifizierten staatliche Organe weitergegeben werden,
wohl definierte Schnittstelle zu einem Service-Anbieter erfolgt, … für freigege- sofern der Fahrer das autorisiert. Über
Hersteller erfolgt. Danach kann über bene Funktionen unkritisch“. Das bedeu- die Schnittstelle des Datentreuhänders
einen Konnektor, zum Beispiel zu einem tet jedoch, dass Fahrzeuge nur in weni- könnten auch Daten in das Fahrzeug flie-
neutralen Server, dort die Treuhänder- gen Situationen ihre Daten übermitteln ßen, beispielsweise für Updates. Aller-
funktion implementiert werden“. könnten und ist für viele Anwendungen dings planen Hersteller inzwischen auch
Ein Ministeriumsvertreter widersprach des vernetzten Fahrens unzureichend. die Steuerung von Autos aus der Ferne.
dem jedoch entschieden. „Dieser eine
Schritt ist uns zu viel“, sagte Unterabtei-
Funktionale Sicherheit Umsetzung offen
lungsleiter Andreas Krüger und fügte
hinzu: „Das, glaube ich, wird nicht wahr Der Expertenkreis schlägt daher vor, den Wie die Bundesregierung den Koalitions-
werden. Wenn wir das Backend durch Datenzugriff vom Anwendungsfall ab- vertrag umsetzen wird, ist noch nicht ab-
den Treuhänder ersetzen, dann, denke hängig zu machen. Dabei könne man sehbar. Schwerer als der aktuelle Daten-
ich, werden wir uns einig.“ Doch nach sich an den Sicherheitsanforderungen schutzalbtraum würde der Sicherheits-
einer solchen Einigung sieht es derzeit der Autoindustrie nach ASIL (Automotive albtraum wiegen, wenn Fahrzeuge über
nicht gerade aus. Safety Integrity Level 1) orientieren. „Nur die neue Schnittstelle zu den Datentreu-
auf Daten, Funktionen und Ressourcen händern gehackt würden oder durch ei-
der Stufe QM (Non-ASIL) sollte für Dritte nen Ausfall der Systeme der Datenfluss
Handlungsempfehlungen
ein Zugriff möglich sein. Die Rückwir- komplett ausfiele. (uba) Ӻ
So legte der von der Bundesregierung kungsfreiheit des Zugriffs auf andere
gegründete Expertenkreis Transforma- Funktionen (egal welcher ASIL-Stufe) und
tion 1 der Automobilwirtschaft im Sep- die Cyber-Security des Fahrzeuges müs- Dateien zum Artikel
tember 2023 „Handlungsempfehlungen sen jederzeit sichergestellt werden.“ herunterladen unter
zur Erhöhung der Datennutzung und für Eine Option zum Zugriff auf diese Da- www.lm-online.de/dl/48770
die Umsetzung einer möglichen sekto- ten, Funktionen und Ressourcen bietet
ralen Regulierung“ vor. Das neunseitige das sogenannte Extended-Vehicle-Ver-
Papier 1 spricht sich für den Vorschlag fahren (ExVe) auf das Backend des Auto-
der Autoindustrie aus: „Datenangebot herstellers oder auf eine abgesicherte In- Weitere Infos und
und Datennachfrage sollten durch ein Vehicle-Sandbox. „Die ExVe-Web-Schnitt- interessante Links
’Structured Forum’ mit Datenhalter, Da- stelle ist bei allen modernen Fahrzeugen www.lm-online.de/qr/48770
tennachfrager und Datenservice-Anbie- verfügbar und stellt so die gesicherte
12.2023 www.linux-magazin.de 65
Forum Bücher
Bücher über Kanban und Business-Agilität dem Visualisieren, also den Klebezetteln.
Daneben geht sie auf fünf weitere, allge-
mein gültige Praktiken ein: Limitieren der
66 www.linux-magazin.de 12.2023
IT-Konferenz für Software-
technologie, Künstliche Intelligenz,
DevOps, IT-Security, Datenbanken,
Agile und IT-Management
Gruppenbildung
Clustering-Verfahren aus dem Bereich des unüberwachten Eine weitere wichtige Aufgabe im un-
überwachten Lernen ist die Dimensions-
Lernens sortieren Daten in Gruppen und erlauben so eine reduktion. Bei dieser Aufgabe versucht
der Algorithmus, die Anzahl der Daten-
nützliche Segmentierung komplexer Datensätze. merkmale (die Dimensionen) zu redu-
zieren, während er gleichzeitig so viele
Mark Vogelsberger relevante Information wie möglich er-
hält. Das hilft, die Daten zu vereinfachen
und gleichzeitig die nützlichen Informa-
Beim überwachten Lernen sollen die aufgaben des unüberwachten Lernens: tionen beizubehalten.
Algorithmen einen funktionalen Zusam- das Clustering, die Dimensionsreduktion Man kann unüberwachtes Lernen da-
menhang zwischen Features und Labels und die Anomalieerkennung. rüber hinaus auch zur Anomalieerken-
erkennen. Diesen Zusammenhang er- Die Cluster-Bildung stellt beim un- nung einsetzen. In diesem Fall versucht
lernen die Algorithmen anhand von Trai- überwachten Lernen eine häufige Auf- der Algorithmus, abnormes Verhalten
ningsdaten mithilfe statistischer Modelle. gabe dar. Dabei ordnet ein Algorithmus oder Ausreißer in den Daten zu identifi-
Beim unüberwachten Lernen dagegen ähnliche Datenpunkte aufgrund ihrer zieren, ohne dass explizite Informationen
liegen nur Features vor, die keine Labels Merkmale oder Eigenschaften in Cluster über diese Ausreißer vorhanden sind.
besitzen. Hier kann und soll also kein oder Gruppen ein. Dieses Clustering hilft Das spielt in vielen Anwendungsfällen
funktionaler Zusammenhang gefunden dabei, Muster sowie Strukturen in den eine Rolle, beispielsweise bei der Erken-
werden. Stattdessen hat das unüber- Daten zu erkennen. Ein gutes Beispiel nung von betrügerischen Transaktionen
wachte Lernen je nach Anwendungs- aus dem E-Commerce-Bereich wäre die in Finanzdaten oder bei der Identifizie-
bereich verschiedene Aufgaben. Grund- Gruppierung von Kunden in Segmente rung von fehlerhaften Produkten in der
sätzlich gibt es drei verschiedene Haupt- auf Basis ihres Kaufverhaltens. Qualitätskontrolle.
68 www.linux-magazin.de 12.2023
KI-Serie Know-how
12.2023 www.linux-magazin.de 69
Know-how KI-Serie
70 www.linux-magazin.de 12.2023
ANZEIGE
QR-Code scannen
und hinsurfen!
72 www.linux-magazin.de 12.2023
WISSEN, WIE DER
HASE LÄUFT!
74 www.linux-magazin.de 12.2023
Java 21 Programmieren
und Codeanalyse, dass die Variable selbst Einfacher Java-Code lässt sich schon län-
nicht zum Einsatz kommt. Das funktio- ger ohne Kompilieren direkt auf der Kom-
niert für Switches (Zeile 22) sowie für Try- mandozeile starten, erwartet jedoch ein
Catch-Statements (Zeile 31). gültiges Java-Main-Program mit einer
Klasse und der statischen Main-Methode.
Dank der Unnamed Classes and Instance
Previews
Main Methods (JEP 445) können Sie da-
Darüber hinaus befinden sich zwei wei- rauf verzichten: Das Beispiel aus Listing 2
tere interessante Features im Preview- ohne Klasse lässt sich nun direkt starten.
Status. Die Scoped Values (JEP 446), in Wegen des Preview-Status müssen Sie
Java 20 vorgestellt, sollen als bessere Al- 1
das Feature extra freischalten .
ternative zu den Thread-Locale-Variablen
dienen. Gegenüber der ursprünglichen
Interpoliert
Beschreibung 1 flossen keine wesent-
lichen Änderungen ein, wahrscheinlich Mit Java 21 haben die Entwickler unter-
werden die Scoped Values in Java 22 all- schiedliche Modifikationen an den mit-
gemein zur Verwendung bereitstehen. gelieferten Bibliotheken vorgenommen.
12.2023 www.linux-magazin.de 75
Programmieren Java 21
76 www.linux-magazin.de 12.2023
Java 21 Programmieren
geschaffen, das Lists sowie Sets und Maps Neben diesen allgemein anwendbaren Vector API (JEP 448) zur Vektorberech-
mit Sortierreihenfolge unterstützen. Änderungen gibt es mit Java 21 zusätz- nung direkt auf der CPU. Sie hat mit dem
Ohne JEP kamen kleinere Änderungen liche Bibliothekserweiterungen, die nur sechsten Incubator-Status fast transzen-
im String-Umfeld aus. Das neue indexOf wenige Programmierer direkt nutzen dente Höhen erreicht. Allerdings scheite-
in Zeile 7 sucht nur von Position 6 bis 19 dürften. Dazu gehört unter anderem die re ich nicht als einziger daran, damit eine
nach dem String von2 und reicht den für neuere Verschlüsselungsverfahren bessere Performance als mit normalem
Index der Fundstelle zurück; Zeile 8 er- wie elliptische Kurven notwendige Key Java-Code zu erreichen. Den kompletten
ledigt dasselbe für einzelne Buchstaben. Encapsulation Mechanism API (JEP 452). Beispielcode für diese API und alle ande-
Bei splitWithDelimeters lässt sich die Sie läuft in der Regel unter der Haube ren finden Sie auf Github 1.
maximale Anzahl der Teile angeben: In eines HTTPS-Aufrufs.
Zeile 9 bekommen Sie die Teile abc und ; Die weiteren Änderungen befinden
Unterhaltsleistungen
sowie den ungeteilten Rest cde;efg. sich nun schon länger in der Mache und
scheinen gefühlt nie zu einem Ende zu In sämtlichen Roadmaps war Java 21
kommen. Die Foreign Function & Me- bisher als LTS-Edition gekennzeichnet.
Verwoben
mory API (JEP 442) soll erlauben, C-Bib- Dementsprechend galt es für die meis-
Das Project Loom 1 kümmert sich seit liotheken aus Java heraus zu verwenden, ten Anwender als diejenige Java-Ver-
Java 19 um die Programmierung neben- befindet sich aber inzwischen bereits in sion, die sie nach 11 und 17 produktiv
läufiger Prozesse. Mit Java 21 haben die der dritten Preview. einsetzen wollten. Die kleine Fußnote
Virtual Threads (JEP 444) offiziell Einzug Noch weiter entfernt von einer tat- LTS/non-LTS designation and dates are
gehalten. Für Programmierer verhalten sächlichen Implementierung als die subject to change 1 ging dabei nahezu
sie sich nicht anders als herkömmliche Foreign Function & Memory API ist die unter. Umso größer war die Überra-
Threads, werden jedoch nicht eins zu
eins auf einen Thread im Betriebssystem
abgebildet. Stattdessen verteilt die JVM
die Last auf mehrere Threads im Betriebs-
system, was weniger Ressourcen erfor-
dert. Gerade Webserver mit vielen kurz-
lebigen Threads können auf diese Weise
mehr Anfragen beantworten.
Die damit zusammenhängende Struc-
tured Concurrency (JEP 453) verharrt
allerdings noch im Preview-Status. Dank
ihr lassen sich mehrere parallel ablaufen-
de Unterprozesse so bündeln, dass Sie
die gesamte Gruppe bezüglich der Er-
gebnis- oder Fehlerbehandlung einfach 2 Die Ausgabe der ausgefüllten Templates aus Listing 3.
zusammenfassen können.
33%
Rabatt
CHEIN
-GUTS
5 EURO
Günstiger als am Kiosk
Versandkostenfrei
bequem per Post
SICHERN SIE SICH JETZT IHR GESCHENK! Pünktlich und aktuell
Keine Ausgabe verpassen
EIN AMAZON-GUTSCHEIN ÜBER 5,00 €
Telefon:
Telefon: 0911
0911 / 993
993 990
990 98
98 E
E-Mail: computec@dpv de
Mail: [email protected]
Einfach bequem online bestellen: shop.linuxuser.de
Programmieren Java 21
Fazit
Rein von der technischen Seite her be-
trachtet ist Java 21 sehr attraktiv: Viele
Änderungen machen das Programmie-
ren sicherer und schneller oder stellen
komplett neue Möglichkeiten bereit. Al-
lerdings erweist Oracles Politikänderung
in Sachen Langzeit-Support dem Erfolg
von Java einen echten Bärendienst. So-
lange es keine kostenlose Java-Version
mit LTS-Stempel gibt, werden wohl viele
Anwender und Bibliotheken schlicht an
Java 17 festhalten.
3 JavaFX-Anwendungen können auch im Webbrowser laufen. Anders sieht es zum Beispiel bei der
von Gluon gepflegten Oberflächen-
bibliothek JavaFX aus. Das moderne UI-
schung, als Nicolai Parlog im Juli 2023 in bereit. Pünktlich zu Java 21 entschied Toolkit erschien zeitgleich mit Java 21
seinem Blog den Artikel „Java 21 is no LTS das Unternehmen nun, diese erweiterte als JavaFX 21, Gluon bietet jedoch im
Version“ postete 1. Unterhaltsleistung für den Sprössling Gegensatz zu Oracle kostenfreien LTS-
Darin weist der bei Oracle angestellte nicht mehr zu finanzieren. Support an 1. JavaFX 21 selbst bringt
Java Developer Advocate noch einmal Sieht man sich in der Presse und im knapp 90 Verbesserungen und Bugfixes
darauf hin, dass sich eine LTS-Version Internet um, stellt man fest, dass diese mit sich. Linux-spezifisch ist der finale
technisch nicht von einer anderen Java- Nachricht noch nicht bei allen angekom- Schritt auf GTK3 vollzogen. Die alte
Version wie 19 oder 20 unterscheidet. men ist, denn Java 21 wird immer noch GTK2-Bibliothek wird nicht länger unter-
Laut Parlog kommt es darauf an, ob je- als LTS bezeichnet. Allerdings existiert stützt – 25 Jahre nach dem Erscheinen
mand die fragliche Version über mehrere anders als für Java 11 und Java 17 keine von GTK3 sicherlich kein übereilter Schritt.
Jahre pflegt und dabei Sicherheitslücken Möglichkeit, eine kostenlose JVM mit dem JavaFX selbst zeigt sich ähnlich mäch-
und Bugs beseitigt. Das eigentliche Java- LTS-Stempel herunterzuladen. tig wie die Alternative von Microsoft, es
Entwicklungsteam konzentriert sich ja Je nach Anwendungsfall können Java- lässt sich aber plattformunabhängig ein-
nach der Freigabe eines Releases auf die Nutzer derzeit aus drei Optionen für den setzen. Eine besondere Demo dafür bie-
Arbeit an den nächsten Versionen. Das Einsatz von Java 21 wählen. Wer keinen tet JavaFX Central. Hinter dieser Webseite
Unterhalten der bestehenden Veröffent- LTS-Bedarf hat, kann direkt auf Java 21 steckt mehr als nur eine reine Sammlung
lichungen übernahm bisher Oracle und wechseln und sich der neuen Features von JavaFX-Beispielanwendungen und
stellte in den letzten Jahren insgesamt erfreuen. Wer dagegen ausschließlich Bibliotheken: JavaFX steht alternativ als
28 Bugfix-Releases für Java 11 sowie 17 LTS-Version einsetzen will oder darf, lokale Desktop-Applikation beziehungs-
weise als Webanwendung im Browser 1
3
zur Verfügung . (csi/tre) Ӻ
Listing 4: Collections und Strings
01 var liste = new ArrayList<String>();
Dateien zum Artikel
02 liste.add("B");
herunterladen unter
03 liste.addFirst("B");
www.lm-online.de/dl/49601
04 liste.addLast("C");
05 liste.removeFirst();
06 liste.removeLast();
07 int idx = "von1,von2,von3,von2".indexOf("von2",6,19); Weitere Infos und
interessante Links
08 idx = "von,von,von ".indexOf((int)'v',4,8);
www.lm-online.de/qr/49601
09 String[] teile = "abc;cde;efg".splitWithDelimiters(";",2);
78 www.linux-magazin.de 12.2023
© Ta an
tsia
atsia
ts F.com
v / 123RF
tsevich
na Yats o
12.2023 www.linux-magazin.de 79
Programmieren C++ (Folge 71)
Das war das „Hello World“ von Ranges. findet. Views besitzen keine Daten, kon- mehr Views als die beiden im Beispiel
Jetzt ist es an der Zeit, tiefer in die Ma- sequenterweise sind ihre Copy-, Move- verwendeten. Die Tabelle Views in C++20
terie einzutauchen. und Zuweisungsoperationen konstant. stellt sämtliche Views-Varianten kurz und
In Listing 1 ist numbers die Range, kompakt vor.
während std::views::filter und Die meisten Views lassen sich über
Ranges und Views
std::views::transform für die Views einen alternativen Namen ansprechen.
Zuerst einmal enthält die Ranges-Biblio- stehen. Freilich besitzt C++20 deutlich So kann man statt std::views::trans-
thek zwei sehr interessante Concepts 1:
Ranges und Views.
Eine Range ist eine Menge von Ele- Views in C++20
menten, über die man iterieren kann.
View Funktion
Diese Range verfügt über einen Begin-
std::views::all Nimmt alle Elemente eines Views.
Iterator sowie einen Sentinel (das Ab-
schlusselement). Selbstverständlich std::ref_view Nimmt alle Elemente eines anderen Views.
handelt es sich bei den Containern der std::views::filter Nimmt die Elemente, die das Prädikat erfüllen.
Standard Template Library um Ranges. std::views::transform Transformiert jedes Element.
Ein View lässt sich auf eine Range
std::views::take Nimmt die ersten n Elemente eines anderen Views.
anwenden, wobei eine Operation statt-
std::views::take_while Nimmt die Elemente eines anderen Views, solange
das Prädikat gültig ist.
std::views::drop_while Überspringt die ersten Elemente eines anderen Views,
bis das Prädikat nicht erfüllt ist.
std::views::join Verbindet Views.
std::views::split Teilt einen View mithilfe eines Trennzeichens.
std::views::common Konvertiert einen View in einen Range.
std::views::reverse Iteriert in umgekehrter Reihenfolge.
std::istream_view Gibt die Elemente eines Views aus.
std::views::elements Erstellt einen View auf das n-te Element von Tupeln.
std::views::keys
1 Direktes Agieren auf dem Container
Erzeugt einen View auf das erste Element eines Paars.
mit der Ranges-Bibliothek. std::views::values Erzeugt einen View auf das zweite Element eines Paars.
80 www.linux-magazin.de 12.2023
C++ (Folge 71) Programmieren
form auch den Namen std::transform_ sie zum einen die Kom-
view verwenden. Views werden auch position und zum an-
häufig als Range Adaptors bezeichnet. deren die Bedarfsaus-
Die genaue Beschreibung der Views und wertung unterstützen.
der mit C++23 eingeführten neuen Das direkte Arbeiten
Views liefert in bekannter Manier Cpp- auf dem Container ist in
reference.com 1. C++ keine Revolution,
Die drei herausragenden Features von Funktionskomposition
Ranges sind, dass man sie auf den Con- und Bedarfsauswertung
tainer direkt anwenden kann und dass aber sehr wohl. 2 Funktionskomposition mit der Ranges-Bibliothek.
Listing 3: Funktionskomposition
01 #include <iostream> 22 std::cout << name << " ";
02 #include <ranges> 23 };
03 #include <string> 24 std::cout << std::endl;
04 #include <map> 25
05 26 std::cout << "The first 4 words: ";
06 int main() { 27 for (const auto& name :
07 std::cout << std::endl; std::views::keys(freqWord)
09 {"witch", 25}, {"wizard", 33}, {"tale", 45}, 29 std::cout << name << " ";
12 32
13 std::cout << "All words: "; 33 std::cout << "All words starting with w: ";
18 38 | std::views::filter(firstw)) {
19 std::cout << "All words reverse: "; 39 std::cout << name << " ";
12.2023 www.linux-magazin.de 81
Programmieren C++ (Folge 71)
Direkt auf dem Container die Keys der std::map<std::string, Funktion dient als Fabrik, die eine Sequenz
int>. Zuerst stellt der Codeblock ab Zei- von Zahlen erzeugt, indem sie einen
Das Programm aus Listing 2 erzeugt di- le 13 alle Schlüssel dar, der ab Zeile 19 sor- Ausgangswert sukzessiv inkrementiert.
rekte Views auf den Schlüsseln und tiert sie umgekehrt. Dagegen interessiert Diese Sequenz kann endlich oder un-
Werten einer std::unordered_map. Hier sich der Code ab Zeile 26 nur für die ersten endlich sein. Der Aufruf std::view::io-
agieren sowohl die Zeilen 15 und 19 als vier Keys, der ab Zeile 33 ausschließlich ta(0) erzeugt einen unendlichen Daten-
auch die Zeilen 26 und 30 direkt auf dem für jene, die mit dem Buchstaben „w“ be- strom, der bei 0 startet und auf Anfrage
Container. Während die Zeilen 15 und 19 ginnen. Abbildung 2 zeigt die Ausgabe. die nächste Zahl erzeugt. Dieses Pro-
die Schlüssel der std::unordered_ Das Pipe-Symbol bietet Syntactic duzieren eines Werts auf Anfrage nennt
map<std::string, int> ansprechen, Sugar 1 für die Funktionskomposition. man Bedarfsauswertung oder auch Lazy
sind es in den Zeilen 26 und 30 deren Damit lässt sich C(R) einfacher als R | C Evaluation 1.
Werte. Abbildung 1 zeigt die Ausgabe. schreiben. Die zwei Zeilen aus Listing 4 Dank Bedarfsauswertung und Funk-
sind also äquivalent. tionskomposition lässt sich die Ranges-
Bibliothek sehr elegant einsetzen, um die
Funktionskomposition
ersten 20 Primzahlen zu finden, die bei
Bedarfsauswertung
In Listing 3 kommt eine std::map zum 1 000 000 beginnen. Listing 5 stellt dazu
Einsatz, denn die Ordnung der Schlüssel In unserem nächsten Beispiel kommt eine iterative Strategie in vier einzelnen
ist hier entscheidend. Alles dreht sich um std::views::iota zum Einsatz. Diese Schritten vor.
20 auto odd = [](int i){ return i % 2 == 1; }; 41 std::cout << i << " ";
82 www.linux-magazin.de 12.2023
C++ (Folge 71) Programmieren
MAGAZIN
NEWSLETTER FÜR IT-PROFIS
Sie sind IT-Profi für Linux und Open Source? Bleiben Sie informiert mit
dem werktäglichen Newsletter für IT-Profis vom Linux-Magazin!
Newsletter
Q Tagesaktuelle IT-News
Q Security-Infos des
DFN-CERT
Q Online-Stellenmarkt
Suche im Einmachglas
Damit Mike Schilli seine Google-Drive-Dateien mit drei ver- Zum Glück bietet Google eine intuitiv zu
bedienende API 1 auf die Nutzerdaten
schiedenen Pattern Matchern prüfen kann, baut er sich in Go in Google Drive. Da bietet sich ein Kom-
mandozeilenwerkzeug zur Auswertung
ein Kommandozeilenwerkzeug mit lokalem Cache. Mike Schilli an. Wenn wir schon dabei sind, lohnt ein
Ausflug in die Welt der Pattern Matcher,
von denen es unterschiedlichste Vari-
anten gibt. So matcht die Shell mit einem
Meine digitale Bibliothek gescannter Glob-Mechanismus, Programmiersprachen
Papierbücher liegt in Form von PDF- dagegen üblicherweise mit regulären
Dateien in einem Account bei Google Ausdrücken. Ein simpler String Matcher
Drive. Zwar hat Google bislang meine wie das Grep-Kommando ist oft die prak-
Daten vorbildlich vorrätig gehalten, aber tischste Lösung.
mit dem Such-Interface werde ich ein-
fach nicht recht warm. Google-typisch
Parallele Regex-Welten
Der Autor präsentiert der Browser ein Suchfeld,
über das sich der indizierte Volltext aller Wer auf der Kommandozeile ls *.jpg
Michael Schilli arbeitet als Software Engi-
Dateien in allen Ordnern fix durchforsten eintippt, erwartet, dass der Match-Me-
neer in der San Francisco Bay Area in Kali-
lässt. Eine simple Antwort auf die Frage, chanismus der Shell alle Dateien mit
fornien. In seiner seit 1997 laufenden Kolum-
ob ich ein bestimmtes Buch bereits ab- der Endung .jpg findet. Dieser Muster-
ne forscht er jeden Monat nach praktischen
gelegt habe, fällt schon schwerer, denn abgleich unterscheidet sich grundlegend
Anwendungen verschiedener Programmier-
dazu müsste man die Dateinamen unter- von den in Programmiersprachen ver-
sprachen. Unter [email protected]
suchen und die Suche auf bestimmte wendeten regulären Ausdrücken nach
beantwortet er gern Ihre Fragen.
Ordner beschränken. PCRE (Perl Compatible Regular Expres-
84 www.linux-magazin.de 12.2023
Snapshot Programmieren
Listing 1: gdls.go
01 package main 26 gddb.RegexFu = func(re, s string) (bool, error)
02 import ( {
12.2023 www.linux-magazin.de 85
Programmieren Snapshot
3 Freischalten der Google Drive API vor der Nutzung. 4 Anmelden der App auf der Google Cloud Console.
Es interpretiert den Schrägstrich also Kommandozeilen-Flag --match. Es darf und schreibe 15 in meiner Bibliothek
keineswegs gesondert und ist schon zu- die Werte contains (Standard), glob befinden. Um die Anzahl der Treffer zu
frieden, wenn das Pattern auch nur auf oder regex annehmen. Entsprechend begrenzen, schiebt das dritte Kommando
einen Bruchteil der Eingabe passt. An- verzweigt der Code ab Zeile 29 in einen die Treffer nach Unix-Manier in ein nach-
ders ausgedrückt, verzichtet Grep auf reinen Substring-Match (Bibliotheksfunk- gestelltes Grep-Kommando. Das lässt aus
das sogenannte Ankern (Anchoring), ein tion strings.Contains()), einen Glob- den 15 Treffern ein Buch übrig, dessen
Ausstopfen des Patterns mittels *foo* ist Match (Match() aus dem Standardpaket Titel die Zeichenkette „mad“ enthält.
nicht notwendig. filepath) oder einen vollen Regex-Match Alternativ filtert der Regex-Match mit
aus der Go-Regexp-Library mit regexp. „bukowski.*mad“ im vierten Kommando
MatchString(). schon vorab den einzigen Treffer heraus.
Treffer nach Gusto
Abbildung 1 zeigt das neu erstellte Der Ausdruck passt auf Dateien mit dem
Damit Sie mit dem vorgestellten Binary Programm Gdls in Aktion. Ein Substring- entsprechenden Namen, unabhängig
gdls später Ihre Match-Strategie in den Match auf „bukowski“ findet alle Bücher davon, in welchem Ordner sie sich be-
Google-Drive-Daten nach Ihrem Gusto des amerikanischen Schriftstellers finden. Im Gegensatz dazu passt der
wählen können, spendiert Listing 1 das Charles Bukowski, von denen sich sage Glob-Match mit der Shell-typischen Stern-
Listing 2: Token-Abfrage
01 package main 20 func getTokenFromWeb(config *oauth2.Config)
02 import ( *oauth2.Token {
86 www.linux-magazin.de 12.2023
Snapshot Programmieren
Syntax und Pfadrestriktionen in der letz- Hierzu müssen Sie auf der
ten Zeile nur auf Dateien, die im Ordner Google Cloud Console 1
books/ liegen. Es ist also für jeden Ge- zunächst ein Projekt anlegen,
schmack etwas dabei. die Google-Drive-API freischal-
Damit die Suchkommandos in Abbil- ten 3 und eine neue Client-
dung 1 flüssig Ergebnisse liefern, fragt Applikation hinzufügen . 4
das Go-Programm Google Drive nicht Der Server antwortet mit einer
direkt ab, sondern nutzt eine lokale Ko- neu generierten Client ID und
pie der Dateinamen in einer SQLite-Da- 5
einem Client secret .
tenbank auf dem ausführenden Rechner. Das Client-Geheimnis be-
Diesen lokalen Cache frischen Sie bei rechtigt allerdings noch nicht
Bedarf über den Aufruf gdls --update zum Zugriff auf die Daten,
auf. Daraufhin kontaktiert Gdls Ihren sondern lediglich zum Ein-
Google-Drive-Account, holt die Namen holen eines Access-Tokens
aller aktuell gespeicherten Dateien und auf dem Google-API-Server.
speist sie in die Tabelle files einer SQ- Liegt später solch ein Token
Lite-Datenbank in der lokalen Datei dem Request an die Google-
~/.gdrive.db ein 2 . Drive-API bei, rückt der Server
Listing 1 verpackt die drei verschie- die Daten heraus. Das Access- 5 Client ID und Client secret dienen als Ausweis.
denen Queries als Library-Aufrufe in der Token gilt nur zeitlich be-
Funktion RegexFu() (ab Zeile 26). Lis- schränkt, lässt sich aber mit
ting 4 registriert diese später mit der En- dem gleichzeitig zugeteilten Refresh- Secret ein. Zu diesem Zeitpunkt liegt
gine der SQLite-Datenbank. Die SQLite- Token wieder und wieder auffrischen. noch kein Access-Token vor, also ruft Gdls
Session in Abbildung 2 sucht noch Das Client secret steht im Dialog in Abbil- die Funktion getTokenFromWeb() aus
händisch und SQL-typisch nach like dung 5 im JSON-Format zum Down- Listing 2 auf (ab Zeile 20). Sie schreibt
%bukowski% – ein viertes Verfahren zum load bereit, und Sie legen es in der Datei die URL zur Credential-Aktivierung auf
Pattern-Matching. Die Suchanfragen des creds.json im lokalen Verzeichnis ab. die Standardausgabe und fordert Sie auf,
Go-Programms nutzen später die in SQ- Beim ersten Aufruf mit gdls --update die Adresse in das Eingabefenster eines
Lite eingebaute Funktion regexp(), die liest das Programm die Credentials-Datei Webbrowsers einzutippen. Der damit
wir mit der benutzerdefinierten Funktion creds.json mit Client-ID und Client- kontaktierte Google-Server stellt dann
RegexFu überladen.
Ausweis, bitte!
Wie landen nun aber die Metadaten aus
Google Drive in der SQLite-Datenbank?
Google gestattet den Zugriff auf die
Drive-Daten nur für ausgewiesene Be-
nutzer. Deswegen muss ein Programm,
das die Namen der darin enthaltenen
Dateien abholen möchte, sich entspre-
chend autorisieren. 6 Abholen des Access-Tokens beim ersten Aufruf.
www.linux-magazin.de/subscribe
Programmieren Snapshot
88 www.linux-magazin.de 12.2023
Snapshot Programmieren
Der Server muss übrigens keine 100 Er- packt die Funktionen, die auf
gebnisse in eine Antwort packen. Diese die Datenbank zugreifen, in
voreingestellte Größe ist ein Maximal- ein objektorientiertes Format.
wert, den der Dienst unterschreiten darf. Der Konstruktor NewGdDb()
Clients, die nur dann eine Folgeseite an- ab Zeile 12 öffnet die Ver-
fordern, wenn sie 100 Ergebnisse finden, bindung zur Datenbank und 0Diese Build-Kommandos erzeugen das Go-Binary.
liefern ohne Fehlermeldungen auszuge- verpackt das Handle in eine
ben unvollständige Daten. Struktur vom Typ GdDb (de-
finiert ab Zeile 7). Nach dem Ausfüllen die den laufenden IDs die vollständigen
gibt er sie für künftige Aufrufe zurück. Pfade gefundener Dateien zuweist. In
Abgeheftet Ruft der Client später db.Init() auf, Abbildung 2 war bereits das Daten-
löscht der Code ab Zeile 21 mithilfe eines bankschema zu sehen.
Das Tool speichert die bei Drive gefun- SQL-Kommandos die Tabelle files (falls Die Funktion Add() ab Zeile 31 fügt
denen Dateinamen in der SQLite-Datei sie in einer alten Version aus vorherigen mit dem SQL-Kommando insert() neue
.gdls.db im Home-Verzeichnis. Listing 4 Läufen existiert) und legt eine neue an, Pfadeinträge als Tabellenzeilen an, wäh-
Listing 3: Google-Drive-Zugriff
01 package main 32 func listAllFiles(service *drive.Service, gddb
02 import ( GdDb, folderID, parentPath string) {
03 "context" 33 query := fmt.Sprintf("trashed=false and '%s' in
04 "fmt" parents", folderID)
06 "net/http" 35 for {
12.2023 www.linux-magazin.de 89
Programmieren Snapshot
rend Search() ab Zeile 35 Einträge nach Zeile 56 iteriert über genehmigte Treffer dem der Go-Compiler die im Code refe-
den vordefinierten Match-Algorithmen und schreibt sie in die Standardausgabe. renzierten Libraries aus dem Netz he-
absucht und Treffer ausgibt. Dazu regis- runtergeladen und vorkompiliert hat. Bei
triert die Funktion in SQLite die benutzer- Bedarf können Sie die Suchfunktionen
Abteilung, marsch!
definierte Funktion regex() und setzt weiter an eigene Bedürfnisse anpassen.
sie auf die in den Konstruktor hereinge- Der Dreisprung aus Abbildung führt0 Der Fantasie sind dabei keine Grenzen
reichte Go-Funktion mit den drei Match- zu einem ausführbaren Programm, nach- gesetzt. (uba/jlu) Ӻ
Algorithmen. Davon ist bereits einer vom
Hauptprogramm her vorausgewählt.
Beim Suchen mit SELECT in der SQL- Dateien zum Artikel Weitere Infos und
Datenbank springt die benutzerdefinier- herunterladen unter interessante Links
te Funktion in einer Where-Klausel ein www.lm-online.de/dl/49803 www.lm-online.de/qr/49803
und filtert die Treffer. Die For-Schleife ab
Listing 4: Datenbankzugriff
01 package main 34 }
02 import ( 35 func (gddb GdDb) Search(pattern string) {
03 "database/sql" 36 sql.Register("sqlite3_FunctionRegistration",
04 "fmt" &sqlite3.SQLiteDriver{
05 "github.com/mattn/go-sqlite3" 37 ConnectHook: func(conn *sqlite3.SQLiteConn)
06 ) error {
10 TableName string 40 }
11 } 41 return nil
30 } 58 panicOnErr(rows.Scan(&name))
90 www.linux-magazin.de 12.2023
ANZEIGE
Gaming-PCs
von PCGH
Konfigurierbare
PCs von Dubaro
Vorschläge zur
Konfiguration vom
PCGH-Ratgeber-Team
Für PC-Schrauber:
Bestellung aller Hardware-
Komponenten auch als
Bausatz möglich
POWERED BY
PROFI
IT
hochwertige Produkte und Leistungen
Weitere Informationen:
an. Die exakten Angebote jeder Firma
entnehmen Sie deren Homepage. Der Computec Media GmbH
MARKT ersten Orientierung dienen die sechs
Kategorien Hardware, Software, Seminar-
Anzeigenabteilung
anbieter, Systemhaus, Netzwerk/TK sowie Dr.-Mack-Straße 83
Schulung/Beratung. Der IT-Profimarkt- D-90762 Fürth
Sie fragen sich, wo Sie maßgeschneiderte
Eintrag ist ein Service von Linux-Magazin
Linux-Systeme sowie kompetente An-
und LinuxUser.
sprechpartner zu Open-Source-Themen Tel.: +49 (0) 911 / 2872-252
finden? Der IT-Profimarkt weist Ihnen Besonders komfortabel finden Sie einen
hier als zuverlässiges Nachschlagewerk Linux-Anbieter in Ihrer Nähe online über Fax: +49 (0) 911 / 2872-21
den richtigen Weg. Die im Folgenden die Umkreissuche. Schauen Sie einfach
gelisteten Unternehmen beschäftigen einmal rein unter:
E-Mail: [email protected]
Experten auf ihrem Gebiet und bieten http://www.it-profimarkt.de.
IT-Profimarkt
1 = Hardware 2 = Netzwerk 3 =Systemhaus 4 = Seminaranbieter 5 = Software 6 = Schulung/Beratung
Firma Anschrift Telefon Web 1 2 3 4 5 6
Schlittermann internet & unix support 01099 Dresden, Tannenstraße 2 0351-802998-1 www.schlittermann.de ط ط ط ط
Heinlein Support GmbH 10119 Berlin, Schwedter Straße 8/9b 030-405051-0 www.heinlein-support.de ط ط ط ط ط
TUXMAN Computer 10369 Berlin, Anton-Saefkow-Platz 8 030-97609773 www.tuxman.de ط ط ط ط ط
PC-COLLEGE Training GmbH 10963 Berlin, Stresemannstraße 78 0800-5777333 linux.pc-college.de ط ط
Compaso GmbH 13125 Berlin, Achillesstraße 61 030-326933-0 www.compaso.de ط ط ط ط ط
Sybuca GmbH 20459 Hamburg, Herrengraben 26 040-27863190 www.sybuca.de ط ط ط ط ط
talicom GmbH 30169 Hannover, Calenberger Esplanade 3 0511-123599-0 www.talicom.de ط ط ط ط
HECKER CONSULTING 40231 Düsseldorf, Erkrather Str. 401 0211-54248040 www.hco.de ط ط
Linux-Systeme GmbH 45277 Essen, Langenberger Straße 179 0201-298830 www.linux-systeme.de ط ط ط ط ط
dass IT GmbH 50674 Köln, Händelstraße 25-29 0221-3565666-0 www.dass-it.de ط ط ط ط ط
Anzeigen
NEWS,
BLOGS
X25
& JOBS
Immer aktuell informiert mit dem LINUX UND OP EN SOURCE
serem Newsletter
topaktuell mit un
COMMUNITY NEWSLETTER!
www.linux-community.de/newsletter www.linux-magazin.de/subscribe
92 www.linux-magazin.de 12.2023
IT-Profimarkt Service
IT-Profimarkt
os-cillation GmbH 57072 Siegen, Hohler Weg 75 0271-313680 www.os-cillation.de ط ط ط
LinuxHaus Stuttgart 70565 Stuttgart, Hessenwiesenstraße 10 0711-2851905 www.linuxhaus.de ط ط ط ط ط
Manfred Heubach EDV und Kommunikation 73730 Esslingen, Hindenburgstraße 171 0711-4904930 www.heubach-edv.de ط ط ط ط
in-put – Das Linux-Systemhaus GmbH 75179 Pforzheim, Kurze Steig 31 07231- 440785 -0 www.in-put.de ط ط ط ط ط ط
Tralios IT GmbH 76133 Karlsruhe, Douglasstraße 24-26 0721-94269664 www.tralios.de ط ط ط ط ط
Concat AG 81829 München, Konrad-Zuse-Platz 8 089-89080500 www.synergysystems.de ط ط ط ط ط
B1 Systems GmbH 85088 Vohburg, Osterfeldstraße 7 08457-931096 www.b1-systems.de ط ط ط ط ط
Tuxedo Computers GmbH 86159 Augsburg, Alter Postweg 101 0821-89982992 www.tuxedocomputers.com ط ط ط ط
OSTC Open Source Training and Consulting GmbH 90425 Nürnberg, Waldemar-Klink-Straße 10 0911-3474544 www.ostc.de ط ط ط ط ط ط
LinuxCampus.net A-2700 Wiener Neustadt, Brodtischgasse 4 +43 (0)2622-42255-20 www.LinuxCampus.net ط ط
Siedl Networks GmbH A-3500 Krems a. d. Donau, Dr.-Franz-Wilhelm-Str. 2 +43 (0)2732-71545-0 www.siedl.net ط ط ط ط ط
CATATEC CH-3013 Bern, Dammweg 43 +41 (0)31-3302630 www.catatec.ch ط ط ط
Anzeigen
EDITION CC-Lizenz:
Frei kopieren und
weiter verteilen!
Netzwerke
Systeme
12.2023 www.linux-magazin.de 93
Service README
stphot
ostph
© tto 123 F
to,123R
oto,
README
In jedem Artikel in diesem Magazin liefert eine Reihe spezieller Textauszeichnungen und
hilfreicher grafischer Elemente wichtige Zusatzinformationen zum Text. Jörg Luther
Der Mensch lebt nicht vom Text allein: Der „Umbruchhaken“ am Ende der ersten dem ein blauer Pfeil nach rechts weist: 1.
Zu so gut wie jedem Artikel im Linux- Zeile des Codes verweist hier darauf, dass Wenn Sie häufig im WWW unterwegs
Magazin gehört eine Reihe von Zusatz- es sich eigentlich bei dem Codesegment sind, ist Ihnen ein solches oder ähnliches
informationen, die das bloße Narrativ um eine einzige Eingabezeile handelt, Element dort mit Sicherheit schon be-
um weiterführende Inhalte ergänzen. die lediglich aus Platzgründen im Druck gegnet: Im Heft wie im Netz bezeichnet
Manche davon integrieren sich direkt umbrochen werden musste. In Listing- es den Verweis auf eine weiterführende
in den Textfluss, andere stehen als ge- Kästen gibt es diesen Umbruchhaken Information.
sonderte grafische Elemente in einer der nicht, hier ist jede Zeile farbig hinterlegt. Im Netz kann man sich durchklicken,
Textspalten. Alle diese Elemente folgen Doch zurück zur Kursivierung: Sie kann auf dem Papier funktioniert das leider
gewissen Konventionen, die denen, die außer Platzhaltern auch andere Elemente nicht. Um an die Links zum Artikel zu
sie kennen, das Verständnis des Texts bezeichnen, zum Beispiel Paketnamen gelangen, blättern Sie ans Ende des Bei-
erleichtern oder aufzeigen, auf welchem und Benutzerkonten, etwa build-essential trags, wo Sie einen Kasten Weitere Infos
Weg sie an zusätzliches Material gelangen und root. Aber auch Menüpunkte dru- und interessante Links finden. Entweder
können. Da diese Konventionen nicht cken wir kursiv ab, wobei in Menüfolgen tippen Sie die dort angegebene URL
immer ganz intuitiv ausfallen, wollen wir eine Pipe die einzelnen Elemente trennt: www.lm-online.de/qr/Nummer in einen
sie im Folgenden kurz erläutern. Sonstiges | Textkodierung | Unicode. Webbrowser ein – das führt Sie auf eine
Webseite mit allen Links zum Artikel –,
oder Sie scannen mit dem Smartphone
Typografische Konventionen Tasten und Tastenfolgen
oder dem Tablet den im Kasten ebenfalls
Der Fließtext jedes Artikels im Linux- Begegnet Ihnen im Text ein Buchstabe abgedruckten QR-Code ein und surfen
Magazin folgt typografischen Konven- oder eine Buchstabenfolge in eckigen auf diesem Weg zur Seite mit den Links.
tionen, die die Orientierung erleichtern Klammern, wie [Esc], handelt es sich da- Apropos QR-Code: In manchen Artikeln
und Elemente leichter identifizierbar bei um eine symbolische Taste, die für finden Sie auch einen Kasten Dateien
machen sollen. So hebt eine blaue einen Tastendruck steht. Als Schreibweise zum Artikel herunterladen unter mit der
Einfärbung Verweise auf Tabellen und dient dabei grundsätzlich die Beschrif- URL www.lm-online.de/dl/Nummer. Er
Kästen hervor: siehe Kasten Kastentitel. tung der Tasten einer deutschen Tastatur. funktioniert analog zum Kasten mit den
Die Kursivierung signalisiert hier, wie in Ein Druck auf [T] erzeugt also ein kleines Links und bringt Sie auf eine Webseite,
vielen anderen Fällen, eine symbolische „t“, die Kombination [Umschalt]+[T] ein die auf herunterladbare Dateien zum
Bezeichnung; in einem Codebrocken großes „T“. Das Pluszeichen zwischen den Artikel verweist. In vielen Fällen handelt
könnte das etwa so aussehen: Tasten signalisiert, dass man sie gleich- es sich dabei um die zugehörigen Lis-
zeitig drücken muss, ein Komma dagegen, tings. Das auf dieser Seite abgedruckte
$ cat "EinTextbrocken" >> ® dass es sie nacheinander zu betätigen Exemplar dient allerdings lediglich als
Ausgabe.txt gilt. Das allseits beliebte Copy & Paste Beispiel und führt ins Nirgendwo. Q
gelingt also mit [Strg]+[C], [Strg]+[V].
94 www.linux-magazin.de 12.2023
WIEDER AM FALSCHEN
ENDE GESPART?
DIE PREMIUM-
WÄRMELEITPASTE
FÜR GAMER!
www.pcgh-gear.de
Service Inserenten
Inserenten
B1 Systems GmbH www.b1-systems.de 1, 100 LinuxUser www.linux-user.de 77, 93, 96
Computec Media GmbH www.computec.de 51, 95 mitp-Verlag www.mitp.de 7
Fernschule Weber GmbH www.fernschule-weber.de 92
PC Games Hardware www.pcgameshardware.de 71, 91
Heinlein Consulting GmbH www.heinlein-support.de 9
Raspberry Pi Geek www.raspberry-pi-geek.de 27
Informatik Aktuell www.it-tage.org 67
Schlittermann internet & unix support www.schlittermann.de 93
IT-Profimarkt www.it-profimarkt.de 43
Thomas Krenn AG www.thomas-krenn.com 2
Linux-Community www.linux-community.de 73, 92
Linux-Magazin www.linux-magazin.de 33, 47, 61, 98 TUXEDO Computers GmbH www.tuxedocomputers.com 99
Linux-Magazin Online www.linux-magazin.de 45, 57, 83, 87, 92 Einem Teil dieser Ausgabe liegt eine Beilage der Firma Strato AG (www.strato.de) bei.
Linuxhotel www.linuxhotel.de 13 Wir bitten unsere Leser um freundliche Beachtung.
Autoren
Autor/-in Artikel Seite Mike Schilli Auf Antwort warten 30
Erik Bärwaldt Lademeister 38 Mike Schilli Suche im Einmachglas 84
Markus Feilner "Wir brauchen Sie!" 14
Carina Schipper Tux liest 66
Friedhelm Greis Sicherheitsalbtraum? 64
Mirko Sonntag Musterhafte Software 16
Rainer Grimm Neu in der Library 79
Mark Vogelsberger Top-Erpresser 72
Martin Gerhard Loschwitz Ein Kracher 52
Mark Vogelsberger Gruppenbildung 68
Martin Gerhard Loschwitz Flurfunk 58
Mike Müller Einzigartig 24 Uwe Vollbracht Tooltipps 36
Events
03.-05.11.2023 10.-12.11.2023 11.-14.12.2023
Ubuntu Summit 2023 Tux-Tage 2023 Frankfurter IT-Tage
Riga, Lettland Online Frankfurt a. M.
https://events.canonical.com/event/31/ https://www.tux-tage.de https://www.ittage.informatik-aktuell.de
AUSGABE VERPASST?
6,50 €
ALLE ARTIKEL DES JAHRGANGS 2022 . ............
en
zzgl. Versandkost
ABONNEMENT
Preise Print Deutschland Österreich Schweiz
Probeabo (3 Ausgaben)
No Media-Ausgabe € 17,00 € 17,00 € 17,00
DVD-Ausgabe € 21,00 € 21,00 € 21,00 Ein Unternehmen der MARQUARD MEDIA GROUP AG
Verleger: Jürg Marquard
Jahresabo (12 Ausgaben)
No-Media-Ausgabe € 92,00 € 100,00 € 107,00 Redaktion Computec Media GmbH
Redaktion Linux-Magazin
DVD-Ausgabe € 112,00 € 120,00 € 127,00 Dr. -Mack-Straße 83
Jahres-DVD zum Abo 1 € 6,70 € 6,70 € 6,70 90762 Fürth
Telefon: (0911) 2872-110
Preise Digital Deutschland Österreich Schweiz
E-Mail: [email protected]
Heft-PDF Einzelausgabe € 8,50 € 8,50 € 8,50 Web: http://www.linux-magazin.de
Digtal-Abo (12 Ausgaben) € 84,99 € 84,99 € 84,99 Geschäftsführer Christian Müller, Rainer Rosenbusch
Kombi Digital + Print € 104,00 € 112,00 € 119,00
Chefredakteur,
(No-Media-Ausgabe) (12 Aus-
gaben) Brand/Editorial Director Jörg Luther (V.i.S.d.P.), [email protected] (jlu)
Stv. Chefredakteur Jens-Christoph Brendel, [email protected] (jcb)
Kombi Digital + Print € 124,00 € 132,00 € 139,00 Redaktionsltg. Online Ulrich Bantle, [email protected] (uba)
(DVD-Ausgabe) (12 Ausgaben) Redaktion Carina Schipper, [email protected] (csi)
nur erhältlich in Verbindung mit einem Jahresabo Print Ständige Mitarbeiter Rainer Grimm, Martin Loschwitz, Jürgen Quade, Thomas Reuß (tre), Mike Schilli,
Schüler- und Studentenermäßigung: 20 Prozent gegen Vorlage eines Schülerausweises Tim Schürmann, Mark Vogelsberger, Uwe Vollbracht, Carsten Zerbst
oder einer aktuellen Immatrikulationsbescheinigung. Der aktuelle Nachweis ist bei Verlängerung neu zu Schlussredaktion Sabine Schmitt
erbringen. Andere Abo-Formen, Ermäßigungen im Ausland etc. auf Anfrage. Adressänderungen bitte um- DELUG-DVD Tim Schürmann, [email protected]
gehend beim Kundenservice mitteilen, da Nachsendeaufträge bei der Post nicht für Zeitschriften gelten. Grafik Judith Erb (Rohmaterial Titelseite: Siarhei Yurchanka,123RF.com)
Bildnachweis 123RF.com, Fotolia.de, Photocase.com, Pixelio.de, freeimages.com und andere
12.2023 www.linux-magazin.de 97
Vorschau
auf 01/2024
Die nächste Ausgabe
erscheint am 01.12.2023
3R com
c m
BITTE BEACHTEN SIE:
23RF.
Identity Management
12
hov / 1
Aufgrund einer Umstellung beim Vertrieb
Für das Verwalten digitaler Identitäten acchov
ga
g
© dollg erscheint das Linux-Magazin ab sofort am
existieren in der Open-Source-Welt ver- ersten Freitag statt wie bislang am ersten
schiedene Lösungen, die teils auch als Donnerstag eines Monats.
gehostete Services angeboten werden.
Der Schwerpunkt der nächsten Ausgabe
des Linux-Magazins beleuchtet dieses Fingerpointing Malen nach Zahlen
Thema näher und stellt Keycloak vor, das
ein Identitäts- und Zugangsmanagement Die Setups in der IT werden stetig kom- Hinter allen Tricks, Bilder mittels Filtern
für moderne Anwendungen und Dienste plizierter, für das gewünschte Ergebnis zu schärfen und zu schönen, steckt pure
mit Single Sign-on ermöglicht. Als Alter- müssen immer mehr Komponenten zu- Mathematik. Wir erläutern anhand zahl-
native untersuchen wir im selben Artikel sammenspielen. Geht etwas schief, führt reicher Beispiele, wie solche Filter funk-
Octa, eine Identity-Management-Platt- das oft dazu, dass sich niemand verant- tionieren, wie sie aufgebaut sind und wie
form, die damit wirbt, sich benutzer- wortlich fühlt und stattdessen alle mit dem sie sich in Python implementieren lassen.
freundlich, herstellerneutral und nahtlos Finger auf die anderen deuten. Wir zeigen, Unter anderem machen wir damit ein
in jeden Tech-Stack integrieren zu lassen. wie man dieser Sackgasse entkommt. verblichenes Notenblatt wieder leserlich.