(Bild: fizkes/Shutterstock.com)
Stellenanzeigen gleichen sich üblicherweise wie ein Ei dem anderen, statt den ersten individuellen Eindruck zu vermitteln, den man von einem Unternehmen erhält.
Wer sich heutzutage auf eine Stelle in der IT bewirbt, bekommt in der Regel über kurz oder lang ein PDF zu Gesicht, in dem die ausgeschriebene Position näher umrissen wird. Vergleicht man mehrere dieser Stellenausschreibungen, fällt auf, dass sie einander so stark ähneln, dass kaum ein Unterschied zwischen zwei Unternehmen auszumachen ist.
Abgesehen von etlichen Jahren technischer Expertise und einem abgeschlossenen Hochschulstudium oder einer vergleichbaren Ausbildung werden üblicherweise Teamfähigkeit, Flexibilität und ähnliche nicht näher definierte "Werte" gefordert.
Geboten wird im Gegenzug die Mitarbeit in einem mehr oder weniger jungen und dynamischen Team in einem spannenden Umfeld, eine Monatskarte für den ÖPNV, Vergünstigungen im ortsansässigen Fitnessstudio oder dem Supermarkt, und ein täglich frisch gefüllter Obstkorb.
Das ist das, womit Unternehmen im 21. Jahrhundert glauben, sich von anderen Unternehmen abheben zu können. Weil aber alle Unternehmen dieser Meinung sind, gleichen die Stellenausschreibungen abgesehen von Unternehmensname und -logo wie ein Ei dem anderen. Mit anderen Worten: Sie sind praktisch austauschbar.
Für die Unternehmen ist das in verschiedener Hinsicht kritisch. Zum einen verpassen sie bereits die erste Möglichkeit, einen individuellen Eindruck zu hinterlassen. Stattdessen bleibt hängen, dass anscheinend kaum ein Unternehmen verstanden hat, dass heutzutage mehr gefordert werden darf als eine lieblos in PDF-Form gebrachte Zeitungsanzeige, die inhaltlich und stilistisch aus den 90er-Jahren stammt.
Zum zweiten führen derartige Stellenausschreibungen aber auch dazu, dass sich potenzielle Bewerberinnen und Bewerber kein adäquates Bild von einem Unternehmen machen können – und sich dann entweder nicht oder auf unpassende Jobs bewerben. Das erste Szenario ist schade, weil ein Mensch und ein Unternehmen, die gut zusammenpassen würden, nicht zueinanderfinden. Das zweite ist lästig, weil es letztlich Zeitverschwendung ist, und zwar für beide Parteien.
All das habe ich im Juli 2022 auf YouTube in einem Video mit dem Titel Stellenanzeigen sind alle gleich (schlecht) [1] thematisiert. Gleichzeitig habe ich aber auch einen Vorschlag gemacht, wie eine Alternative aussehen könnte.
Denn ob es letztlich zwischen einer Bewerberin oder einem Bewerber auf der einen Seite und einem Unternehmen auf der anderen langfristig passt, hängt nur sehr bedingt von Technologien ab: Diese wandeln sich ohnehin alle paar Jahre, und stetige Weiterbildung ist in der IT daher unabdingbar. Zudem lässt sich die technische Eignung relativ schnell ermitteln.
Ob sich beide Parteien miteinander wohlfühlen, hängt auch nicht von einer ÖPNV-Fahrkarte oder einem Obstkorb ab. Beides sind natürlich nette Schmankerl, aber kaum jemand dürfte allein davon die Wahl des künftigen Arbeitgebers abhängig machen.
Viel wichtiger und grundlegend entscheidend ist hingegen, ob es ein gemeinsames Wertesystem gibt und ob die Chemie stimmt: Ein Unternehmen kann technologisch noch so passend sein und die denkbar tollsten Benefits anbieten – wenn es grundlegend unterschiedliche Überzeugungen gibt, wird man auf Dauer kaum gemeinsam glücklich werden.
Das ist aber unter Umständen schwierig herauszufinden. Ob man technologisch zueinander kompatibel ist, ist eine Sache von wenigen Sätzen: Entweder kann man sich auf einen gemeinsamen Nenner einigen oder nicht. Wichtiger ist das Drumherum: Entwicklerinnen oder als Entwickler, denen etwa das Testen wichtig ist, werden nicht in einem Unternehmen glücklich werden, das Tests als lästig ansieht.
Doch wie ein Unternehmen "tickt", das merkt man unter Umständen erst nach Wochen oder Monaten. Theoretisch ließe sich das auch bereits im Bewerbungsgespräch thematisieren, immerhin gibt es dafür in der Regel die berühmten abschließenden zehn Minuten, in denen es heißt: "Haben Sie denn noch Fragen an uns?"
Die Erfahrung zeigt, dass (zu) viele Bewerberinnen und Bewerber oftmals nicht wissen, was sie in dieser Situation fragen sollen – und wenn man wirklich vorbereitet ist und viele Fragen mitbringt, reicht die Zeit in den seltensten Fällen aus, weil Unternehmen nicht darauf eingestellt sind, dass jemand tatsächlich mehr als zwei Fragen stellt.
Wie könnte also eine Alternative zu den heutigen Stellenausschreibungen aussehen?
Statt zu versuchen, sich auf mehr oder weniger formale Art in einem Dokument mit ein paar Schlagworten auszuzeichnen, könnten Unternehmen stärker auf einen persönlichen und vor allem authentischen Austausch zu setzen. Das Problem dabei ist allerdings, dass das im Vorfeld schwierig zu gestalten ist, denn man möchte ja bereits im Vorfeld sicherstellen, dass Bewerberinnen und Bewerber einen weitaus besseren Eindruck erhalten, und sich dann viel zielgerichteter bewerben können – was nicht nur die Chancen für beide Seiten erhöht, sondern auch allen Beteiligten Zeit spart.
Was also tun?
Aus dieser Frage heraus ist die Idee entstanden, dass ich mich selbst (quasi stellvertretend) bei Unternehmen "bewerbe", wir davon ausgehen, dass wir technologisch zueinanderpassen, und wir dann ein sehr ausführliches Gespräch führen, in dem ich all meine Fragen stellen kann. Im Prinzip also eine nachgestellte Bewerbungssituation, die dabei (natürlich mit dem Einverständnis aller Beteiligten) auf Video aufgezeichnet wird.
Dieses Format haben wir im vergangenen Jahr bereits einige Male durchgeführt, und auf dem Weg sind drei Videos entstanden:
Auch wenn die Situation in den Videos nicht ganz einer echten Bewerbung entspricht, zeichnet ein solches Gespräch doch ein deutlich genaueres Bild von dem jeweiligen Unternehmen als es ein knappes PDF je könnte.
Hoch anzurechnen ist den beteiligten Unternehmen aus meiner Sicht vor allem, dass sie sich auf dieses Experiment eingelassen und an dem Format teilgenommen haben, was – wie man hört – auch von Erfolg gekrönt war: Die ein oder andere Einstellung hat es bedingt durch diese Videos bereits gegeben.
Wir möchten dieses Format auch in diesem Jahr fortsetzen. Das heißt: Wer ein Unternehmen vertritt, das auf der Suche nach weiteren Mitarbeiterinnen und Mitarbeitern ist, darf sich gerne bei mir melden. Die Kontaktmöglichkeiten finden sich unter diesem Video [5].
Viel wichtiger jedoch: Wer auf der Suche nach einem neuen Job ist oder jemanden kennt, für die oder den eine der genannten Stellen interessant sein könnte, kann sich gerne das jeweilige Video anschauen beziehungsweise weiterleiten. Vielleicht gelingt es uns auf dem Weg gemeinsam, die Situation mit den Stellenanzeigen zumindest etwas zu verbessern.
URL dieses Artikels:
https://www.heise.de/-7544246
Links in diesem Artikel:
[1] https://www.youtube.com/watch?v=Ub0oEmv147A
[2] https://www.youtube.com/watch?v=G9VAtkKS7ZE
[3] https://www.youtube.com/watch?v=_PgZQgzVSIE
[4] https://www.youtube.com/watch?v=8njAGQBpN_0
[5] https://www.youtube.com/watch?v=Ub0oEmv147A
[6] mailto:rme@ix.de
Copyright © 2023 Heise Medien

Gleisanlagen in Maschen
(Bild: MediaPortal der Deutschen Bahn)
In den letzten Jahren gab es verschiedene Veränderungen im Java Release Train, die zu Verwirrung und Missverständnissen in der Community geführt haben.
Bereits seid dem Release von Java 9 in 2017 werden neue Java-Plattform-Releases durch einen neuen und deutlich besser definierten Release Train veröffentlicht. Leider waren die Aussagen zu den verschiedenen Änderungen und Verbesserungen des Release Train oft nur sehr vage und teils gab es sogar falsche Gerüchte in der Community. Vor allem Oracle hat hier eine schlechte Pressearbeit geliefert und den neuen Release Train nicht so transparent und sauber beschrieben, wie es hätte sein müssen. Da mit dem Release von Java 17 erneut Änderungen in den Release Train eingeflossen sind, möchte ich diesen Post nutzen, um den konkreten Ablauf zu beschreiben.
Bevor wir aber auf den neuen Release Train schauen, ist es sinnvoll, einmal auf die Releases von alten Java-Versionen zu blicken. Das folgende Diagramm zeigt den Release-Zeitpunkt und die Lebensdauer (Lifecycle) von Java 6, 7 und 8. Der Lifecycle der Versionen ist hierbei durch die Verfügbarkeit von kostenlosen Security-Updates der jeweiligen Version definiert. Sobald es für eine der Versionen keine kostenlosen Updates mehr gab oder gibt, endet im Diagramm deren Lebensdauer.

Im Diagramm kann man unterschiedliche Punkte erkennen. Wichtig ist erst einmal, dass immer ein Zeitraum existiert, in dem noch wenigstens zwei Releases mit Security-Updates unterstützt werden. Diese Zeit dient Usern der Plattform als Zeitspanne zur Migration ihrer Anwendungen auf die jeweils neuere Java-Version. Hinzu kommt, dass die Abstände der Releases von neuen Versionen unterschiedlich sind. Das liegt daran, dass diese Java-Versionen veröffentlicht wurden, sobald alle für die jeweilige Version definierten Features implementiert wurden.
Für jede dieser alten Java-Versionen wurden die zu implementierenden Features innerhalb eines Java Specification Requests (JSR) im Java Community Process (JCP) definiert. Für Java 8 kann man beispielsweise unter JSR 337 [1] in Sektion 3 eine Liste der einzelnen Features finden. Diese sind hierbei wiederum auch als JSRs spezifiziert, wobei die Einführung von Lambda-Ausdrücken in Java im JSR 335 und die Date & Time API in JSR 310 definiert wurde.
Da im Vorfeld fest definierte wurde, welche JSRs in einer neuen Java-Version umgesetzt werden sollen, konnte der Release-Zeitpunkt nie fest definiert werden. Das hat teils zu langen Zeitspannen zwischen den Veröffentlichungen der Versionen geführt.
Bei dem gesamten Prozess ist es noch wichtig anzumerken, dass diese Releases keine Versionen sind, die beispielsweise für das Oracle-JDK spezifisch sind. Alle diese Versionen werden im OpenJDK erstellt. Somit kann jeder Java-Vendor einen Build seiner Runtime mit der aktuellen Version anbieten, ohne dass es Unterschiede in der Funktionalität gibt.
Mit Java 9 hat sich diese Vorgehensweise aber stark verändert. Statt langlebiger Releases mit einem unbestimmten Erscheinungsdatum und Lebenszyklus erscheint nun alle sechs Monate ein neues Major Release der Java-Plattform. Das passiert wie bisher im OpenJDK, aber die Sourcen des OpenJDK sind seit Java 17 komplett zu GitHub migriert, wo man die genauen Workflows deutlich besser nachvollziehen kann. Da der Veröffentlichungszeitpunkt eines Release fest definiert ist, können die Features nicht mehr im Vorfeld bestimmt werden. Viel mehr enthält eine neue Java Version alle zu diesem Zeitpunkt abgeschlossen Features. Diese Features werden als JDK Enhancement Proposals (JEP) definiert und können alle auf der Webseite des OpenJDK eingesehen werden [2]. Diese JEPs kann man sich hierbei ähnlich zu Epic Issues vorstellen. Ab Java 10 kann man dann auch auf der jeweiligen Seiten des Releases die Liste der im Release enthaltenen JEPs sehen (siehe Beispiel für Java 11 [3]).
Da manche diese Features längere Zeit zum Entwickeln benötigen und starke Auswirkung auf die Java-Plattform haben, wurde für JEPs der Preview- und Incubator-Status eingeführt. Neue APIs können durch Letzteren bereits zum Testen in Java-Versionen landen, bevor sie in einer künftigen Version finaler Bestandteil der Java-Klassenbibliothek werden. Solche APIs liegen in einem speziellen Incubator Package und werden erst mit ihrem finalen Release an ihr korrektes Package verschoben. Der Preview-Status kann genutzt werden, um neue Sprachfeatures der Java-Plattform bereits im Vorfeld verfügbar zu machen. Solche Features muss man über einen Kommandozeilenparameter aktivieren:
$ javac HelloWorld.java
$ javac --release 14 --enable-preview HelloWorld.java
$ java --enable-preview HelloWorld
Mit einem neuen Release alle sechs Monate hat sich auf die Lebensdauer von Java-Versionen deutlich verändert. Hierbei wird nun zwischen Long-Term Support (LTS) und normalen (non LTS) Versionen unterschieden. Letztere haben eine Lebensdauer von genau sechs Monaten bis zum Release der nächsten Version. So hatte Java 14 eine Lebensspanne von März 2020 bis September 2020. Als LTS gekennzeichnete Versionen werden im OpenJDK länger gepflegt und erhalten über einen längeren Zeitraum Sicherheitsupdates.
Für das LTS-Release Java 17 wird es nach heutigem Kenntnisstand bis 2027 Updates geben. Eine gute Übersicht der LTS Versionen bietet Eclipse Adoptium in der Supportübersicht [4]. Auch wenn LTS-Updates keine neuen Features enthalten, fixen sie doch alle bekannten Sicherheitslücken. Daher heißen solche Releases auch Critical Patch Update (CPU). Für Java-Versionen, die nicht als LTS-Versionen definiert sind, erscheinen zwei geplante CPU-Releases. So wurde für Java 16 nach dem ersten Release im März 2021 die Version 16.0.1 im April 2021 und 16.0.2 im Juli 2021 als CPU veröffentlicht. Mit dem Erscheinen von Java 17 wurde festgelegt, dass es alle zwei Jahre ein neues LTS Release von Java geben wird. Hierdurch wird Java 21 im September 2023 das nächste LTS-Release sein.
Basierend auf diesen Definitionen sieht der Release-Graph der Java Versionen seid Java 9 folgendermaßen aus:

Da alle Arbeit im OpenJDK erfolgt, kann der Veröffentlichungszeitpunkt von einzelnen Java Distributionen leicht abweichen. Sobald das Release im OpenJDK freigegeben ist, startet die Arbeit zum Erstellen der Distributionen wie Eclipse Temurin, Oracle JDK oder Azul Zulu. Hierbei ist jedem Hersteller freigestellt, die Sourcen des OpenJDK um zusätzliche Funktionen zu erweitern, um sich durch Alleinstellungsmerkmal abzuheben. Manche wie Azul oder Bellsoft bündeln beispielsweise JavaFX in ihren Builds.
In früheren Versionen hat vor allem Oracle mit Tools wie WebStart oder Mission Control versucht, sich von anderen OpenJDK-Builds abzuheben. Das hat allerdings zu Kompatibilitätsproblemen in der Community geführt und wird zum Glück heute in der Regel nicht mehr praktiziert.
URL dieses Artikels:https://www.heise.de/-7350614
Links in diesem Artikel:[1] https://www.jcp.org/en/jsr/detail?id=337[2] https://openjdk.java.net/jeps/0[3] https://openjdk.java.net/projects/jdk/11/[4] https://adoptium.net/de/support/[5] mailto:rme@ix.de
Copyright © 2023 Heise Medien
(Bild: SWstock / Shutterstock.com)
Web-Platform-APIs erlauben Zugriff auf das lokale Dateisystem oder die Zwischenablage. Zur bequemen Nutzung der Schnittstellen in C# stehen NuGet-Pakete bereit.
Progressive Web Apps [1] (PWA) sind ein webbasiertes Anwendungsmodell. Einmal implementiert lassen sie sich überall dort ausführen, wo ein halbwegs moderner Webbrowser zur Verfügung steht – Offlinebetrieb sowie Icon auf dem Homescreen oder in der Taskleiste inklusive.
Dazu passend brachten Initiativen wie Project Fugu [2] in der Vergangenheit weitere Web-Plattform-Schnittstellen ins Web. Dazu zählen etwa die File System Access API zum Zugriff auf das lokale Dateisystem, die Async Clipboard API zum Verwenden der Zwischenablage oder die Web Share API zur Integration in die Funktionalität des Betriebssystems zum Teilen von Inhalten. Diese Schnittstellen stehen allen Webanwendungen zur Verfügung.
Andere APIs setzen voraus, dass die Webanwendung auf dem System des Users installiert ist. Das gilt beispielsweise für die Badging API, die eine kleine Plakette auf dem Symbol der PWA darstellt, oder die File Handling API, die eine PWA bei Installation als Bearbeitungsprogramm für bestimmte Dateierweiterungen registriert.
Auch Microsofts Single-Page-App-Framework Blazor WebAssembly [3] eignet sich zum Implementieren von PWAs. In der Projektvorlage für Blazor-WebAssembly-Projekte können Entwickler und Entwicklerinnen einfach ein Kontrollkästchen setzen, um die PWA-Unterstützung zu aktivieren.
Blazor WebAssembly wird gerne von .NET-Entwicklern gewählt, die ihre Webanwendung in C# schreiben möchten. Natürlich kommen die Web-Plattform-Schnittstellen sämtlichen Webentwicklerinnen zugute, auch Nutzern von Blazor WebAssembly. Da die APIs in der Regel aber JavaScript-basiert sind, braucht es zur einfachen Nutzung in der C#-Welt geeignete Wrapper.
Glücklicherweise stehen für viele interessante APIs bereits quelloffene Wrapper zur Verfügung, die sich via NuGet in das Blazor-WebAssembly-Projekt installieren lassen. Hinweise zum Verwenden der NuGet-Pakete und zum Browser-Support der Schnittstellen finden sich jeweils in Klammern verlinkt:
Nachstehend wird das NuGet-Paket Thinktecture.Blazor.Badging vorgestellt. Die Badging API eignet sich etwa für Todo-Listen-Apps oder E-Mail-Clients, die darüber die Liste zu erledigender Todos oder ungelesener E-Mails darstellen. Ein prominenter Verwender der API ist die Twitter-PWA.
Die API wird von Chromium-basierten Browsern seit Version 81 auf macOS und Windows unterstützt. In der aktuellen Beta-Version 1 von iOS und iPadOS 16.4 liefert auch Apple die Unterstützung für die Schnittstelle mit [16].
Zunächst muss das NuGet-Paket ins Blazor-WebAssembly-Projekt aufgenommen werden:
dotnet add package Thinktecture.Blazor.Badging
Als Nächstes muss der BadgingService bei der IServiceCollection registriert werden. Dies geschieht üblicherweise in der Datei Program.cs:
builder.Services.AddBadgingService();
Nicht alle APIs werden auf jedem Browser und jedem Betriebssystem unterstützt. So zeigen App-Badges unter Android etwa die Anzahl der Notifications dieser App an, weswegen die Schnittstelle hier nicht anwendbar ist. Auch steht die Schnittstelle nur dann zur Verfügung, wenn die App installiert wurde.
Daher sollten Entwickler innen und Entwickler immer das Prinzip des Progressive Enhancement [17] nutzen: Nur wenn eine Schnittstelle verfügbar ist, sollte man sie auch nutzen. Andernfalls könnte es zur Laufzeit zu einem Fehler kommen.
Ist eine Schnittstelle nicht verfügbar, sollte die Funktion in der App versteckt oder ausgegraut werden. Manchmal stehen auch Fallback-Ansätze zur Verfügung, auf die Entwicklerinnen zurückgreifen können. Im Falle der Badging API könnte etwa der Fenstertitel angepasst werden, indem die Anzahl der Mitteilungen dem Anwendungstitel in Klammern vorangestellt wird: "(3) My Cool App".
Um eine Unterscheidung zu ermöglichen, bieten die Pakete in der Regel die Methode IsSupportedAsync() an, mit der Entwickler das Vorhandensein der API prüfen können:
var isSupported = await badgingService.IsSupportedAsync();
if (isSupported)
{
// enable badging feature
}
else
{
// use alternative implementation
}
Steht die API zur Verfügung, lässt sich das Badge über die Methode SetAppBadgeAsync() setzen. Diese Methode nimmt eine Zahl entgegen, die auf dem Badge dargestellt werden sollen. Alternativ kann auch "null" übergeben werden, in diesem Fall wird eine generische Plakette dargestellt.
await badgingService.SetAppBadgeAsync(3);
Und so erscheint dann das gewünschte Badge auf dem App-Icon:
Über die vergangenen Jahre ist das Web immer leistungsfähiger geworden: Microsoft hat dank der File System Access API seinen Codeeditor Visual Studio Code in den Browser bringen können [18] (vscode.dev [19]). Adobe nutzt die File System API in seiner Webversion von Photoshop [20]. Gleich mehrere APIs vereinigt der webbasierte Microsoft-Paint-Klon paint.js.org [21] (paint.js.org [22]) in sich.
Dank der Wrapper-Pakete können auch Blazor-WebAssembly-Anwendungen bequem auf die neuen, leistungsfähigen Web-Plattform-APIs zugreifen. Die Schnittstellen integrieren sich meistens nahtlos in die C#-Welt. Und damit können auch .NET-Entwickler komplexe Produktivitätsanwendungen direkt für den Browser schreiben.
URL dieses Artikels:
https://www.heise.de/-7520799
Links in diesem Artikel:
[1] https://www.heise.de/blog/Progressive-Web-Apps-Teil-1-Das-Web-wird-nativ-er-3733624.html
[2] https://www.heise.de/blog/Fugu-Die-Macht-des-Kugelfisches-4255636.html
[3] https://www.heise.de/blog/Angular-oder-Blazor-Eine-Entscheidungshilfe-fuer-Webentwickler-6197138.html
[4] https://www.w3.org/TR/clipboard-apis/#async-clipboard-api
[5] https://www.nuget.org/packages/Thinktecture.Blazor.AsyncClipboard
[6] https://w3c.github.io/badging/
[7] https://www.nuget.org/packages/Thinktecture.Blazor.Badging
[8] https://fs.spec.whatwg.org/
[9] https://www.nuget.org/packages/KristofferStrube.Blazor.FileSystem
[10] https://wicg.github.io/file-system-access/
[11] https://www.nuget.org/packages/KristofferStrube.Blazor.FileSystemAccess
[12] https://github.com/WICG/file-handling/blob/main/explainer.md
[13] https://nuget.org/packages/Thinktecture.Blazor.FileHandling
[14] https://www.w3.org/TR/web-share/
[15] https://www.nuget.org/packages/Thinktecture.Blazor.WebShare
[16] https://www.heise.de/blog/Web-Push-und-Badging-in-iOS-16-4-Beta-1-Mega-Update-fuer-Progressive-Web-Apps-7518359.html
[17] https://developer.mozilla.org/en-US/docs/Glossary/Progressive_Enhancement
[18] https://www.heise.de/news/Visual-Studio-Code-laeuft-ab-sofort-im-Browser-6224465.html
[19] https://vscode.dev
[20] https://www.heise.de/blog/Analyse-Photoshop-jetzt-als-Webanwendung-verfuegbar-6229321.html
[21] https://www.heise.de/blog/paint-js-org-MS-Paint-Remake-als-PWA-mit-Web-Components-und-modernen-Web-Capabilities-6058723.html
[22] https://paint.js.org
[23] mailto:map@ix.de
Copyright © 2023 Heise Medien
A few highlights ✨:
cli/sensitive-log.sh to help e.g. Apache clear logs for sensitive information such as credentials #5001
This release has been made by several new contributors @axeleroy, @hippothomas, @mincerafter42, @sad270, @zhzy0077, in addition to our regular contributors @Alkarex, @ColonelMoutarde, @Frenzie, @myuki, @aledeg, @marienfressinaud, @math-GH, @miicat, @nicofrand, @yzqzss ... Thank you!
Detailed tracked changes.
Full changelog:
\( or \) #4989mailto: links for webmail services #4680cli/sensitive-log.sh to help e.g. Apache clear logs for sensitive information such as credentials #5001cli/access-permissions.sh to help apply file permissions correctly #5062./extensions/ #4956font/woff #4894latest branch (instead of a tag) to track the latest FreshRSS stable releases #5148is_writable() checks #4780lib_opml #4403
(Bild: metamorworks/Shutterstock.com)
Mit aktuellen Programmierparadigmen und Features stellt sich die Frage, ob Java die stets beworbene Abwärtskompatibilität noch gewährleisten kann.
Mit dem Slogan "Write Once, Run Anywhere" (WORA) hat Sun Microsystems ab 1995 für die Java- Plattform geworben. Dieser Slogan vereinte zwei unterschiedliche Vorteile von Java: Durch die Nutzung der JVM (Java Virtual Machine) können kompilierte Programme auf allen Plattformen ausgeführt werden, auf denen eine JVM verfügbar ist. So kann eine auf Windows kompilierte Java-Anwendung beispielsweise problemlos auf Linux in einer JVM ausgeführt werden.
Der zweite Aspekt des Slogans ist die Abwärtskompatibilität von Java. Software, die mit einer Java-Version kompiliert wurde, soll auch problemlos auf zukünftigen Java-Versionen ausgeführt werden. In den vergangenen Jahren hat sich aber bezüglich dieses Versprechens einiges geändert.
Abwärtskompatibilität sollte in Java schon immer durch die Trennung der Public und Private APIs in der Java Class Library (JCL) ermöglicht werden. Die JCL beinhaltet alle Klassen der Java-API, mit denen wir täglich arbeiten, wie etwa java.lang.String oder java.util.List. Aber auch exotischere Klassen wie sun.misc.Unsafe sind Bestandteil der JCL. Die JCL definiert zusammen mit der Java Virtual Machine (JVM) und verschiedenen Tools wie dem Java-Compiler (javac) das JDK von JavaSE, mit dem Entwickler täglich arbeiten.

