Connect with us

Künstliche Intelligenz

Einfache UX für domänenspezifische Sprachen mit VS Code gestalten


close notice

This article is also available in
English.

It was translated with technical assistance and editorially reviewed before publication.

Lohnt es sich, eine eigene Programmiersprache samt Syntax-Highlighting, Code Completion anderen Features im Editor nur für ein einzelnes Projekt zu erstellen? Was sich auf den ersten Blick nach viel Arbeit anhört, ist dank Language Server Protocol (LSP) deutlich einfacher geworden. Durch die reichhaltigen Möglichkeiten zur Interaktion mit Texteditoren wie Visual Studio Code eignen sich domänenspezifische Sprachen (Domain Specific Languages, DSL) als eine vollwertige und auch unterschätzte Möglichkeit der Gestaltung einer UX.

Weiterlesen nach der Anzeige


Portrait Georg Hinkel

Portrait Georg Hinkel

(Bild: 

Georg Hinkel

)

Georg Hinkel forscht und lehrt an der Hochschule RheinMain zu den Themenschwerpunkten Softwaretechnik, modellgetriebene Softwareentwicklung und verteilte Systeme. Er ist außerdem Maintainer des Open-Source-Projekts NMF.

Anwenderinnen und Anwender jenseits der Informatik nehmen Spezifikationen oft mit Formularen vor. Je komplexer die Anforderungen sind, desto komplizierter wird die Umsetzung per Formular. Ein grotesk wirkendes Beispiel zeigt Abbildung 1: Anweisungen für einen Compiler, über ein Formular zu spezifizieren.


Anweisungen per Formular

Anweisungen per Formular

Programmieren per Formular wirkt grotesk (Abb. 1)

Gleich mehrere Gründe machen diese Idee so absurd:

  • Die Spezifikation ist völlig aufgebläht: Die noch unvollständige Implementierung des Heron-Verfahrens zum Wurzelziehen lässt sich auch mit nur drei Zeilen Code umsetzen.
  • Als direkte Folge davon ist das Formular deutlich schwerer verständlich.
  • Für erfahrene Nutzer ist eine Programmiersprache sehr viel effizienter, weil sie in der gleichen Zeit wesentlich mehr Spezifikationen verfassen können.
  • Es ist nur schwer vorstellbar, wie man eine formularbasierte Programmspezifikation versionieren kann. Textbasierte Algorithmen, wie Git sie verwendet, funktionieren hier vermutlich nicht.

Eine komplexe Spezifikation ist keine Besonderheit der Informatik, auch in anderen Fachbereichen gibt es schwierige Probleme, die immer mehr mithilfe von Computern gelöst werden sollen. Das kann die Automatisierung von Workflows sein, die Planung von Bauteilen oder Gebäuden, die Dokumentation von manuellen Prozessen oder vieles mehr. Ein Erfolgsfaktor von Programmiersprachen ist sicherlich, dass Programme sowieso abstrakt sind, während sich physische Bauteile oder Gebäudepläne schon immer auch grafisch haben repräsentieren lassen. Das Beispiel von Prozessautomatisierung zeigt aber, dass in vielen Bereichen ebenfalls abstrakte Konzepte auftreten.

Innerhalb der Informatik haben sich textuelle Sprachen auch jenseits des Programmierens bewährt. Admins legen Infrastrukturen in der Cloud schon lange nicht mehr per Formular an (diese Praxis wird eher als ClickOps geschmäht), sondern in Textform per Infrastructure-as-Code. Die Gründe sind dieselben: die Spezifikation ist schlanker, verständlicher, einfacher zu versionieren und man ist damit schneller.

Weiterlesen nach der Anzeige

Einfacher zu versionieren als Formulare, sind generische Formate wie JSON oder XML. Sie sind allerdings ursprünglich nicht dafür gedacht, für Menschen lesbar zu sein, sondern für Maschinen. Da viele Anwendungen ohnehin eine maschinenlesbare Sprache benötigen, ist es bequem, diese auch als alternative Schnittstelle anzubieten.