Die Private API des JCL liegt zwar auf dem Classpath, sollte von Anwendungen aber nie direkt genutzt werden. Interne Änderungen im OpenJDK werden oft in diesem Bereich implementiert, wodurch mögliche Änderungen in den Schnittstellen der Private API entstehen konnten. Generell kann man sagen, dass alle Klassen der JCL, deren Packages nicht mit java.* oder javax.* beginnen, zur Private API gehören, da manche Java-Distributionen JavaFX enthalten, kann man für diese noch javafx.* hinzufügen.
Software, die zur Compile-Zeit oder Laufzeit Klassen aus der Private API nutzte, war somit bei jedem (Major-)Release von Java gefährdet, nicht mehr lauffähig zu sein. Während man die Nutzung zur Compile-Zeit direkt feststellen konnte, kam es teils bei der Nutzung zur Laufzeit beispielsweise durch Reflexion oder transitive Abhängigkeiten sogar zu unerwarteten Problemen in Produktion.
Mit Java 9 und der Einführung des Modulsystems hat sich das Ganze aber geändert. Das Modulsystem erlaubt es, APIs vor der Außenwelt zu verbergen und sie somit nur noch innerhalb des eigenen Moduls nutzbar zu machen. Hierdurch konnten die Private APIs von Java komplett verborgen werden.

Da diese privaten APIs von vielen Programmen und Libraries genutzt wurden, hätte dieser Einschnitt mit Java 9 sicherlich zu immensen Umbauten geführt. Daher hat man sich im OpenJDK dafür entschieden, dass die privaten APIs von Java 9 bis Java 15 weiterhin genutzt werden können. Hier wird lediglich eine Warnung ausgegeben, wenn die Software auf Private APIs zugreift. Dafür wurde der Parameter illegal-access eingeführt, der bei Java 9 bis 15 per Default auf warn gesetzt ist. Geändert werden konnte der Parameter einfach zum Start der JVM als Kommandozeilenparameter.
So konnte man auch in diesen Versionen durch Hinzufügen von --illegal-access=deny bereits dafür sorgen, dass ein Javaprogramm die Private APIs des JCL nicht mehr nutzen kann. Dies war dann auch das Standardverhalten von JDK 16. Hier muss man das Flag aktiv auf warn setzen, wenn man der eigenen Anwendung noch die Nutzung von Private APIs ermöglichen möchte. Mit dem LTS-Release von Java 17 wurde diese Option dann allerdings komplett entfernt. Die Werte permit, warn und debug wurden für das illegal-access Flag entfernt, wodurch es nicht mehr möglich ist, den generellen Zugriff auf Private APIs zu erlauben. Ist man mit Java 17 noch immer gezwungen Private APIs zu nutzen, so kann man dieses noch immer über das --add-opens-Flag oder dem Add-Opens-Attribut im Manifest für spezifische Module ermöglichen.
Auch Änderungen in den Tools oder der JVM können sich auf die Abwärtskompatibilität von Java auswirken. Mit Java 10 wurde beispielsweise durch das JEP 286 [1] die Java Language um die Nutzung von var erweitert. Hierdurch muss der Typ einer Variable in Java nicht mehr händisch angegeben werden, wenn er vom Compiler bestimmt werden kann. Hier einmal ein Beispiel:
var list = new ArrayList<String>(); // infers ArrayList<String>
var stream = list.stream(); // infers Stream<String>
Die Einführung von var in die Java Language hat hierbei einige Auswirkungen nach sich gezogen. Zwar wurde var nicht als Keyword zur Java-Syntax hinzugefügt, wodurch es noch immer möglich ist, var als Variablennamen zu nutzen. Der Status von var in der Java Language ist als "Reserved Type Name" (siehe JEP 286 [2]) definiert. Hierdurch ist es allerdings nicht mehr möglich, Klassen oder Interfaces var zu nennen. Auch wenn dies nur in sehr wenigen Javaprogrammen je vorgekommen sein mag, ist es doch ein Bruch in der Abwärtskompatibilität zu Java.
Die erste Version von Java wurde 1996 veröffentlicht. Da sich nicht nur Java als Programmiersprache, sondern auch Programmierparadigmen seit dieser Zeit immer weiter entwickelt haben, wurden viele APIs in Java umgestellt. Patterns, die 1996 noch typisch waren, sind heutzutage teils als veraltet. Dazu kommt, dass auch die Entwickler des OpenJDK gelegentlich Fehler machen und dadurch APIs entstehen, die man nach heutiger Kenntnis besser nicht mehr nutzen sollte.
Um Java allerdings abwärtskompatibel zu halten, wurden solche APIs nicht entfernt, wenn sie Bestandteil der Public APIs der JCL sind. Hier wurde initial in der JavaDoc vor der Nutzung gewarnt und oft wurden auch direkt alternative APIs vorgeschlagen. Durch die Einführung von Annotation mit Java 1.5 konnte dies durch die Nutzung der @Deprecated-Annotation noch einmal verbessert werden. Diese Annotation zeigt nicht nur dem Nutzer, dass eine API nicht mehr genutzt werden sollte, sondern lässt auch den Java Compiler eine Warnung (oder je nach Konfiguration sogar einen Fehler) erzeugen. Auch in IDEs wird das Ganze heute deutlich hervorgehoben, sodass man schnell sieht, ob Programmcode auf APIs zugreift, die als deprecated (veraltet) markiert sind.
Obschon das Verfahren lange funktioniert hat, entstand über die Jahre doch immer mehr Code im OpenJDK, der mit @Deprecated annotiert war und somit bei jeder Version und Änderung mit gepflegt werden musste. Auch wurde die Java-API somit immer aufgeblähter. Mit dem Einzug des Java-Modulsystems und der Aufteilung der JCL in einzelne Module tauchten noch ganz andere Probleme auf: Durch die vielen veralteten Codestellen, die nie entfernt wurden, gab es völlig wilde Abhängigkeiten im OpenJDK, die nicht einfach aufgelöst werden konnten.
Daher wurde mit Java 9 die @Deprecated-Annotation um das Attribut forRemoval erweitert. Dieses Attribut gibt an, dass eine API, die mit @Deprecated(forRemoval=true) annotiert ist, in einer zukünftigen Version von Java entfernt werden kann. Durch den neuen Release Train von Java und neuen Versionen im Sechsmonatstakt kann dies mitunter äußerst schnell gehen. Und die letzten Versionen von Java zeigen auch, dass hiervon Gebrauch gemacht wird. So wurden unter anderem die CORBA-API, verschiedene Interfaces unter java.security.acl.* oder Methoden aus dem java.lang.SecurityManager entfernt. Der java.lang.SecurityManager soll sogar komplett aus dem JCL entfernt werden.
Um die Unterschiedene und Änderungen zwischen zwei Java-Versionen überprüfen und beurteilen zu können, gibt es seit einiger Zeit die Webseite javaalmanac.io [3]. Hier können alle Unterschiede in der Java Class Library zwischen zwei Java-Versionen angezeigt werden. Da hier nicht nur Versionen mit Long-term Support (LTS) gelistet sind, sondern alle Major Releases seit Java 1.0, kann man einfach auch schon vor einer Umstellung oder sogar vor dem Erscheinen einer neuen LTS-Version von Java mit der Umstellung der eigenen Software beginnen. Neben Änderungen zeigt das Tool auch alle Klassen, Funktionen und weitere Elemente an, die mit @Deprecated annotiert wurden.

Java hat gezeigt, dass sich Programmiersprachen irgendwann zwischen einer innovativen und agilen Weiterentwicklung und einer ständigen Abwärtskompatibilität entscheiden müssen. Je älter eine Sprache wird, desto mehr Altlasten bringt sie mit sich. Viele Teile der API sind nicht mehr zeitgemäß und lassen sich nur schwer auf moderne Paradigmen adaptieren. Daher ist es sinnvoll, dass eine Sprache auch mal Altlasten über Bord wirft. Natürlich darf man dabei die User nicht vergessen und muss sensibel mit diesen Themen umgehen.
Aus meiner Sicht haben die Verantwortlichen für Java diesen Spagat gut bewältigt, indem sie die neuen Konzepte wie das Entfernen von deprecated APIs über einen langen Zeitraum angekündigt haben. Auch sind sie auf Kritik und Feedback der Community eingegangen. Hier gilt sicherlich der Umgang mit der Klasse sun.misc.Unsafe als gutes Beispiel. Deren Entfernen aus dem OpenJDK wurde sehr lange diskutiert. Für Entwickler von Frameworks und Libraries wurden auch weitere Funktionen zum OpenJDK hinzugefügt, um Abwärtskompatibilität gewährleisten zu können. Mit Multi-Release JAR-Files (JEP 238 [4]) können Jars somit spezifische Klassen für verschiedene Java-Versionen enthalten und so die Kompatibilität deutlich erhöhen.
Trotzdem kommt durch solche Änderungen mehr Arbeit auf Entwicklerinnen und Entwickler zu, die lange mit dem Wechsel zwischen Java-Versionen warten. Wenn man aber immer auf die jeweils aktuelle LTS-Version von Java umstellt und die hier beschriebenen Konzepte und Tools kennt, bleiben die Arbeiten generell überschaubar.
URL dieses Artikels:https://www.heise.de/-7342188
Links in diesem Artikel:[1] https://openjdk.org/jeps/286[2] https://openjdk.org/jeps/286[3] https://javaalmanac.io[4] https://openjdk.org/jeps/238[5] mailto:rme@ix.de
Copyright © 2023 Heise Medien
(Bild: Apple)
Apple liefert in Safari für iOS und iPadOS 16.4 Beta 1 gleich mehrere Programmierschnittstellen aus, die Webanwendungen deutlich leistungsfähiger machen.
In einem Blogbeitrag hat das WebKit-Team bekannt gegeben, dass Webanwendungen mit der frisch veröffentlichten Beta 1 von iOS und iPadOS 16.4 endlich Push-Benachrichtigungen über das Web-Push-Verfahren empfangen können [1]. Damit folgt Apple seiner Ankündigung aus dem Sommer 2022 [2]. Das ist jedoch nicht die einzige interessante Programmierschnittstelle, auf die Webentwickler in der neuen Vorabversion von Safari Zugriff haben.
Voraussetzung für die folgenden Schnittstellen und Funktionen ist unter iOS und iPadOS, dass die Webanwendung zum Home-Bildschirm des Gerätes hinzugefügt wurde. Anwender können die Installation über das Teilen-Menü und die Auswahl des Menüeintrags Zum Home-Bildschirm hinzufügen veranlassen. Das Hinterlegen von Web-Clips auf dem Home-Bildschirm ist seit dem im Januar 2008 veröffentlichten iPhone OS 1.1.3 möglich. Apple nennt auf diese Art hinterlegte Webanwendungen Homescreen Web Apps, was synonym zu Progressive Web Apps [3] (PWA) zu verstehen ist. Vom Home-Bildschirm aus gestartet erscheinen sie wie plattformspezifische Apps ohne Browserwerkzeugleisten und inklusive Auftritt im App Switcher. Einmal implementiert laufen sie überall von Mobile bis Desktop dank der zugrundeliegenden W3C-Spezifikationen Service Worker [4] und Web Application Manifest [5].
Das Web-Push-Verfahren ist eine Kombination verschiedener Spezifikationen von W3C und IETF (Push API, Notifications API und HTTP Web Push), die es Entwicklern ermöglichen, Benachrichtigungen proaktiv an ihre Benutzer zu schicken [6]. Die Information, etwa eine Instant Message oder ein Preisalarm, wird auf dem Endgerät in Form eines Notification-Banners dargestellt. Das API-Tandem wird seit vielen Jahren von Microsoft Edge, Google Chrome und Mozilla Firefox unterstützt. Unter Safari für macOS ist die Web Push API seit Version 16 verfügbar, die im September 2022 veröffentlicht wurde. Mit iOS und iPadOS erhalten nun die letzten größeren Betriebssysteme die Unterstützung dafür. Der große Vorteil des Web-Push-Verfahrens ist, dass es nur einmal implementiert werden muss und danach plattformübergreifend verwendet werden kann. Unter iOS und iPadOS erscheinen die Benachrichtigungsbanner genau so, wie sie auch von anderen Apps bekannt sind, inklusive Übertragung auf die Apple Watch und Integration in die Fokus-App.
Weniger aufdringlich als Benachrichtigungsbanner sind Badges, kleine rote Plaketten, die auf dem Symbol einer Anwendung dargestellt werden. Die Badging API [7] erlaubt es Webanwendungen, ein Badge auf dem Symbol der Anwendung auf dem Home-Bildschirm, im Dock beziehungsweise der Taskleiste darzustellen. E-Mail-Programme oder To-do-Listen-Apps nutzen diese Möglichkeit, um die Anzahl ungelesener Nachrichten oder zu erledigender Aufgaben darzustellen. Die Schnittstelle wird seit vielen Jahren von Google Chrome und Microsoft Edge unter macOS und Windows unterstützt. Auch die Twitter-PWA greift auf diese Schnittstelle zurück, um die ungelesenen Mitteilungen und Direktnachrichten zu kommunizieren. Voraussetzung dafür ist unter iOS und iPadOS, dass der Benutzer zuvor dem Empfang von Pushbenachrichtigungen zugestimmt hat.
Ebenso unterstützt die neue Safari-Version die "id"-Eigenschaft des Web Application Manifest [8]. Diese erlaubt eine eindeutige Identifizierung einer auf dem Gerät installierten Webanwendung, um mehrere Installationen zu vermeiden und die Benachrichtigungseinstellungen über mehrere Geräte hinweg zu synchronisieren. Allerdings gibt Safari Usern die Möglichkeit in die Hand, den Anzeigenamen der Anwendung anzupassen. Wählt der Benutzer einen anderen Namen, werden doch wieder mehrfache Installationen einer App möglich, etwa um sie mit unterschiedlichen Profilen nutzen zu können.
Erstmals erhalten Browser von Drittanbietern die Möglichkeit, selbst Verknüpfungen für Webanwendungen auf dem Home-Bildschirm zu hinterlegen. Dies war zuvor ausschließlich Safari vorbehalten. Unter Android, macOS und Windows war es schon früher üblich, dass Fremdbrowser Webanwendungen installieren konnten. Allerdings müssen auch die Browser von Drittanbietern unter iOS und iPadOS zwingend die WebKit-Engine nutzen. An dieser Vorgabe ändert sich nichts.
Neben den oben genannten APIs sind in iOS und iPadOS 16.4 Beta 1 auch weitere Programmierschnittstellen zu finden: Etwa die Screen Wake Lock API [9], die den Bildschirm aktiviert lässt (etwa für Präsentationsprogramme) sowie die Screen Orientation API [10], die Informationen zur Ausrichtung des Bildschirms zugänglich macht. Für diese Schnittstellen ist allerdings keine vorherige Installation der App erforderlich.
Einmal mehr schließt sich die Lücke zwischen plattformspezifischen Apps und Webanwendungen. Mit der Verfügbarkeit von Push-Benachrichtigungen wird wohl eine der häufigsten Anfragen von Webentwicklern über die letzten Jahre nun auf allen relevanten Plattformen abgehakt. Die Integration von Web Push und Badging API ist in der Betaversion von iOS und iPadOS richtig gut umgesetzt, von plattformspezifischen Apps sind die Benachrichtigungsmethoden nicht zu unterscheiden. Auch die Verfügbarkeit weiterer Programmierschnittstellen zeigt, dass es Apple ernst meint und das Web als Anwendungsplattform stetig besser wird.
URL dieses Artikels:
https://www.heise.de/-7518359
Links in diesem Artikel:
[1] https://webkit.org/blog/13878/web-push-for-web-apps-on-ios-and-ipados/
[2] https://www.heise.de/blog/Web-Push-kommt-auf-iOS-und-iPadOS-Pushbenachrichtigungen-fuer-PWAs-jetzt-ueberall-7134230.html
[3] https://www.heise.de/blog/Progressive-Web-Apps-Teil-1-Das-Web-wird-nativ-er-3733624.html
[4] https://www.heise.de/blog/Progressive-Web-Apps-Teil-2-Die-Macht-des-Service-Workers-3740464.html
[5] https://www.heise.de/blog/Progressive-Web-Apps-Teil-3-Wie-die-Web-App-zur-App-App-wird-3464603.html
[6] https://www.thinktecture.com/pwa/push-notifications-api/
[7] https://developer.chrome.com/articles/badging-api/
[8] https://www.w3.org/TR/appmanifest/#id-member
[9] https://developer.mozilla.org/en-US/docs/Web/API/Screen_Wake_Lock_API
[10] https://developer.mozilla.org/en-US/docs/Web/API/Screen_Orientation_API
[11] mailto:rme@ix.de
Copyright © 2023 Heise Medien