Aber auch solche Konfigurationsdateien erreichen nicht die Prägnanz, Lesbarkeit und Effizienz einer domänenspezifischen Sprache, zumal auch Validierungstechnologien wie XML Schema oder JSON Schema nur die Struktur der Dokumente validieren, aber wenig zur fachlichen Analyse beitragen können.

Komplexe Vorgänge, die Menschen gern sehr prägnant, lesbar und versionierbar ausdrücken wollen, kann man vorteilhaft mit einer domänenspezifischen Sprache spezifizieren, mit der gleichen Editorunterstützung wie bei Programmiersprachen. Beispiele wären Reisekostenabrechnungen, Nebenkostenabrechnungen, Steuererklärungen, Umsatzabfragen, Prozessautomatisierungen oder Bauplanungen.

LLM-basierte Chatfunktionen sind dabei kein Ersatz für domänenspezifische Sprachen, umgekehrt aber können domänenspezifische Sprachen die Intention eines KI-Systems einfacher überprüfbar machen. Anstatt agentenbasierte Systeme kritische Dinge tun zu lassen (was zumindest in der EU per AI Act streng reglementiert ist), kann man KI-Systeme auch eine in natürlicher Sprache vorliegende Beschreibung in eine DSL umformulieren lassen.

Die Entwicklung einer domänenspezifischen Sprache reduziert sich nicht nur auf einen Parser: Nutzerinnen und Nutzer sind den Komfort von Syntax-Highlighting, Code Completion, bequemes Springen zur Definition oder zu Referenzen gewohnt, die wesentlich für eine gute UX und gesteigerte Produktivität sind. In den letzten Jahren ist dies durch das von Microsoft entwickelte Language Server Protocol (LSP) deutlich einfacher geworden. Dieses Prinzip hat sich auf weitere Bereiche ausgeweitet, zum Beispiel auf grafische Sprachen mit dem Graphical Language Server Protocol (GLSP). LSP und GLSP erlauben es, weitgehend auf die Entwicklung von UI-Komponenten zu verzichten und sich stattdessen auf die Semantik einer Sprache zu konzentrieren.

Aus diesem Grund können Editoren wie Visual Studio Code mit beliebigen Programmiersprachen umgehen: Während sie als Frontend immer dasselbe UI verwenden (im Fall von Visual Studio Code den Monaco-Editor), liefert ein LSP-Server die sprachspezifische Editorunterstützung. Da LSP auf JSON-RPC basiert, das keine Transportschicht definiert, lässt sich LSP wahlweise über stdin/stdout oder über Websockets betreiben. Das ermöglicht viele Optionen für das Deployment: Der Client kann in einer Desktopanwendung (in Fall von Visual Studio Code via Electron) oder im Browser laufen, während der Server entweder in die IDE eingebettet oder auf einem entfernten Rechner arbeitet.

Mittlerweile gibt es für die Entwicklung von LSP-Servern mehrere Frameworks, je nachdem, mit welcher Programmiersprache man die DSL entwickeln will. Für die Beschreibung der Grammatik der DSL kommt ebenfalls eine DSL zum Einsatz. Daraus generiert das Framework Parser, Klassen für den abstrakten Syntaxbaum und die Editorunterstützung. Entwicklerinnen und Entwickler können das Ergebnis durch manuellen Code ergänzen oder überschreiben. Beispiele für entsprechende Tools sind Xtext für Java (siehe auch: [1]), Langium für TypeScript und AnyText für .NET (siehe auch [2]).

Der Startpunkt für die Entwicklung einer neuen DSL ist mit allen dreien der genannten Frameworks eine Grammatik, die auch die abstrakte Syntax der Sprache ausdrückt. Die abstrakte Syntax ist hierbei die Definition der Konzepte, die die Sprache ausmachen. Für die Grammatik werden bei Xtext und Langium kontextfreie LL(k)-Grammatiken verwendet, bei AnyText Parse-Expression-Grammatiken (PEGs). Beide Klassen von Grammatiken arbeiten mit Nichtterminalen (= Platzhaltern) und Produktionsregeln, die bestimmen, wie ein Nichtterminal ersetzt werden kann. Diese Produktionsregeln lassen sich bequem über die Metasprache Erweiterte Backus-Naur-Form (EBNF) spezifizieren, die zusätzlich noch um Zuweisungen ergänzt wird, um auch die abstrakte Syntax angeben zu können.

Praktischerweise bietet Langium mit dem Playground eine Möglichkeit an, mit der Entwicklung einer DSL ohne Installation einer Software direkt im Browser zu beginnen. Für Xtext oder AnyText bieten die Tutorials gute Einstiegspunkte.

Um beispielsweise die (hier vereinfachte) Deklaration einer Klasse in einer Programmiersprache zu spezifizieren, genügt das folgende Fragment:

Class: ‘class’ name=ID ‘{‘ members+=ClassMember* ‘}’;

Dieses Beispiel geht davon aus, dass es weitere Nichtterminale ID und ClassMember gibt, die regeln, wie ein Identifier genau aussieht und was zulässige Member einer Klasse sein können. Der Postfixoperator * erlaubt hierbei beliebig viele Member. Alternativ sind auch + oder ? möglich, um mindestens oder höchstens ein Vorkommen zu beschreiben. Der Operator | erlaubt auch Alternativen, was unterschiedliche Arten von Membern ermöglicht. Besteht eine Regel ausschließlich aus Alternativen, dann wird das in der abstrakten Syntax durch Inheritance abgebildet.

Die Zuweisung = bzw. += weist das System darüber hinaus an, das Ergebnis des Nichtterminals ID bzw. ClassMember dem abstrakten Element des Nichtterminals zuzuordnen. Das geht entweder als einwertige Eigenschaft (beispielsweise, dass das Ergebnis von ID den Namen bilden soll) oder als mehrwertige Eigenschaft, dass das Ergebnis von ClassMember zur Auflistung members hinzugefügt werden soll.

Aus diesen Zuweisungen lassen sich dann auch Klassen ableiten, um die abstrakten Elemente der Sprache im Speicher darstellen zu können. Sowohl Xtext und Langium als auch AnyText unterstützen den Operator [], mit dem sich Referenzen abbilden lassen, dass also an einer gegebenen Stelle nur eine Referenz auf ein anderes syntaktisches Element erscheinen soll.

Die Konstruktion des Parsers bleibt zwar weitestgehend vor den Entwicklern verborgen, allerdings haben manche Klassen von Grammatiken Einschränkungen, die Entwickler einer DSL berücksichtigen müssen. So sind die Produktionen bei kontextfreien Grammatiken ungeordnet, bei PEGs aber geordnet, weswegen es konstruktionsbedingt keine Mehrdeutigkeiten gibt. Gängige Parser für kontextfreie Grammatiken unterstützen keine Linksrekursionen, für PEGs aber schon.

Die Ordnung von Alternativen bedeutet, dass eine Alternative nur dann überhaupt in Betracht gezogen wird, wenn die vorherigen Alternativen fehlschlagen. Das hat zur Folge, dass es niemals Mehrdeutigkeiten geben kann und beispielsweise bei if-Statements in C-ähnlichen Sprachen ein else-Block immer dem inneren if zugeschlagen werden würde. Das kann in vielen Fällen erwünscht sein, weil die Sprache damit niemals mehrdeutig ist, kann aber auch gegen Intuition verstoßen. Beispielsweise matcht die Grammatik S: ‚a’S’a’ | ‚aa’ als kontextfreie Grammatik alle Wörter mit einer geraden Anzahl des Buchstabens a, als PEG aber nur Wörter, die nur aus a bestehen und deren Länge eine Zweierpotenz > 1 ist. Gerade wenn man kontextfreie Grammatiken gewohnt ist, ist dieses Verhalten kontraintuitiv. Aus meiner Sicht betrifft das aber nur eher pathologische Fälle.

Die Unterstützung von Linksrekursionen ist vor allem für Ausdrücke wichtig, da man damit sehr intuitiv Formeln umsetzen kann. Insbesondere sind binäre Ausdrücke selbst Ausdrücke, beginnen aber auch mit einem Ausdruck. Für PEGs haben Warth und andere [3] eine Erweiterung von Packrat-Parsern entwickelt, die Linksrekursionen parsen kann, wobei das lineare Laufzeitverhalten von Packrat-Parsern erhalten bleibt.