Logging ist ein wichtiges Instrument, aber es ist nicht einfach, das richtige Maß der zu protokollierenden Informationen zu finden.
Ein Thema, mit dem sich früher oder später jeder (Java-)Developer auseinandersetzen muss, ist Logging. Während bei kleinen Beispielprogrammen, dem Lernen der Programmiersprache oder dem schnellen Debuggen von Code ein System.out.println ausreichen mag, ist das für den Produktivbetrieb einer Software ein ganz klares No-Go. An dieser Stelle muss der Output einer Anwendung gewissen Qualitätsmerkmalen genügen, damit er zur Überprüfung, Überwachung und Analyse der Anwendung genutzt werden kann. Aus diesem Grund gibt es eine ganze Fülle an Logging-Frameworks und APIs, und für Entwickler ist es hier oft nicht leicht zu Entscheiden welche Strategie hier die richtige ist.
Aus diesem Grund habe ich mich dazu entschlossen, eine Reihe an Best-Practice-Beiträgen zum Thema Logging zu schreiben. In diesem Beitrag starte ich mit den generellen Grundlagen von Logging. In naher Zukunft wird nicht nur eine Übersicht der verschiedenen Logging-Frameworks im Java Ökosystem geben, sondern auch ein Einblick, wie man das Thema Logging in großen Softwarearchitekturen betrachten muss. Abgerundet wird das Themenpaket Logging mit einem Einblick in "Centralized Logging" und moderne Tools, die eine bessere Aufbewahrung und Analyse von Logging erlauben.
Wie manche bereits bei der Überschrift ahnen können, möchte ich einmal kurz über die wirklich grundlegende Dokumentation von Logging sprechen. Denn der Begriff hängt tatsächlich mit dem Logbuch aus der Seefahrt zusammen. Das Logbuch soll generell dazu dienen, Ereignisse aufzuschreiben, die während einer Seefahrt passieren. Und genau das machen wir mit Logging in einer Anwendung auch: Wir schreiben zu bestimmten Ereignissen während der Lebenspanne der Anwendung Nachrichten nieder. Ob diese nun technisch in eine Log-Datei geschrieben oder nur auf der Konsole ausgegeben werden, lassen wir einmal außen vor. Wichtig ist allerdings, dass alle diese Nachrichten Metadaten wie beispielsweise den Zeitpunkt des festzuhaltenden Ereignisses beinhalten.
Genau wie in der Seefahrt gibt es verschiedene sehr gute Gründe, warum man in einer Anwendung auf Logging setzen sollte. Anhand der Historie in einem gut gepflegten Log kann man erkennen, warum bestimmte Ereignisse ausgelöst wurden. Das ist in der IT vor allem sinnvoll, um zu erkennen, wie es zu Fehlern während der Laufzeit einer Anwendung kam. Aber nicht nur in diesen Problemfällen kann Logging hilfreich sein. Generell kann man sagen, dass man aus Logging Informationen über die Nutzung und den Ablauf der Software erfährt. Hierdurch kann man aus der Vergangenheit der Software für zukünftige Integrationen lernen. Wenn man im Logging beispielsweise erkennt, dass 97 % aller Benutzer den "Like"-Button unserer Software erst nach längerer Nutzung betätigen, kann man sich überlegen, ob dieser prominenter in der Software platziert werden muss.
Um die genannten Vorteile aus dem Logging einer Anwendung ziehen zu können, muss es allerdings auch sinnvoll in die Anwendung eingebunden sein. Um dies etwas zu konkretisieren, schauen wir uns im folgenden einmal generelle Best Practices und Anti Pattern beim Logging an.
Um besser zu verstehen, wie wir Logging konkret in unserer Anwendung nutzen sollten, ist es sinnvoll, sich genau zu überlegen, was im Idealfall über einen Logger ausgegeben werden soll. Hier sehe ich drei verschiedene Kategorien, die eigentlich immer geloggt werden sollten:
Aber auch bei diesen Kategorien sollte man es mit dem Logging nicht übertreiben. Hier muss man aufpassen, dass man Informationen nicht in einem Loop loggt. Auch wenn Nutzereingaben als Input von außerhalb gelten, sollte man nicht jeden Tastendruck direkt loggen. Das folgende Beispiel zeigt einen Auszug aus einem problematischen Log-Verlauf, in dem genau das passiert ist:
08:34:23 User mutates id field with new value 'J'
08:34:23 User mutates id field with new value 'JA'
08:34:23 User mutates id field with new value 'JAV'
08:34:23 User mutates id field with new value 'JAVA'
Man kann sich gut vorstellen, wie schwierig es wird, wichtige Informationen aus einer Log-Datei mit solchen Einträgen zu extrahieren.
Ähnlich verhält es sich mit Log-Nachrichten, die zu viele Informationen enthalten. Auch wenn wir wissen, an welchem Tag ein User Geburtstag hat, müssen wir diese Informationen nicht in unsere Log-Nachrichten unterbringen:
08:34:23 User 'Max' with birthday '01/01/1970' \
mutates id field with new value 'JAVA'
Während der Benutzername in der Nachricht sicherlich für eine spätere Analyse interessant sein kann, um diese Nachricht in Relation zu anderen Log-Einträgen zu bringen, so ist das Geburtsdatum eher störend und macht das Lesen der Nachrichten für das menschliche Auge nur komplizierter.
Ein dritter wichtiger Punkt, den man beim Erstellen von Log-Nachrichten immer im Hinterkopf haben sollte, ist die Datensensibilität. Während wir in den bisherigen Meldungen immer die Änderung einer ID im Log gesehen haben, sollte folgende Nachricht nie in einem Log-File auftauchen:
08:34:23 User 'Max' mutates password with new value '12#Agj!j7
In diesem Fall würde das Logging eine echte Sicherheitslücke der Anwendung darstellen. Solche sensitiven Daten wie das Nutzerpasswort dürfen selbstverständlich nie in Log-Nachrichten ersichtlich sein.
Basierend auf den bisherigen Erkenntnissen sehen folgende Log-Nachrichten sinnvoll und gut aus:
08:34:23 User 'Max' mutates id field with new value 'JAVA'
08:34:23 User 'Max' mutates password
Neben diesen Tipps sollte man auch immer schauen, dass man den Sourcecode einer Anwendung nicht so sehr mit Log-Aufrufen vollstopft, dass der Sourcecode am Ende nicht mehr sinnvoll zu lesen und verstehen ist. Folgender Ausschnitt aus einem Java-Programm zeigt, was passiert, wenn man es mit den Logging-Aufrufen übertreibt:
LOG.log("We start the transaction");
manager.beginTransaction();
LOG.log("DB query will be executed");
LOG.log("DB query: select * from users");
long start = now();
users = manager.query("select * from users");
LOG.log("DB query executed");
LOG.log("DB query executed in " + (now() - start) + " ms");
LOG.log("Found " + users.size() + " entities");
manager.endTransaction();
LOG.log("Transaction done");
Hier ist der Code und dessen genaue Funktion kaum zu erkennen. Fehlen die Logging-Aufrufe schaffen wir das aber auf einen einzigen Blick:
manager.beginTransaction();
users = manager.query("select * from users");
manager.endTransaction();
Nun soll man aber natürlich nicht das gesamte Logging außen vor lassen, und vielleicht ist genau dies eine Stelle, bei der man gerne viele Informationen im Logging sehen möchte. In diesem Fall muss man die Logging-Aufrufe geschickter in die Struktur und die API der Anwendung integrieren. Alle Informationen, die wir im ersten Beispiel gesehen haben, könnten auch direkt innerhalb der beginTransaction-, query- und endTransaction-Methoden geloggt werden. So wird die Business-Logik von den Logging-Aufrufen gesäubert und wir bekommen trotzdem alle Informationen.
Sollte es aus verschiedenen Gründen nicht möglich sein, dass Logging direkt in der API unterzubringen, kann man auch Komplexität in Verbindung mit Logging relativ einfach in wiederverwendbaren Lambdas oder Methoden "verstecken". Das folgende Beispiel zeigt eine generische Funktion, die eine Query innerhalb einer Transaktion ausführt und alle benötigten Informationen weiterhin als Log-Nachrichten weitergibt.
final Function<String, T> queryInTransaction = query -> {
LOG.log("We start the transaction");
manager.beginTransaction();
LOG.log("DB query: " + query);
long start = now();
T result = manager.query(query);
LOG.log("DB query found " + result.size() + " entities in "
+ (now() - start) + " ms");
manager.endTransaction();
LOG.log("Transaction done");
return result;
}
Das führt dazu, dass wir in der Business-Logik unsere Aufrufe in einer lesbaren Form mit maximalem Logging aufrufen können:
LOG.log("Loading all users from database");
users = queryInTransaction("select * from users");
Jedem, der schon einmal mit Logging-Frameworks gearbeitet hat, fehlt in den bisherigen Beispielen sicherlich das Logging-Level als wichtiges und zentrales Element. Dieses wollen wir uns zum Abschluss einmal genauer anschauen. Auch wenn unterschiedliche Logger nicht immer die gleichen Level definieren, haben doch alle die gleiche Funktionalität: auf einer eindimensionalen Skala wird durch das Level angegeben, wie wichtig die Nachricht im Kontext aller Nachrichten ist.