In AnyText lässt sich daher eine einfache Expression-Grammatik wie in Listing 1 unten dargestellt implementieren. Hierbei überschreibt das Schlüsselwort returns, welche Klasse der abstrakten Syntax das Nichtterminal zurückgibt. Im Beispiel dient es dazu, nicht für jedes einzelne Nichtterminal eine Klasse einführen zu müssen. Das Schlüsselwort enum kommt zum Einsatz, um eine fixe Menge von Werten abzubilden. Ferner beschreibt das Schlüsselwort parantheses ein Nichtterminal für Klammerungen und terminal ein Terminal, dargestellt durch einen regulären Ausdruck.


grammar Expressions (exp)
root Expression

Expression:
  AdditiveBinary | Multiplicative;
AdditiveBinary returns BinaryExpression:
  left=Expression operator=AdditiveOperator right=Expression;
enum AdditiveOperator returns BinaryOperator:
  Add => '+'
  Subtract => '-';
Multiplicative returns Expression:
  MultiplicativeBinary | LiteralExpression | VariableExpression | ParanthesisExpression;
MultiplicativeBinary returns BinaryExpression:
  left=Multiplicative operator=MultiplicativeOperator right=Multiplicative;
enum MultiplicativeOperator returns BinaryOperator:
  Multiply => '*'
  Divide => '/';
LiteralExpression:
  value=Number;
VariableExpression:
  variable=Identifier;
parantheses ParanthesisExpression:
  '(' Expression ')';
terminal Number returns nmeta.Integer:
  /\d+/;
terminal Identifier:
  /[a-zA-Z]\w*/;


LSP ist nicht nur auf das Parsen von Text begrenzt, sondern erlaubt auch praktische Interaktionen mit einem Text in der IDE. Programmiererinnen und Programmierern sind Features wie Code Lenses oder Code Fixes geläufig. Sie erlauben es, Analyseergebnisse wie die Anzahl der Referenzen oder Autor und Datum der letzten Änderung an einer Methode einfach in das Sichtfeld einzublenden. Interaktionen wie Refactorings lassen sich ebenfalls direkt aus dem Code heraus starten.

Zu Features dieser Art gehören:

  • Diagnostics: In den seltensten Fällen lassen sich Einschränkungen allein durch die Grammatik ausdrücken, auch domänenspezifische Analysen können auf Fehler hindeuten. Beispielsweise könnte man in einer DSL für Überweisungen eine Analyse des Empfängernamens einbauen und Fehler melden, sollte der Name nicht zur IBAN passen.
  • Code Lenses: Code Lenses können an einer beliebigen Stelle im Text eine beliebige Zeichenkette anzeigen. Damit lassen sich viele Arten von Analysen darstellen. Code Lenses können auch Aktionen anbieten, zum Beispiel öffnet sich beim Klicken auf die Anzeige der Referenzen üblicherweise ein Fenster mit Details. Einige Editoren bieten auch an, Unit Tests per Code Lens zu starten. Recht generisch könnte man Code Lenses verwenden, um in einer DSL den derzeitig beschriebenen Zustand auf ein modelliertes System anzuwenden.
  • Code Actions: Von Editoren wie der Visual-Studio-Familie mit einem Lampensymbol dargestellt, erlauben es Code Actions, zum Kontext passende Interaktionen auszuführen.
  • Inlays: Inlays blenden Texte im Editor ein, die eigentlich gar nicht dort stehen. Während dieses Feature in Programmiersprachen vor allem dazu dient, inferrierte Typsignaturen oder Parameternamen einzublenden, lässt es sich prinzipiell für beliebige Analysen verwenden.
  • Hover: Verweilt ein Nutzer mit der Maus auf einem Token, kann ein LSP-Server Kontextinformationen dazu liefern. Eine sehr clevere Nutzung ist beispielsweise, einen Hovertext für Schlüsselwörter mit Erklärungen dazu anzubieten. Gerade weil eine DSL nur für einen eingeschränkten Nutzerkreis gedacht ist, kann eine solche Unterstützung die Anwendung leichter zugänglich machen.

AnyText macht die Entwicklung dieser Features besonders einfach, indem es für jede Regel in der Grammatik eine Klasse generiert, in der Entwickler meist nur eine entsprechende Methode überschreiben müssen, um das jeweilige Feature zu aktivieren. Aber auch mit Langium oder Xtext lassen sich diese Features einfach nutzen.

Domänenspezifische Sprachen haben neben Formularen oder KI-Agenten einen eigenen Platz als Möglichkeit verdient, mit der Endanwender spezifizieren, welche Probleme der Computer lösen soll. DSLs richten sich dabei vor allem an Expertinnen und Experten, die solche Spezifikationen häufiger verfassen müssen, für die also Produktivität, einfache Versionierbarkeit und Interoperabilität textueller Sprachen besonders vorteilhaft sind.

Dabei hat sich die Entwicklung neuer DSLs durch Innovationen wie das Language Server Protocol und Frameworks wie Langium, Xtext oder AnyText dramatisch vereinfacht. Wo Developer Parser früher per Hand schreiben mussten, können sie diese heute mit Editorunterstützung weitgehend aus der Spezifikation einer Grammatik ableiten, was den Aufwand stark reduziert. Daher sollten DSLs als alternative UX-Technologie durchaus in Betracht gezogen werden.

[1] M. Eysholdt und H. Behrens, „Xtext: implement your language faster than the quick and dirty way,“ in Proceedings of the ACM International Conference Companion on Object Oriented Programming Systems Languages and Applications Companion, Reno/Tahoe, Nevada, USA, Association for Computing Machinery, 2010, pp. 307–309.

[2] G. Hinkel, A. Hert, N. Hettler und K. Weinert, „AnyText: Incremental, left-recursive Parsing and Pretty-Printing from a single Grammar Definition with first-class LSP support,“ Proceedings of the 18th ACM SIGPLAN International Conference on Software Language Engineering, SLE 2025, pp. 98–111, 12–13 Juni 2025.

[3] A. Warth, J. R. Douglass und T. Millstein, „Packrat parsers can support left recursion,“ in Proceedings of the 2008 ACM SIGPLAN Symposium on Partial Evaluation and Semantics-Based Program Manipulation, San Francisco, California, USA, Association for Computing Machinery, 2008, pp. 103–110.


(
who)



Source link

Künstliche Intelligenz

„Lego Batman“ angespielt: Ein BLOCKbuster, den man nicht unterschätzen sollte


Superhelden sind immer noch ein großes Thema, sei es jetzt im Kino oder auf der heimischen Konsole. Nachdem Marvel zuletzt Spider-Man auf ein Videospiel-Abenteuer geschickt hat, ist diesen Herbst sein weniger zimperlicher Klingen-Kollege „Wolverine“ dran. Währenddessen hält sich der andere Lizenz-Gigant Warner Bros. DC etwas zurück: Auf den großen Live-Service-Flop mit „Suicide Squad: Kill the Justice League“ folgt lediglich ein neues Lego-Spiel mit Batman-Lizenz.

Weiterlesen nach der Anzeige

Ein schwacher Trost für alle Fans, die auf ein „richtiges“ Game warten? Keineswegs. Denn der britische Entwickler Traveller’s Tales präsentiert mit „Lego Batman: Das Vermächtnis des Dunklen Ritters“ ein Spiel, das sich nicht auf dem seichten Gameplay der jüngsten Blöckchenspiele ausruht, sondern stattdessen ein überraschendes Best of Batman arrangiert.

Nach einem Kinobesuch macht sich Familie Wayne auf den Heimweg. Als sie eine Gasse als Abkürzung nutzen will, wird sie von einem Gangster überfallen. Die Eltern sterben, nur Sohn Bruce bleibt zurück und schwört seit diesem Tag, seine Heimatstadt Gotham von jeglichem Verbrechen zu beschützen.