Wie beispielhaft im Bild gezeigt, gehen wir einmal davon aus, dass wir in unserem Logging drei verschiedene Level nutzen können (Anmerkung: Je nach konkretem Logging-Framework gibt es einige mehr). Im Level ERROR wollen wir alles fehlerhafte Verhalten der Anwendung loggen, während wir den Level INFO für generelle Informationen über den Ablauf und Status der Anwendung nutzen. Mit dem DEBUG-Level loggen wir Detailinformationen, die nur in Ausnahmefällen wichtig sind. Java-Quellcode der die verschiedenen Level im Logging einsetzt, könnte somit wie folgt aussehen:
try {
LOG.info("Loading all users from database");
users = query("select * from users");
LOG.debug("Found " + users.size() + " users in db");
} catch (Exception e) {
LOG.error("Error while loading all users");
}
Zur Laufzeit der Anwendung kann man das Level des Loggers nun konfigurieren und somit filtern, welche Nachrichten wirklich im Log landen sollen. In der Regel filtert man hier die Nachricht im DEBUG-Level heraus und nimmt diese nur bei Fehleranalysen oder ähnlichen Szenarien in das Log mit auf. Der Vorteil ist, dass man den Sourcecode der Anwendung nicht ändern muss, um mehr Informationen zu erhalten. Nur die Konfiguration muss angepasst werden, und das kann je nach genutztem Logging-Framework sogar dynamisch zur Laufzeit passieren. Zusätzlich lässt sich eine solche Filterung auch nutzen, um unterschiedliche Informationen in einem Test- beziehungsweise Produktivsystem zu loggen.
Basierend auf den in diesem Blog-Post aufgezeigten generellen Regeln lassen sich bereits Definitionen für das Logging einer Anwendung oder einer kompletten Systemlandschaft erarbeiten. Wichtige Fragen, die man sich beim Erstellen von Regeln zum Logging stellen sollte, sind unter anderem:
Wie beschrieben, gibt es verschiedene Punkte, die beim Logging zu beachten sind. Generell ist es sinnvoll, ein Konzept zum Umgang mit Logging zu definieren. Hier kann man Richtlinien und Best Practices zum internen Umgang mit Logging definieren und festhalten. In ein solches Konzept gehören auch technische Aspekte wie präferierte Libraries oder Pattern. Diese werden wir uns im nächsten Teil der Reihe zu Java-Logging genauer anschauen.
URL dieses Artikels:https://www.heise.de/-7336005
Links in diesem Artikel:[1] mailto:rme@ix.de
Copyright © 2023 Heise Medien

Der Blog „Neuigkeiten von der Insel“ geht endlich weiter! Hier gibt es News und Meinungen zu Java, dem OpenJDK und aktuellen Themen der Java Community
Man könnte meinen, Java erlebt mit dem seit Java 9 etablierten Release Train und vielen modernen Features wie virtuellen Threads oder allen Neuerungen rund um Pattern Matching seine Renaissance. Allerdings wäre es unserer Meinung nach hier falsch von einer Wiedergeburt zu sprechen, da Java nie weg war. Viel mehr gehört Java seit über zwei Jahrzehnten zu den meistgenutzten Programmiersprachen [1].
Allerdings hat sich die Dynamik und somit auch die Weiterentwicklung von Java seit Einführung des neuen Release Train mit Java 9 deutlich erhöht. Und das wirkt sich nicht nur auf die Performance und Nutzbarkeit der Sprache, sondern natürlich auf generell auf dessen Attraktivität aus. Grund genug, den Java-Blog „Neuigkeiten von der Insel“ von heise Developer wieder aufleben zu lassen.
Wir, das sind konkret Falk Sippach und Hendrik Ebbers, haben uns für die nahe bis mittlere Zukunft des Blogs vorgenommen, das Thema Java SE und OpenJDK in den Mittelpunkt zu stellen. Sicherlich wird es auch immer wieder Ausflüge in Enterprise-Themen wie JakartaEE oder Spring geben und auch bisherige Themen wie JPA und generelle Nutzung von Daten wie Streaming werden behandelt. Zentral wollen wir aber den Kern von Java in den Vordergrund stellen. Dieser setzt sich nach unserer Meinung aus folgenden Teilen zusammen: der JVM, der Java Class Library (JCL), den Tools des JDK und dem OpenJDK an sich.

Alleine für diese Punkte haben wir viele Ideen, die wir in Zukunft hier im Blog angehen wollen. Da wir das Ganze neben unserer normalen Arbeit machen, können wir zwar keine festen Termine versprechen, werden aber versuchen, einen kontinuierlichen Output an interessanten Themen zu veröffentlichen.
Und damit ihr eine noch bessere Vorstellung darüber habt, wer hier überhaupt schreibt, mal ein paar persönliche Worte der Vorstellung von uns.

Im Informatikunterricht in der Schule wurde ich zunächst mit Turbo Pascal sozialisiert. Aber im Studium durfte ich die Hände an Java, damals in der Version 1.1, legen. Dadurch blicke ich auf eine 25-jährige Vergangenheit zurück; ich bin mit der Sprache Java und seinem Ökosystem quasi groß geworden. Alleine fast 15 Jahre war ich als Trainer, Berater und Entwickler für die Mannheimer Firma Orientation in Objects tätig.
Mittlerweile hat sich bei meinem jetzigen Arbeitgeber embarc der Fokus in Richtung Softwarearchitektur verändert. Ich berate Kunden (teilweise auch noch im Java-Umfeld) und führe Architektur-Reviews sowie iSAQB-Trainings durch. Dabei bin ich aber weiterhin ein Teil der Java Community geblieben, organisiere seit über 10 Jahre die JUG Darmstadt mit und unterstütze als Programmbeirat diverse Konferenzen wie JavaLand, Herbstcampus und andere. Besonders am Herzen liegt mir der Austausch mit Gleichgesinnten. Ich teile mein Wissen darum gern in Artikeln und Blogbeiträgen sowie über Schulungen, Workshops und Vorträgen auf Konferenzen und bei User Group Treffen.
Bei meinen Kunden, Teilnehmern und Kollegen versuche ich immer den Funken Leidenschaft überspringen zu lassen. Denn meine Überzeugung ist, dass lebenslanges Lernen zu unserer täglichen Arbeit dazugehört und dass wir uns nicht auf dem bereits Erreichten ausruhen sollten. Trotz der Begeisterung für Neues behalte ich aber auch die Menschen und gewachsene Strukturen im Blick, um ausgewogene Lösungen entwickeln zu können.
Im Rahmen dieses Java-Blogs werde ich zunächst von den Neuerungen in den anstehenden Releases berichten. Das zählen unter anderem Pattern Matching, Virtual Threads und Value-/Primitive-Types. Zusätzlich könnt ihr mich bei Twitter unter @sippsack [2] finden.

Ich bin schon seit vielen Jahren ein Teil der Java Community. Um ehrlich zu sein, habe ich – vielen Dank an meinen Lehrer – bereits im Informatikunterricht der Mittelstufe mit Java 1.2 angefangen. Durch meinen Einstieg in das Thema Open Source und der Gründung der Java User Group Dortmund vor fast 15 Jahren habe ich immer mehr Kontakte in der Java Community knüpfen können und habe vor etwa zehn Jahren angefangen, international Vorträge zu Java zu halten. Nach mehreren Java-Rockstar-Speaker-Awards auf der JavaOne, meinem offiziellen JavaFX Buch von Oracle Press und der Mitarbeit in JCP Expert Groups bin ich 2016 zum Java Champion ernannt worden.
Heute setze ich mit meinem eigenen Unternehmen Open Elements den Fokus weiterhin auf Java und Open Source, wobei ein Schwerpunkt bei der Mitarbeit an Eclipse Adoptium liegt, da ich Mitglied der Working Group und des Project Management Committee bin. Im deutschsprachigen Bereich werden die meisten mich durch meine Arbeit in der Konferenzleitung der JavaLand oder den Aktivitäten der Cyberland kennen. Wer sich mit mir über Java, Open Source oder eines meiner anderen Interessen (Brettspiele, Star Wars, Hunde, Hardrock) austauschen möchte, kann mich jederzeit über @hendrikEbbers [3] auf Twitter erreichen.
URL dieses Artikels:https://www.heise.de/-7464768
Links in diesem Artikel:[1] https://www.tiobe.com/tiobe-index/java/[2] https://twitter.com/sippsack[3] https://twitter.com/hendrikEbbers[4] mailto:rme@ix.de
Copyright © 2023 Heise Medien

Ist das verbilligte Netflix-Abo mit Werbung sinnvoll oder bleibt es ein verzweifelter Versuch, die Talfahrt der Abonnentenzahlen zu stoppen? Wir haben nachgefragt.
Kürzlich haben wir eine Umfrage unter unseren Abonnenten gestartet. Wir wollten wissen, was unsere Leser vomwerbefinanzierten Netflix-Abo halten. Die Ergebnisse waren nicht grundsätzlich überraschend, in ihrer Eindeutigkeit aber doch bemerkenswert.
So fanden unter über 1000 Teilnehmenden nicht einmal 30 das Netflix-Angebot mit Werbung interessant. 422 Teilnehmer lehnten es ab, 570 finden Netflix ohnehin irrelevant. Letzteres brachte Malte D. knallhart auf den Punkt: "Wenn ich Netflix und Co. zum Leben brauche, mache ich grundsätzlich was falsch."

Ganz so heftig fiel das Urteil bei anderen nicht aus. Viele lehnen Netflix nicht grundsätzlich ab, finden aber Werbung sehr nervig und würden sie keinesfalls für den gebotenen Abo-Preisnachlass akzeptieren. So schrieb uns Ralf S.: "Wegen 3 Euro Differenz Werbung? Oh, nicht doch," und Mirko V.: "Werbung nervt einfach. Zwischen den Filmen mag es noch gehen, aber einen Film dafür unterbrechen? Willkommen bei RTL und Co.."
In die gleiche Kerbe schlägt auch Heinz G: "Für mich sind in erster Linie die Inhalte, also die angebotenen Filme interessant – und diese ohne Werbeunterbrechung. Ob das Abo nun 5 oder 8 Euro kostet, spielt nur eine untergeordnete Rolle."
Andreas H. neigt eher zum Netflix-Totalboykott. Er schrieb uns: "Nachdem das Sharing verboten wurde, ist alles andere egal geworden."
In den Kommentaren zu unserer Umfrage hagelte es weitere grundsätzliche Kritik an Netflix. So findet Hubert F.: "Netflix hat an Qualität und Bandbreite des Angebots verloren und verliert deshalb die Kunden." Einige forderten Netflix zu Kooperationen mit anderen Diensten auf. Manfred K. findet, dass es Zeit ist für einen Allrounder-Streaming-Dienst.
Frank H. hat stattdessen konkrete Vorschläge, wie Netflix der Konkurrenz enteilen könnte: "Netflix sollte vielleicht mehr in die Kooperationen mit den Filmgesellschaften investieren, sodass diese kaum einen Sinn darin sehen, selbst einen eigenen Streaming-Dienst zu erstellen." Das klingt nach einem interessanten Ansatz, die Konkurrenz in Schach zu halten. Am Ende würden davon auch die Abonnenten der Streamingdienste profitieren.
URL dieses Artikels:https://www.heise.de/-7347558
Links in diesem Artikel:[1] https://www.heise.de/select/ct/2022/24/2228607501257193933[2] mailto:uk@ct.de
Copyright © 2022 Heise Medien
This is a security release for a regression since FreshRSS 1.18.0.
A few highlights ✨:
ext.php #4928 reported by @c3l3si4nDetailed tracked changes.
Full changelog:

Ist das verbilligte Netflix-Abo mit Werbung sinnvoll oder bleibt es ein verzweifelter Versuch, die Talfahrt der Abonnentenzahlen zu stoppen? Wir haben nachgefragt.
Kürzlich haben wir eine Umfrage unter unseren Abonnenten gestartet. Wir wollten wissen, was unsere Leser vomwerbefinanzierten Netflix-Abo halten. Die Ergebnisse waren nicht grundsätzlich überraschend, in ihrer Eindeutigkeit aber doch bemerkenswert.
So fanden unter über 1000 Teilnehmenden nicht einmal 30 das Netflix-Angebot mit Werbung interessant. 422 Teilnehmer lehnten es ab, 570 finden Netflix ohnehin irrelevant. Letzteres brachte Malte D. knallhart auf den Punkt: "Wenn ich Netflix und Co. zum Leben brauche, mache ich grundsätzlich was falsch."