So weit, so bekannt ist die legendäre Entstehungsgeschichte des Fledermaus-Rächers, mit der auch „Lego Batman“ beginnt. Das Spiel orientiert sich dabei klar an Tim Burtons Filmversion von 1989 – bis es plötzlich ins Christopher-Nolan-Universum von 2005 springt und zeigt, wie der mittlerweile erwachsene Bruce in den Himalaja reist, um dort in einem Kloster zum Ninja ausgebildet zu werden. Als die Kampfmaschine zurückkehrt, findet sie sich auch schon in der Filmhandlung von „The Batman“ aus dem Jahr 2022 wieder, in der Batman einem mächtigen Mafiaboss das Handwerk legen muss.


Ein Trauma erschafft einen Helden: Bruce Wayne verliert seine Eltern bei einem Überfall und wird dadurch zu Batman. (Bild:

heise medien

)

Das Erste, was „Lego Batman“ ganz meisterhaft gelingt, ist die Fusion aller Batman-Geschichten, als hätte es immer nur diese eine gegeben. Ohne ins Chaotische abzudriften. Ohne wichtige Dinge zu unterschlagen. Während frühere Lego-Spiele ihre Vorlagen Eins zu Eins abgebildet haben, nur eben im Blöckchen-Look, besteht der große Spaß in „Lego Batman“ darin, auf Vertrautes zu treffen und dann doch wieder von Neu-Interpretationen überrascht zu werden. Nichtkenner bekommen dagegen eine spannende Comic-Handlung präsentiert, die kein Vorwissen erfordert, aber eine gewisse Toleranz gegenüber Gummienten und Fledermaus-Kaka.

Denn er ist auch immer mit dabei: Der typische Lego-Humor, der sich seit jeher durch genauso trockene wie charmante Albernheiten, Übertreibungen und Erwartungsbrüche definiert. In den meisten Fällen zündet der Humor, vor allem wenn korrupte Polizisten in Donuts bezahlt werden oder Batman einen Club nur betreten darf, wenn er zuvor ein Dance Battle gewinnt. An anderer Stelle spielen Gangster im Bällebad und benutzen Kinderrutschen, um mal richtig zu entspannen. Nicht jede Stelle braucht Jokes, aber auch nicht jeder Humor muss jeden zum Lachen bringen. Wie gut, dass „Lego Batman“ aus unterschiedlichen Konfetti-Kanonen feuert.

Weiterlesen nach der Anzeige

Aber egal welches Fledermaus-Abenteuer nun erzählt wird, stets findet sich der Spieler in einer Lego-Version bekannter Batman-Schauplätze wieder, die er erkunden, bestaunen und (teilweise) zerstören kann, um Unmengen an Lego-Steinen einzusammeln. Mal muss ein simples Rätsel gelöst und ein anderes Mal eine Schar von Gegnern überwältigt werden. Dieser Spaß ist entweder allein oder im Koop spielbar – der zweite Spieler übernimmt hierfür den immer wechselnden und nicht weniger sympathischen Sidekick, der Batman begleitet. Wiederspielwert erhalten die Levels vor allem durch das Suchen nach versteckten Schätzen und Geheimgängen. Das ist im Grunde das Konzept, das Entwickler Traveller’s Tales seit seinen ersten Lego-Spielen anwendet. Doch mit „Lego Batman“ überwindet er diese Grenzen – abermals durch sein Fusionstalent.

Anstatt nur wild auf die Angriffstaste zu hämmern, kann der Spieler Batman wie einen agilen Wirbelwind durch ganze Gruppen steuern, hier kontern, da austeilen, dort ausweichen und hier einen finalen Hieb landen. Dieses Kampfsystem ist nicht neu, sondern perfekt aus einer anderen Batman-Spielereihe übernommen worden, nämlich der Arkham-Trilogie. Die fesselnde Erfahrung bleibt die Gleiche und jeder neue Kampf lädt dazu ein, den eigenen Flow zu perfektionieren und den Kombo-Zähler höher zu treiben. Über einen Skillbaum werden neue Attacken und Manöver freigeschaltet. Hin und wieder kann Batman die Kämpfe auch meiden und durch die Schatten schleichen. Dann ist es ihm möglich, die Gegner leise auszuschalten, hinterrücks oder von einer erhöhten Position aus. Das lockert das Gameplay nicht nur auf, sondern passt auch perfekt zum maskierten Rächer. Auch hier lässt Arkham grüßen.

Doch die wohl größte Überraschung erwartet den Spieler, wenn er die Ausbildung im Himalaja abgeschlossen hat: Denn Batman schwingt mit seinem Greifhaken nicht nur von Dach zu Dach, sondern darf auch in sein legendäres Batmobil steigen, mit dem er durch die Straßen von Gotham düst. Hier eröffnet „Lego Batman“ seine eigene kleine Open World, so wie man es aus „GTA“ kennt: mit Verkehr und Passanten, mit vielen Schauplätzen zum Erkunden und vielen Kurven zum Driften. Dabei steuert sich das Batmobil so elegant und rasant, dass es fast egal ist, wo es überhaupt hingeht, ob man der Haupthandlung folgt oder sich von den vielen Mini-Aufgaben ablenken lässt.

Eine Kletterpassage, eine Verfolgungsjagd, ein Verhör, ein Bosskampf, eine neue Mechanik und dann wieder eine Sequenz, die zum Schmunzeln einlädt. Ist der eine Schurke besiegt, taucht schon der nächste auf. Die Bat-Höhle dekorieren. Mit dem Batmobil dutzende Wagen durch die Gegend kicken. Und für ein Riddler-Rätsel ist immer noch Zeit. Bevor überhaupt Langeweile aufkommen kann, hat „Lego Batman“ bereits die nächste Überraschung unter dem Cape hervorgeholt. Während die liebevoll gestalteten und detailreichen Lego-Schauplätze bei all der durchgepeitschten Action sogar etwas untergehen.

Es sind eben nicht nur Steine: Entwickler Traveller’s Tale nutzt die Chance, alle Welt mit ihrer neuen Formel zu überraschen und poliert dabei das gesamte Batman-Repertoire auf, von der Story bis zum Gameplay. Zwei Dinge sind zu bemängeln: In früheren Spielen gibt es mehr Charaktere zum Sammeln und Spielen, da bleibt „Lego Batman“ mit unter zehn Figürchen schon sehr sparsam. Gleichzeitig ist das Spiel zwar für eine Eltern-Kind-Konstellation oder eine Casual-Couch-Coop-Session perfekt ausbalanciert, für den erfahrenen Singleplayer aber viel zu einfach – selbst auf dem höchsten von drei Schwierigkeitsgraden. Wer weder für den Lego-Charme noch für den Batman-Fanservice gekommen ist, ist hier falsch. Alle anderen sollten sich schon mal in die Fledermaus-Kluft werfen.

„Lego Batman: Das Vermächtnis des Dunklen Ritters“ erschien am 22. Mai für Windows, PS5, Xbox Series und Nintendo Switch 2. Es kostet 69,99 Euro. USK ab 12 Jahren.


(dahe)



Source link

Weiterlesen

Künstliche Intelligenz

Smart-Home-Aktoren von Wago im Test: Mit 16 Ampere und Matter


Mit gleich acht Produkten, die ab Ende Mai 2026 bei den ersten Händlern im Sortiment sind, meldet sich Wago im Smart-Home-Geschäft an. Allen gemein ist der Smart-Home-Standard Matter. Jeden Aktor gibt es sowohl mit WLAN als auch mit dem Funkprotokoll Thread, das bei 2,4 GHz arbeitet und von Smart-Home-Basisstationen wie Ikea Dirigera oder dem Apple Homepod gesprochen wird. Die Produkte sind für Smart-Home-Beitreiber gedacht, die bereits eine Matter-Basis mit oder ohne Thread haben oder eine solche anschaffen wollen. Wago baut keine eigene Basis.