Ganz so heftig fiel das Urteil bei anderen nicht aus. Viele lehnen Netflix nicht grundsätzlich ab, finden aber Werbung sehr nervig und würden sie keinesfalls für den gebotenen Abo-Preisnachlass akzeptieren. So schrieb uns Ralf S.: "Wegen 3 Euro Differenz Werbung? Oh, nicht doch," und Mirko V.: "Werbung nervt einfach. Zwischen den Filmen mag es noch gehen, aber einen Film dafür unterbrechen? Willkommen bei RTL und Co.."
In die gleiche Kerbe schlägt auch Heinz G: "Für mich sind in erster Linie die Inhalte, also die angebotenen Filme interessant – und diese ohne Werbeunterbrechung. Ob das Abo nun 5 oder 8 Euro kostet, spielt nur eine untergeordnete Rolle."
Andreas H. neigt eher zum Netflix-Totalboykott. Er schrieb uns: "Nachdem das Sharing verboten wurde, ist alles andere egal geworden."
In den Kommentaren zu unserer Umfrage hagelte es weitere grundsätzliche Kritik an Netflix. So findet Hubert F.: "Netflix hat an Qualität und Bandbreite des Angebots verloren und verliert deshalb die Kunden." Einige forderten Netflix zu Kooperationen mit anderen Diensten auf. Manfred K. findet, dass es Zeit ist für einen Allrounder-Streaming-Dienst.
Frank H. hat stattdessen konkrete Vorschläge, wie Netflix der Konkurrenz enteilen könnte: "Netflix sollte vielleicht mehr in die Kooperationen mit den Filmgesellschaften investieren, sodass diese kaum einen Sinn darin sehen, selbst einen eigenen Streaming-Dienst zu erstellen." Das klingt nach einem interessanten Ansatz, die Konkurrenz in Schach zu halten. Am Ende würden davon auch die Abonnenten der Streamingdienste profitieren.
()
Seit dem 3. November 2022 bietet Netflix ein werbefinanziertes Abo [2] für 4,99 Euro an. Das vergünstigte Abo basiert auf der bislang kleinsten Basis-Version für 7,99 Euro pro Monat, es läuft wie diese nur auf einem Gerät und bietet die kleine HD-Auflösung mit 720p, also 1280 x 780 Bildpunkten. Der Tarif soll im Mittel vier bis fünf Minuten Werbung pro Stunde enthalten. Zum Start sollen die Werbespots 15 oder 30 Sekunden lang sein und vor und während der Serien und Filme laufen. Außerdem fehlen laut Netflix aus lizenzrechtlichen Gründen 5 bis 10 Prozent der sonst verfügbaren Filme und Serien.
URL dieses Artikels:https://www.heise.de/-7347558
Links in diesem Artikel:[1] mailto:uk@ct.de[2] https://www.heise.de/select/ct/2022/24/2228607501257193933
Copyright © 2022 Heise Medien
A few highlights ✨:
Detailed tracked changes.
Full changelog:
opcache bug during Web update #4629, update.freshrss.org#4curlopt options for HTML+XPath #4759template.css to frss.css #4644
Über 8 Millionen Websites und 43 TByte Daten durchsuchte das HTTP Archive für den 2022 Web Almanac
(Bild: HTTP Archive, Apache 2.0)
Die größte Website ist 678 MByte "schwer" und ein Prozent nutzt noch immer das Marquee-Tag: Diese und weitere Einblicke fördert der 2022 Web Almanac zutage.
Der 2022 Web Almanac [1] ist seit wenigen Tagen verfügbar, das kostenfreie Jahrbuch des HTTP Archive [2]. Das HTTP Archive ist Teil des Internet Archive [3], das vor allem durch die Wayback Machine bekannt ist. Es erfasst, wie Webinhalte verbreitet werden: Verwendete Technologien, Leistungs- und Nutzungsdaten. Dazu durchsucht das HTTP Archive monatlich knapp 8,4 Millionen Websites mithilfe der Tools WebPageTest und Lighthouse.
Für die diesjährige Ausgabe des Jahrbuchs haben sich 108 Beitragende aus der Web-Community zusammengeschlossen. In über 20 Kapiteln beleuchten sie den Zustand des Web aus unterschiedlichsten Blickwinkeln. Der Almanach stützt sich dabei auf die Daten des Crawls aus dem Juli 2022, insgesamt wurden 43,88 TByte an Daten verarbeitet.
Das Web-Jahrbuch zeigt Trends auf, fördert aber auch kuriose Erkenntnisse zutage:
div-Element, das mit Abstand meistverwendete Element ist. Rund ein Prozent aller mobilen Websites verwenden sogar noch das veraltete marquee-Element aus den Zeiten des Internet Explorer 2.active heißt, die beliebteste ID ist content.Alle Kapitel haben ein Peer Review durchlaufen, die Rohdaten sind jeweils am Seitenende verlinkt. Den 2022 Web Almanac gibts kostenlos beim HTTP Archive [11]. Seit 2019 wird er jährlich herausgegeben.
URL dieses Artikels:
https://www.heise.de/-7286733
Links in diesem Artikel:
[1] https://almanac.httparchive.org/en/2022/
[2] https://httparchive.org/
[3] https://archive.org/
[4] https://almanac.httparchive.org/en/2022/markup
[5] https://almanac.httparchive.org/en/2022/page-weight
[6] https://almanac.httparchive.org/en/2022/cms
[7] https://almanac.httparchive.org/en/2022/css
[8] https://almanac.httparchive.org/en/2022/capabilities
[9] https://www.heise.de/blog/Fugu-Die-Macht-des-Kugelfisches-4255636.html
[10] https://www.heise.de/blog/Progressive-Web-Apps-Teil-2-Die-Macht-des-Service-Workers-3740464.html
[11] https://almanac.httparchive.org/en/2022/
[12] mailto:map@ix.de
Copyright © 2022 Heise Medien
[unable to retrieve full-text content]
Zum Ende der Sommersaison und vor Amazon Prime Day 2 gibt es gute Preise für E-Scooter, wie für den Segway Ninebot Kickscooter oder den So Flow SO4 Pro. Alle Infos finden Sie hier.

Bald startet Amazon mit einem zweiten Prime Day im Herbst. Die Aktion mit dem Namen "Prime Exklusive Angebote" ist vom 11. Oktober bis 12. Oktober auf Amazon.de verfügbar. Wie auch während des großen Prime Day im Juli richtet sich das Amazon Shopping-Event exklusiv an Prime-Mitglieder. Nur wer ein Prime-Konto hat, kann von den hohen Rabatten profitieren.
Amazon Prime 30 Tage gratis nutzen
Da unter Anderem die Hauptsaison für E-Scooter vorbei ist, erwarten wir an diesem zweiten Prime Day Escooter zu Niedrigpreisen. Die besten Angebote werden wir in diesem Beitrag auflisten. Doch schon jetzt sind einige Escooter stark reduziert. Wir zeigen die besten Vorabangebote zum neuen Prime Day. Heute sind unter Anderem die Modelle Ninebot Segway, So Flow SO4 Pro, Hitway und E9 Pro reduziert. Beim Kauf können Sie bis 184 Euro sparen . Alle hier vorgestellten Scooter haben die Straßenzulassung für Deutschland. Bevor Sie mit Ihrem gekauften E-Roller auf die Straße dürfen, müssen Sie ihn jedoch noch versichern.
Ninebot KickScooter MAX G30D II by Segway
Der E-Scooter von Segway wird in vielen Tests gut bewertet – nicht zuletzt wegen seiner großen Reichweite von bis zu 65 Kilometern. Auch wir empfehlen den Ninebot Max G30D II in
unserer Kaufberatung
. Bei Amazon ist er heute mit 13 Prozent Rabatt für 764 Euro zu haben. Der vorige Preis lag bei 879 Euro. Somit können Sie heute bei Amazon
115 Euro sparen
.
Ninebot KickScooter MAX G30D bei Amazon für 764 Euro statt 879 Euro
Ninebot KickScooter MAX G30D bei Cyberport für 779 Euro statt 879 Euro (zzgl. Versand)
E9 Pro E-Scooter / Isinwheel
Für den E-Scooter der Marke Isinwheel gibt es aktuell einen 80-Euro-Gutschein , den man beim Kauf auf Amazon direkt einlösen kann (dazu bitte Häkchen setzen). Das Besondere an diesem E-Scooter ist der hohe Fahrkomfort (bitte hierzu unbedingt die "Farbe: Dämpfung" bzw. "Dämpfung01" auswählen): Es gibt eine doppelte Feder-Stoßdämpfung, die Unebenheiten der Strecke gut abschwächt. So fühlt man sich nicht so durchgeschüttelt, wenn man im Vollgas-Modus ist. Zudem hat der E-Roller spezielle Reifen: Die sogenannten Wabengummireifen bestehen aus Vollgummi (müssen also nicht aufgepumpt werden) und gelten als besonders robust, rutschsicher und stoßdämpfend.
E9 Pro E-Scooter bei Amazon für 419 statt 499 Euro
HITWAY E-Scooter
Dieser robuste Elektroroller kommt mit einem vergleichsweise starken Motor daher. Mit 480 Watt Nennleistung schafft er Anstiege mühelos und ist auch für schwerere Fahrer geeignet. Mit voll geladenem Akku fährt der Roller bis 30 Kilometer. Hervorzuheben sind die doppelten hydraulischen Stoßdämpfer (vorne und hinten), die selbst bei unebener Strecke eine ruhige Fahrt bescheren. Die 10 Zoll-Reifen bestehen aus Gummi. Für eine bessere Sicherheit gibt es einen Schlüssel zum Ein- und Ausschalten. Neben einem standardmäßigen LCD-Display hat das Gerät einen Tempomat-Modus für kontinuierliche Geschwindigkeit, eine Klingel und sogar eine USB-Buchse zum Aufladen des Handys. Auf Amazon gibt es heute 24 Prozent Rabatt . Noch vor ein paar Tagen hatte der Roller 750 Euro gekostet. Der Normalpreis im August lag bei 700 Euro. Somit kann man derzeit 184 Euro sparen .
Hitway E-Scooter bei Amazon für 565,60 Euro statt zuvor 749,99 Euro
SOFLOW SO4 Pro E-Scooter
Der Onlineshop-Shop Galaxus hat den E-Scooter SoFlow in schickem Türkis günstig im Angebot. Auch bei Mediamarkt gibt es den Roller günstiger. Bei Amazon ist er aktuell ausverkauft. Mit einem 500 Watt-starken Motor bringt der Flitzer viel Power mit und schafft auch Anstiege mühelos. Heute können Sie 111 Euro sparen .
SOFLOW SO4 Pro bei Galaxus für 739 Euro statt 850 Euro
SOFLOW SO4 Pro bei Mediamarkt für 750 Euro statt 850 Euro
Mega Motion E-Scooter
Der Mega Motion Scooter hat eine Reichweite von 35 Kilometern. Seine Reifen sind mit 8,5 Zoll etwas kleiner als bei den anderen hier gezeigten Modellen und bestehen aus Gummi. In der Beschreibung heißt es, dass dieser E-Scooter besonders für Jugendliche geeignet ist. Derzeit gibt es einen
60-Euro-Rabattgutschein
bei Amazon. Damit kostet der Roller noch 400 Euro. Allerdings war der E-Scooter erst am 02. Oktober mit 372 Euro noch etwas günstiger als jetzt.
Mega Motion E-Scooter bei Amazon für 400 Euro statt 460 Euro
Xiaomi Mi: Mercedes-Team-Edition des Pro 2 im Angebot
Am Prime Day letztes Jahr konnte man E-Scooter-Modelle der chinesischen Marke Xiaomi zu Tiefstpreisen erwerben. Den E-Scooter Xiaomi Mi Scooter Pro 2 mit Straßenzulassung gab es 2021 mit 23 Prozent Rabatt
für nur 449 Euro
. Aktuell ist lediglich der Preis der teureren
Mercedes-F1-Team-Edition
in grau-türkisem Design besser als sonst. Statt dem bisherigen Preis von 799 Euro liegt der heutige Preis bei 699 Euro. Man kann also
100 Euro sparen
.
Xiaomi Mi Scooter Pro 2 Mercedes-Edition für 699 statt 799 Euro
Die besten E-Scooter / E-Tretroller 2022
Prime Exklusive Angebote: Amazon kündigt zweiten Prime Day an - alle Infos
Amazon Prime gratis holen und bei "Prime Exklusive Angebote" sparen
Bei Discounter Aldi ist ab morgen eine Infrarot-Wandheizung mit 41 Prozent Rabatt erhältlich.

© Marmory
In Zeiten steigender Gaspreise suchen viele Verbraucher nach Alternativen zur Gasheizung. Neben Heizlüftern - vor denen Verbraucherschützer warnen - stellen auch Infrarot-Heizungen eine solche Alternative dar. Im Gegensatz zur herkömmlichen Heizung wird sie mit Strom aus der Steckdose betrieben. Angesichts steigender Strompreise ist das Sparpotenzial jedoch auch hier - ebenso wie bei Heizlüftern - fragwürdig.
Die Infrarot-Heizung wird an der Wand platziert, wo sie Wärme in Form von Strahlung an den Raum überträgt. Sie besteht aus einer Infrarot-Heizplatte, die mit einem elektrisch leitenden Material verbunden ist. Dieses erwärmt sich, sobald Strom hindurchfließt. In Bezug auf die Effizienz sind Infrarotheizungen mit modernen Gasheizungen vergleichbar. Abhängig davon, wo die Heizung im Raum platziert wird, kann sie schnell den ganzen Raum erwärmen. Die Steuerung erfolgt über ein Steckdosenthermostat. Sobald die gewünschte Raumtemperatur erreicht ist, schaltet sich die Heizung automatisch ab.
Infrarot-Wandheizung für 319 Euro bei Aldi
Wer den Kauf einer Infrarot-Wandheizung für den Winter in Betracht zieht, findet ab morgen bei Discounter Aldi ein passendes Schnäppchen. Die Infrarot-Wandheizung “Blue Lagoon“ von Marmory ist ab 6. Oktober im Aldi-Online-Shop mit 41 Prozent Rabatt erhältlich. Im Gegensatz zur UVP in Höhe von 549 Euro ist die Heizung ab morgen für nur 319 Euro zu haben. Marmory kombiniert seine Infrarot-Heizung mit einem Naturstein, auf dem ein Strand-Motiv angebracht ist. Die Heizung wirkt damit auf den ersten Blick wie ein Wandbild. Sie bietet eine Leistung von 800 Watt und wird mit einem intelligenten Funk-Thermostat ausgeliefert. Die Heizung eignet sich für Räume von bis zu 25 Quadratmetern.
319 Euro sind für eine Infrarot-Wandheizung dieser Größe ein gutes Angebot. Lidl bietet im Online-Shop den aktuell günstigsten Preis für das Modell. Alternative Angebote für kleinere Räume und ohne Motivaufdruck finden Sie in unserem Preisvergleich . Wer hingegen elektrische Heizlüfter bevorzugt, wird in unserer Kaufberatung fündig.
Das Herbst-Update für Windows 11 kopiert große Dateien nur sehr langsam. So schaffen sie Abhilfe!

© microsoft.com
Mit dem Herbst-Update 22H2 für Windows 11 sorgt Microsoft für viele Neuerungen. Doch auch einige Bugs haben sich in die Aktualisierung des Betriebssystems eingeschlichen. Zwar sind die Fehler nicht so groß, dass Microsoft das Update – wie in der Vergangenheit schon einmal passiert – zurückziehen musste, doch einige Nutzer könnten sich dennoch über die Bugs in Windows 11 22H2 ärgern.
Microsoft räumt ein , dass es nach dem Update 22H2 einen Leistungsrückgang beim Kopieren großer Dateien von einem Remote-Computer auf einen Rechner mit Windows 11 geben würde. Ist die Datei mehrere Gigabyte groß, so sinkt der Datendurchsatz beim Kopieren über eine SMB-Netzwerkfreigabe um bis zu 40 Prozent. Wird die gleiche Datei hingegen auf einen Rechner kopiert, der nicht über das Update 22H2 verfügt, so kann die volle Bandbreite beim Kopieren genutzt werden.
Die Redmonder können zudem nicht garantieren, dass der Leistungsrückgang nur beim Zugriff auf SMB-Freigaben zu verzeichnen ist. Das Problem stehe nicht direkt mit dem Code für Netzwerkfreigaben in Verbindung. Dort würde das geringere Lesetempo aber am häufigsten auftreten. Doch auch beim lokalen Kopieren von Dateien auf den gleichen Rechnern könne es zu einem Einbruch der Performance kommen. Microsoft arbeite nach eigenen Angaben zusammen mit einem anderen Team an einer Lösung. Doch zuerst müsse man herausfinden, warum das Problem überhaupt auftritt.
Mit einem simplen Workaround können sich Nutzer behelfen, wenn es beim Kopieren großer Dateien zu Problemen kommt: Alternative Kopierprogramme wie
robocopy
oder
xcopy
würden beim Kopieren großer Dateien nicht in der Leistung einbrechen, wenn diese mit dem Parameter /J verwendet würden. Dabei werden die Dateien ohne eine Pufferung übertragen. Die Daten wandern dabei nicht in einen Cache des Dateisystems. Die Zwischenspeicherung sorgt normalerweise dafür, dass die gleichen Dateien später schneller gelesen werden können.
Heute laufen die Champions-League-Spiele von Borussia Dortmund und RB Leipzig. Wir erklären, wie Sie diese live sehen.

© Shutterstock.com/Vasyl Shulga
Seit der Saison 2021/22 wird die UEFA Champions League nicht mehr auf Sky übertragen. Die Rechte liegen nun fast komplett bei DAZN und Amazon, wobei DAZN den Löwenanteil der Spiele übertragen wird. Neben DAZN und Amazon sowie dem Endspiel, das auch vom ZDF übertragen wird, können einige Spiele zum Teil auch
über günstige VPN-Abos kostenlos
im Free-TV aus dem Ausland angesehen werden. Welche Mannschaften wann spielen und wo diese Spiele übertragen werden, erfahren Sie in diesem Artikel.
Offiziell sehen Sie bis auf das Topspiel am Dienstag, das von Amazon Prime übertragen wird, alle weiteren Spiele beim Streaming-Anbieter DAZN. Das Angebot von DAZN gibt es nach einer erneuten Preiserhöhung ab 24,99 Euro im Monat als Jahresabo, oder in der Variante, die Sie monatlich kündigen können, für 29,99 Euro. Anders als bei Amazon Prime wurde der kostenlose Testmonat oder die Variante für 99 Cent im ersten Monat bei DAZN gestrichen.
Deutlich günstiger geht es nur per VPN. Wenn Spiele im ausländischen Free-TV gezeigt werden, können diese über ein VPN kostenlos gestreamt werden. Eine VPN-Software gibt es ab 2 Euro monatlich.
Tipp: Mit Surfshark VPN ausländische Inhalte streamen
Alle Übertragungen aus den verschiedenen Ländern finden Sie auf der offiziellen UEFA-Seite:
Sender, die die UEFA Champions League live übertragen
Diese Woche läuft etwa das Spiel zwischen RB Salzburg gegen Dinamo Zagreb am Mittwoch, live um 21:00 Uhr auf dem österreichischen Sender ServusTV.
Das Spiel zwischen RB Leipzig und Celtic Glasgow wird nicht im Free-TV zu sehen sein. In Deutschland wird das Spiel auf DAZN übertragen. Anpfiff in der Red-Bull-Arena in Leipzig ist am Mittwoch, 05. Oktober 2022 um 18:45 Uhr.
Das Spiel zwischen dem FC Sevilla und Borussia Dortmund wird nicht im Free-TV zu sehen sein. In Deutschland wird das Spiel auf DAZN übertragen. Anpfiff im Estadio Ramón Sánchez Pizjuán in Sevilla ist am Mittwoch, 05. Oktober 2022 um 21:00 Uhr.
|
Wann: |
Spiel: |
Zu sehen auf: |
|---|---|---|
|
Di., 04.10. 18:45 Uhr |
FC Bayern München : Viktoria Pilsen |
|
|
Di., 04.10. 18:45 Uhr |
Olympique Marseille : Sporting Lissabon |
|
|
Di., 04.10. 21:00 Uhr |
FC Porto : Bayer Leverkusen |
|
|
Di., 04.10. 21:00 Uhr |
FC Brügge : Atlético Madrid |
|
|
Di., 04.10. 21:00 Uhr |
Ajax Amsterdam : SSC Neapel |
|
|
Di., 04.10. 21:00 Uhr |
Eintracht Frankfurt : Tottenham Hotspur |
|
|
Di., 04.10. 21:00 Uhr |
Inter Mailand : FC Barcelona |
|
|
Di., 04.10. 21:00 Uhr |
FC Liverpool : Glasgow Rangers |
|
|
Mi., 05.10. 18:45 Uhr |
RB Salzburg : Dinamo Zagreb |
|
|
Mi., 05.10. 18:45 Uhr |
RB Leipzig : Celtic Glasgow |
|
|
Mi., 05.10. 21:00 Uhr |
FC Chelsea : AC Milan |
|
|
Mi., 05.10. 21:00 Uhr |
Juventus Turin : Maccabi Haifa |
|
|
Mi., 05.10. 21:00 Uhr |
Real Madrid : Schachtar Donezk |
|
|
Mi., 05.10. 21:00 Uhr |
FC Sevilla : Borussia Dortmund |
|
|
Mi., 05.10. 21:00 Uhr |
Benfica Lissabon : Paris Saint-Germain |
|
|
Mi., 05.10. 21:00 Uhr |
Manchester City : FC Kopenhagen |
Nach 21 Jahren endete die Übertragung der europäischen Königsklasse auf dem Pay-TV-Sender Sky vorerst. Den Großteil der Spiele sehen Sie in Deutschland offiziell jetzt über den Sport-Streamingdienst DAZN. Dabei zeigt DAZN alle Mittwochsspiele und bis auf eine Partie pro Woche, auch alle Dienstagsspiele ab den Play-offs. Das jeweilige Topspiel am Dienstag wird von Amazon Prime Video gezeigt – der Versandriese zeigt insgesamt 16 Partien. Das Finale wird parallel zu DAZN auch im ZDF am 10. Juni 2023 übertragen – unabhängig von der Beteiligung einer deutschen Mannschaft.
Die UEFA Champions League und weiterer Fußball bei DAZN: Zu dem erweiterten Angebot von DAZN kommt auf Abonnenten eine Preiserhöhung zu. Bisher kostete eine Mitgliedschaft 14,99 Euro im Monat oder 149,99 Euro im Jahr, die neuen Preise belaufen sich auf 24,99 Euro monatlich im Jahresabo oder 274,99 Euro jährlich – die monatlich kündbare Variante kostet 29,99 Euro. DAZN hat kürzlich, anders als Amazon-Prime, die Möglichkeit einer 30-tägigen kostenlosen Testphase leider eingestellt und auch die 99-Cent-Testvariante im ersten Monat wurde komplett gestrichen.
Neben der UEFA Champions League sehen Sie bei DAZN noch viele weitere Sport-Übertragungen, wie Teile der Bundesliga. Zur Saison 2021/22 hat der Streaminganbieter das Angebot weiter erweitert. Wurden bislang insgesamt "nur" 40 Spiele am Freitag- und Montagabend sowie die frühen Sonntagspartien übertragen, werden nun 106 Begegnungen der Bundesliga gezeigt, die im Livestream und TV auf DAZN zu sehen sind. Die Bundesliga am Freitag und Sonntag läuft dann bis auf drei Partien ausnahmslos bei DAZN und nicht im Free-TV oder anderen Pay-TV-Sendern.
Die UEFA Champions League bei Amazon Prime: Das Topspiel am Dienstag sehen Sie, wie bereits angesprochen, auf Amazon Prime Video. Amazon-Kunden mit einer Prime-Mitgliedschaft sehen diese Spiele im Rahmen ihrer Mitgliedschaft ohne Aufpreis. Interessierte haben die Möglichkeit, die Mitgliedschaft für 30 Tage kostenlos zu testen. Ansonsten kostet die Prime-Mitgliedschaft bei Amazon 8,99 Euro im Monat oder 89,90 Euro im Jahr.
Amazon Prime: Jetzt 30 Tage kostenlos testen
Für den kompletten Jahrespreis von mindestens 364,99 Euro, für die Kombination der Jahresabos von Amazon Prime und DAZN, verpassen Sie kein Spiel der UEFA Champions League mehr. Daneben lockt das DAZN-Angebot Fußballbegeisterte mit weiteren Sport-Übertragungen wie der UEFA Champions League der Frauen, Teile der Bundesliga, der spanischen Liga, der Copa del Rey der US-amerikanischen MLS und weiteren Ereignissen.
Die Rechte für die UEFA Champions League sind recht kostspielig. So werden die Spiele fast ausschließlich gegen eine Bezahlung zu sehen sein. Es gibt aber auch Ausnahmen, diese benötigen allerdings bezüglich des umfangreichen Geoblockings der CL den Umweg über ein VPN.
Einige Spiele wird es im Ausland auch im Free-TV zu sehen geben. Etwa überträgt der österreichische Sender
ServusTV rund 33 Spiele
aus der Champions League, der Europa League sowie der neu gegründeten Europa Conference League im Free-TV. Und natürlich zeigen noch etliche weitere Länder die Spiele der Champions League, welche das genau sind, kann in der
offiziellen Liste der UEFA
nachgesehen werden.
Durch eine Ländersperre können wir diese Übertragungen, etwa über Livestreams, leider nicht ohne Weiteres sehen. Mit einem VPN - wie dem von Cyberghost oder Surfshark – können Sie diese Ländersperre allerdings leicht umgehen und sich so deutlich Kosten sparen.
Jetzt den VPN von Surfshark ab 2,21 Euro/Monat sichern
|
Gruppe A |
Ajax Amsterdam |
FC Liverpool |
SSC Neapel |
Glasgow Rangers |
|
Gruppe B |
FC Porto |
Atlético Madrid |
Bayer Leverkusen |
FC Brügge |
|
Gruppe C |
FC Bayern München |
FC Barcelona |
Inter Mailand |
Viktoria Pilsen |
|
Gruppe D |
Eintracht Frankfurt |
Tottenham Hotspur |
Sporting Lissabon |
Olympique Marseille |
|
Gruppe E |
AC Mailand |
FC Chelsea |
RB Salburg |
Dinamo Zagreb |
|
Gruppe F |
Real Madrid |
RB Leipzig |
Schachtar Donezk |
Celtic Glasgow |
|
Gruppe G |
Manchester City |
FC Sevilla |
Borussia Dortmund |
FC Kopenhagen |
|
Gruppe H |
Paris Saint-Germain |
Juventus Turin |
Benfica Lissabon |
Maccabi Haifa FC |
Heute laufen die Champions-League-Spiele von Frankfurt, Leverkusen und dem FC Bayern. Wir erklären, wie Sie diese live sehen.