Insgesamt gibt es Aktoren für vier Anwendungsfälle, alle in derselben Bauform mit den Maßen 46 × 46 × 22 Millimeter: einen Rollladenaktor mit zwei geschalteten Kanälen (für auf und ab) und zwei Tastereingängen, einen Aktor mit zwei Relais für je 6 Ampere (1,3 kW bei 230 Volt) und zwei Schaltereingängen; außerdem einen Einkanaldimmer sowie einen Aktor mit einem 16-Ampere-Relais und einem Eingang. Zum Test haben wir die 16-Ampere-Aktoren mit Thread und WLAN ins Labor geholt.

Die Verbindungsklemmen mit den organgefarbenen Klemmhebeln haben Wago bekannt gemacht, daher dürfen sie auch bei Wagos Smart-Home-Produkten nicht fehlen. Durch sie geht die Installation schnell von der Hand, denn einerseits entfällt das Schrauben, andererseits nehmen sie auch feindrähtige Leitungen (Litze) ohne Aderendhülse sicher auf. Von diesem Komfort profitiert der Elektriker, der die Aktoren normgerecht hinter Lichtschalter oder Steckdose verbaut – fluchen wird er womöglich über die Abmessung des Gehäuses oder über die fehlende Tiefe der Unterputzdose. „Das Produkt passt in eine Unterputzdose“, steht zwar im Datenblatt, doch das dürfte im Altbau hin und wieder Wunschdenken bleiben. Wagos Konkurrenz, allen voran Shelly, baut Einkanal-Aktoren deutlich kompakter – der Shelly 1 ist nur 16 Millimeter hoch.


Das war die Leseprobe unseres heise-Plus-Artikels „Smart-Home-Aktoren von Wago im Test: Mit 16 Ampere und Matter“.
Mit einem heise-Plus-Abo können Sie den ganzen Artikel lesen.



Source link

Weiterlesen

Künstliche Intelligenz

Microsoft patcht hochriskante SharePoint-Lücke | heise online


Admins, die Microsoft SharePoint-Server in ihrer Infrastruktur betreiben, sollten prüfen, ob sie die Mai-Updates installiert haben. Microsoft schließt damit eine als hochriskant eingestufte Sicherheitslücke, die Angreifern das Einschleusen und Ausführen von Schadcode ermöglicht.

Weiterlesen nach der Anzeige

In einem CVE-Schwachstelleneintrag warnt Microsoft vor der Sicherheitslücke. Das Problem besteht aufgrund der Deserialisierung nicht vertrauenswürdiger Daten, also deren Entpacken und Verarbeiten oder gar Ausführen. Angreifer, die am SharePoint angemeldet sind, können dadurch über das Netzwerk Code einschmuggeln (CVE-2026-45659, CVSS 8.8, Risiko „hoch“). Es sind dafür keine erhöhten Rechte nötig. Das Update steht für den SharePoint Server 2016, SharePoint Enterprise Server 2016, SharePoint Server 2019 und die Subscription Edition bereit.

Microsoft führt weiter aus, dass die Schwachstelle aus dem Internet angreifbar ist. Da Angreifer vorab keine detaillierten Kenntnisse über verwundbare Systeme benötigen, um diese erfolgreich anzugreifen, gilt den Entwicklern ein Angriff als wenig komplex. Dennoch schätzen sie, dass der Missbrauch dieser Schwachstelle weniger wahrscheinlich ist. Zudem gibt Microsoft an, dass die Sicherheitslücke bislang noch nicht attackiert wurde.

Die Informationen zu der Schwachstelle hat Microsoft erst in der Nacht zum Mittwoch veröffentlicht. Es handelt sich jedoch nicht um ein Notfallupdate, sondern um einen „vergessenen“ Schwachstellen-Eintrag. Das Update vom Mai-Patchday behandelt die Schwachstelle demnach bereits.

Da SharePoint-Lücken für Cyberkriminelle sehr interessant sind und diese häufiger in freier Wildbahn missbraucht werden, sollten IT-Verantwortliche sicherstellen, dass sie die Aktualisierung angewendet haben. Mitte April hatte Microsoft zum Patchday etwa Updates für SharePoint veröffentlicht, nachdem eine Sicherheitslücke darin bereits angegriffen wurde.


(dmk)



Source link

Weiterlesen

Beliebt