© Shutterstock.com/Vasyl Shulga
Seit der Saison 2021/22 wird die UEFA Champions League nicht mehr auf Sky übertragen. Die Rechte liegen nun fast komplett bei DAZN und Amazon, wobei DAZN den Löwenanteil der Spiele übertragen wird. Neben DAZN und Amazon sowie dem Endspiel, das auch vom ZDF übertragen wird, können einige Spiele zum Teil auch
über günstige VPN-Abos kostenlos
im Free-TV aus dem Ausland angesehen werden. Welche Mannschaften wann spielen und wo diese Spiele übertragen werden, erfahren Sie in diesem Artikel.
Offiziell sehen Sie bis auf das Topspiel am Dienstag, das von Amazon Prime übertragen wird, alle weiteren Spiele beim Streaming-Anbieter DAZN. Das Angebot von DAZN gibt es nach einer erneuten Preiserhöhung ab 24,99 Euro im Monat als Jahresabo, oder in der Variante, die Sie monatlich kündigen können, für 29,99 Euro. Anders als bei Amazon Prime wurde der kostenlose Testmonat oder die Variante für 99 Cent im ersten Monat bei DAZN gestrichen.
Deutlich günstiger geht es nur per VPN. Wenn Spiele im ausländischen Free-TV gezeigt werden, können diese über ein VPN kostenlos gestreamt werden. Eine VPN-Software gibt es ab 2 Euro monatlich.
Tipp: Mit Surfshark VPN ausländische Inhalte streamen
Alle Übertragungen aus den verschiedenen Ländern finden Sie auf der offiziellen UEFA-Seite:
Sender, die die UEFA Champions League live übertragen
Diese Woche läuft etwa das Spiel zwischen RB Salzburg gegen Dinamo Zagreb am Mittwoch, live um 21:00 Uhr auf dem österreichischen Sender ServusTV.
Das Spiel zwischen dem FC Bayern München und Viktoria Pilsen wird nicht im Free-TV zu sehen sein. In Deutschland wird das Spiel auf DAZN übertragen. Anpfiff in der Allianz-Arena in München ist am Dienstag, 04. Oktober 2022 um 18:45 Uhr.
Das Spiel zwischen Eintracht Frankfurt und Tottenham Hotspur wird nicht im Free-TV zu sehen sein. In Deutschland wird das Spiel nur auf Amazon Prime Video gezeigt. Anpfiff im Waldstadion in Frankfurt am Main ist am Dienstag, dem 04. Oktober 2022 um 21:00 Uhr.
Das Spiel zwischen FC Porto und Bayer Leverkusen wird nicht im Free-TV zu sehen sein. In Deutschland wird das Spiel auf DAZN übertragen. Anpfiff im Estádio do Dragão in Porto ist am Dienstag, 04. Oktober 2022 um 21:00 Uhr.
Das Spiel zwischen RB Leipzig und Celtic Glasgow wird nicht im Free-TV zu sehen sein. In Deutschland wird das Spiel auf DAZN übertragen. Anpfiff in der Red-Bull-Arena in Leipzig ist am Mittwoch, 05. Oktober 2022 um 18:45 Uhr.
Das Spiel zwischen dem FC Sevilla und Borussia Dortmund wird nicht im Free-TV zu sehen sein. In Deutschland wird das Spiel auf DAZN übertragen. Anpfiff im Estadio Ramón Sánchez Pizjuán in Sevilla ist am Mittwoch, 05. Oktober 2022 um 21:00 Uhr.
|
Wann: |
Spiel: |
Zu sehen auf: |
|---|---|---|
|
Di., 04.10. 18:45 Uhr |
FC Bayern München : Viktoria Pilsen |
|
|
Di., 04.10. 18:45 Uhr |
Olympique Marseille : Sporting Lissabon |
|
|
Di., 04.10. 21:00 Uhr |
FC Porto : Bayer Leverkusen |
|
|
Di., 04.10. 21:00 Uhr |
FC Brügge : Atlético Madrid |
|
|
Di., 04.10. 21:00 Uhr |
Ajax Amsterdam : SSC Neapel |
|
|
Di., 04.10. 21:00 Uhr |
Eintracht Frankfurt : Tottenham Hotspur |
|
|
Di., 04.10. 21:00 Uhr |
Inter Mailand : FC Barcelona |
|
|
Di., 04.10. 21:00 Uhr |
FC Liverpool : Glasgow Rangers |
|
|
Mi., 05.10. 18:45 Uhr |
RB Salzburg : Dinamo Zagreb |
|
|
Mi., 05.10. 18:45 Uhr |
RB Leipzig : Celtic Glasgow |
|
|
Mi., 05.10. 21:00 Uhr |
FC Chelsea : AC Milan |
|
|
Mi., 05.10. 21:00 Uhr |
Juventus Turin : Maccabi Haifa |
|
|
Mi., 05.10. 21:00 Uhr |
Real Madrid : Schachtar Donezk |
|
|
Mi., 05.10. 21:00 Uhr |
FC Sevilla : Borussia Dortmund |
|
|
Mi., 05.10. 21:00 Uhr |
Benfica Lissabon : Paris Saint-Germain |
|
|
Mi., 05.10. 21:00 Uhr |
Manchester City : FC Kopenhagen |
Nach 21 Jahren endete die Übertragung der europäischen Königsklasse auf dem Pay-TV-Sender Sky vorerst. Den Großteil der Spiele sehen Sie in Deutschland offiziell jetzt über den Sport-Streamingdienst DAZN. Dabei zeigt DAZN alle Mittwochsspiele und bis auf eine Partie pro Woche, auch alle Dienstagsspiele ab den Play-offs. Das jeweilige Topspiel am Dienstag wird von Amazon Prime Video gezeigt – der Versandriese zeigt insgesamt 16 Partien. Das Finale wird parallel zu DAZN auch im ZDF am 10. Juni 2023 übertragen – unabhängig von der Beteiligung einer deutschen Mannschaft.
Die UEFA Champions League und weiterer Fußball bei DAZN: Zu dem erweiterten Angebot von DAZN kommt auf Abonnenten eine Preiserhöhung zu. Bisher kostete eine Mitgliedschaft 14,99 Euro im Monat oder 149,99 Euro im Jahr, die neuen Preise belaufen sich auf 24,99 Euro monatlich im Jahresabo oder 274,99 Euro jährlich – die monatlich kündbare Variante kostet 29,99 Euro. DAZN hat kürzlich, anders als Amazon-Prime, die Möglichkeit einer 30-tägigen kostenlosen Testphase leider eingestellt und auch die 99-Cent-Testvariante im ersten Monat wurde komplett gestrichen.
Neben der UEFA Champions League sehen Sie bei DAZN noch viele weitere Sport-Übertragungen, wie Teile der Bundesliga. Zur Saison 2021/22 hat der Streaminganbieter das Angebot weiter erweitert. Wurden bislang insgesamt "nur" 40 Spiele am Freitag- und Montagabend sowie die frühen Sonntagspartien übertragen, werden nun 106 Begegnungen der Bundesliga gezeigt, die im Livestream und TV auf DAZN zu sehen sind. Die Bundesliga am Freitag und Sonntag läuft dann bis auf drei Partien ausnahmslos bei DAZN und nicht im Free-TV oder anderen Pay-TV-Sendern.
Die UEFA Champions League bei Amazon Prime: Das Topspiel am Dienstag sehen Sie, wie bereits angesprochen, auf Amazon Prime Video. Amazon-Kunden mit einer Prime-Mitgliedschaft sehen diese Spiele im Rahmen ihrer Mitgliedschaft ohne Aufpreis. Interessierte haben die Möglichkeit, die Mitgliedschaft für 30 Tage kostenlos zu testen. Ansonsten kostet die Prime-Mitgliedschaft bei Amazon 8,99 Euro im Monat oder 89,90 Euro im Jahr.
Amazon Prime: Jetzt 30 Tage kostenlos testen
Für den kompletten Jahrespreis von mindestens 364,99 Euro, für die Kombination der Jahresabos von Amazon Prime und DAZN, verpassen Sie kein Spiel der UEFA Champions League mehr. Daneben lockt das DAZN-Angebot Fußballbegeisterte mit weiteren Sport-Übertragungen wie der UEFA Champions League der Frauen, Teile der Bundesliga, der spanischen Liga, der Copa del Rey der US-amerikanischen MLS und weiteren Ereignissen.
Die Rechte für die UEFA Champions League sind recht kostspielig. So werden die Spiele fast ausschließlich gegen eine Bezahlung zu sehen sein. Es gibt aber auch Ausnahmen, diese benötigen allerdings bezüglich des umfangreichen Geoblockings der CL den Umweg über ein VPN.
Einige Spiele wird es im Ausland auch im Free-TV zu sehen geben. Etwa überträgt der österreichische Sender
ServusTV rund 33 Spiele
aus der Champions League, der Europa League sowie der neu gegründeten Europa Conference League im Free-TV. Und natürlich zeigen noch etliche weitere Länder die Spiele der Champions League, welche das genau sind, kann in der
offiziellen Liste der UEFA
nachgesehen werden.
Durch eine Ländersperre können wir diese Übertragungen, etwa über Livestreams, leider nicht ohne Weiteres sehen. Mit einem VPN - wie dem von Cyberghost oder Surfshark – können Sie diese Ländersperre allerdings leicht umgehen und sich so deutlich Kosten sparen.
Jetzt den VPN von Surfshark ab 2,21 Euro/Monat sichern
|
Gruppe A |
Ajax Amsterdam |
FC Liverpool |
SSC Neapel |
Glasgow Rangers |
|
Gruppe B |
FC Porto |
Atlético Madrid |
Bayer Leverkusen |
FC Brügge |
|
Gruppe C |
FC Bayern München |
FC Barcelona |
Inter Mailand |
Viktoria Pilsen |
|
Gruppe D |
Eintracht Frankfurt |
Tottenham Hotspur |
Sporting Lissabon |
Olympique Marseille |
|
Gruppe E |
AC Mailand |
FC Chelsea |
RB Salburg |
Dinamo Zagreb |
|
Gruppe F |
Real Madrid |
RB Leipzig |
Schachtar Donezk |
Celtic Glasgow |
|
Gruppe G |
Manchester City |
FC Sevilla |
Borussia Dortmund |
FC Kopenhagen |
|
Gruppe H |
Paris Saint-Germain |
Juventus Turin |
Benfica Lissabon |
Maccabi Haifa FC |
Im aktuellen Gutscheinheft von Saturn finden Sie zahlreiche Sonderangebote und Set-Deals zu Spitzenpreisen.

© Saturn
Saturn bewirbt aktuell wieder seine beliebten Gutscheinheft-Deals. Dabei verspricht der Elektrofachhändler etliche Angebote verschiedener Produkte zu Spitzenpreisen – "über 18.000 Euro" soll sich bei den Deals sparen lassen. Unter den Sonderangeboten erhalten Sie etwa tolle Angebote wie SSDs, externe Festplatten, TVs, Smartphones, Tablets, Notebooks, Games, Gaming-Zubehör und mehr.
Nur bis 19. Oktober: Jetzt alle Gutscheinheft-Deals bei Saturn entdecken
Weiterhin erhalten Sie neben den Sonderangeboten ab einem Bestellwert von 59 Euro auch eine kostenlose Lieferung. Die Aktion läuft dabei in den Märkten und im Online-Shop noch bis zum 19. Oktober 2022.
Bei den Angeboten stechen vor allem gute Deals und Set-Preise zu Fritzbox-Produkten von AVM hervor. Einige der besten Deals der Aktion bei Saturn haben wir hier für Sie zusammengestellt:
AVM Fritzbox 7530 AX (Wi-Fi 6) VDSL/ADSL-Router, 2400 Mbit/s + AVM Fritz-Repeater 1200 AX, Mesh-WLAN-Repeater.
AVM Fritzbox 7590 AX, WLAN-Mesh-Router, VDSL / ADSL, Wi-Fi 6, 2400 Mbit/s inklusive 20 Euro Coupon.
Samsung Galaxy Tab S6 Lite (2022) WIFI, Tablet, 64 GB, 10,4 Zoll, Oxford Gray + Targus Slim Keyboard Case, Bookcover, Black.
Asus Vivobook 15 (R565JA-EJ2498W), Notebook mit 15,6-Zoll-Display, Intel Core-i5-Prozessor, 8 GB RAM, 512 GB SSD, Intel UHD Graphics, Slate Grey.
Während der Gutscheinheft-Dealaktion kehrt auch die beliebte "3 Spiele für 49 Euro"-Gaming-Aktion zurück. Hier erhalten Sie 3 Games zum Preis von nur 49 Euro. Wählen lässt sich dabei aus Spielen für die Playstation 4, Playstation 5, Xbox One, Nintendo Switch und PC.
Noch bis zum 19.10. erhalten Sie zudem 3 Spiele für nur 49 Euro. Sie wählen dabei aus einer Aktionsseite mit ausgewählten Spielen für PS4, PS5, Xbox One, Xbox Series X, Nintendo Switch und PC Ihre Wunschtitel, der Rabatt erfolgt automatisch im Warenkorb.
Registrieren Sie sich auf
deals.pcwelt.de
für unseren Newsletter oder folgen dort den Anweisungen und aktivieren den Browser-Push, um jederzeit über die aktuellen Top-Angebote auf dem Laufenden zu bleiben. Natürlich kostenlos!
Im PC-WELT-Schnäppchen-Bereich präsentieren wir Ihnen täglich die neuesten Spar-Angebote, Rabatt-Aktionen und andere Technik-Deals von verschiedenen Onlinehändlern. Im Angebot finden Sie PCs, Notebook, Konsolen, Smartphones, Tablets, TVs, PC-Hardware oder auch Gadgets.