Automatische Erstellung von Modulverbindungen - pro & contra

vorhergehende Artikel in: dWb+ Video
05.12.2015

Einige Gedanken zur Idee, Module automatisch miteinander zu verbinden...

Motivation

Dataflow Workbench dWb+ Entstanden ist die Idee, über das Konzept der automatischen Erstellung von Verbindungen zwischen Modulen nachzudenken, während der Arneit am Projekt WebbleTag: Webbles etablieren Kommunikation untereinander, wenn sie "aufeinander" abgelegt werden. Dazu ist aber jede Menge Boilerplate-Code notwendig - da jedes Modul oder jede Komponente mit allem klarkommen muss, was es empfängt.

Dennoch - die Idee, Komponenten, die offensichtlich "zusammenpassen", automatisch miteinander zu verbinden, klingt logisch...

Interaktionsmetapher

Wie startet man aber die automatische verbindung? Bei dWb+ werden Module dann aktiviert, wenn sie auf dem Arbeitstisch landen. Das kann durch verschiedene Events geschehen. Wenn man dies als Startpunkt der automatischen Erstellung der Verbindungen nehmen würde, wäre das kontraproduktiv: Man stelle sich einen Arbeitstisch mit 20 Komponenten vor, dem eine weitere hinzugefügt wird: Ergebnis wäre dann die Suche dieses einen nach möglichen Verbindungspartnern unter allen 20 bereits hinzugefügten. Abgesehen davon, dass das zu Performanceeinbußen führen würde, würden wahrscheinlich auch einige Verbindungen entstehen, die man eigentlich gar nicht wollte...

Also erstellen wir automatische Verbindungen nur zwischen zwei auszuwählenden Modulen? Aber wie soll die Interqaktionsmetapher aussehen, die diesen Prozess startet? Drag'n'Drop ist aus meiner Sicht zu ungenau. Ich habe mir daher eine andere Möglichkeit einfallen lassen: Die Außenkanten der Module sind jetzt magnetisch - sie ecken sozusagen aneinander an.

Wenn ein Modul mit seinen Outputslots an die Inputslots eines anderen aneckt, ist dies das Signal, automatisch Verbindungen zwischen zueinander "passenden" Slots zu erstellen.

Was sind "passende" Slots?

Das ist hierbei die einzige wirkliche Gretchenfrage: wie bestimmt das System, dass zwei Slots zusammen passen und erstellt darauf basierend dann eine neue Verbindung? Nur vom Typ der Slots kann man es nicht abhängig machen: nur identische Typen als passend zu betrachten, würde der Philosophie von dWb+ zuwiderlaufen: Slots können von Hand verbunden werden, wenn sie in einer Vererbungshierarchie stehen: Der Outputslot vom Typ int kann zum Beispiel mit einem Eingang vom Typ Number verbunden werden.

Setzt man dies als Kriterium an, stellt man aber schnell fest, dass dadurch fast jeder Outputslot mit jedem Inputslot verbunden wird - daher funktioniert das nicht.

Es ist auch keine Lösung, den automatischen Verbindungsaufbau dadurch einzuschränken, dass er nur dann erfolgt, wenn weder Aus- noch Eingang bisher mit einem anderen Modul verbunden sind. Das kann man sich am Beispiel eines Taktgeber-Moduls veranschaulichen: dort ist es ja So., dass wahrscheinlich gerade mehrere Module von seinem Taktausgang gesteuert werden sollen.

Man könnte dazu die Informationen im PropertyDescriptor nehmen, die im Attribut preferred steckt. Das würde aber nur auf Properties - mit anderen Worten Ausgänge - wirken und nicht auf Eingänge. Darüber hinaus kennzeichnet dieses Attribut laut Dokumentation die Properties, die an prominenter Position in der GUI platziert werden sollen - also wahrscheinlich nichts mit dem Erstellen von Verbindungen zu tun haben...

Man könnte den Ein- und Ausgängen selbst definierte Flags zuordnen, die einen Ein- oder Ausgang zweifelsfrei als solchen markieren, der die automatische Erzeugung von Verbindungen erlauben soll. In diesem Fall funktioniert diese Erstellung aber mit keinem Modul, das von Entwicklern geschaffen wurde, bevor das Feature "automatische Verbindungserstellung aktiviert wurde. Wenn ein Anwender nun verschiedene Module auf den Arbeitstisch zieht und versucht, diese per Automatik zu verbinden, dabei aber solcche erwischt, die dieses Flag nicht aufweisen, wird er nach dem dritten vergeblichen Versuch denken "Feature funktioniert nicht - mach ichs eben per Hand".

Ein möglicher Ausweg wäre die visuelle Markierung von Modulen, die die Automatik unterstützen - etwa durch Embleme...

Ein Seiteneffekt der Untersuchungen rund um das Thema war die Erweiterung der Interaktionsmöglichkeiten mit Verbindungen: ein Klick mit der linken Maustaste auf eine Verbindung schaltet sie zwischen den Stati aktiv und inaktiv um. Klickt man bei gehaltener Feststelltaste auf eine Verbindung, wird diese sofort entfernt.

Praktisch wurden von den hier vorgestellten Ideen zwei erprobt: die Erstellung von Verbindungen lediglich basierend auf der Kompatibilität ihrer Datentypen und die Markierung von "geeigneten" Slots per BeanInfo-Attributen. Die letztere wird hier in einem kurzen Video veranschaulicht: Das Modul Clock hat einen Ausgang, das Modul GaussianRandomBoxMuller je einen Aus- und Eingang und das Modul Sink einen Eingang, die als mögliche Kandidaten für die automartische Erstellung von Verbindungen gekennzeichnet wurden - zu erkennen jeweils an den Dekorationen rechts oben.

Artikel, die hierher verlinken

Neue Interaktionsmetapher in dWb+

26.03.2017

Da ich - wie ich neulich in einer Kommunikation mit einem geschätzten Kollegen zum erstenmal explizit realisierte - dWb+ schon länger pflege als es die Herstellerfirma anderer Produkte überhaupt gibt, bin ich dennoch nicht zu stolz, neue Ideen einfließen zu lassen...

Alle Artikel rss Wochenübersicht Monatsübersicht Github Repositories Gitlab Repositories Mastodon Über mich home xmpp


Vor 5 Jahren hier im Blog

  • Certstream, InfluxDB, Grafana und Netflix

    16.04.2019

    Nachdem ich vor kurzem über mein erstes Spielen mit dem certstream berichtete, habe ich weitere Experimente gemacht und die Daten zur besseren Auswertung in eine InfluxDB gepackt, um sie mit Grafana untersuchen zu können.

    Weiterlesen...

Neueste Artikel

  • Die sQLshell ist nun cloudnative!

    Die sQLshell hat eine weitere Integration erfahren - obwohl ich eigentlich selber nicht viel dazu tun musste: Es existiert ein Projekt/Produkt namens steampipe, dessen Slogan ist select * from cloud; - Im Prinzip eine Wrapperschicht um diverse (laut Eigenwerbung mehr als 140) (cloud) data sources.

    Weiterlesen...
  • LinkCollections 2024 III

    Nach der letzten losen Zusammenstellung (für mich) interessanter Links aus den Tiefen des Internet von 2024 folgt hier gleich die nächste:

    Weiterlesen...
  • Funktionen mit mehreren Rückgabewerten in Java

    Da ich seit nunmehr einem Jahr bei meinem neeun Arbeitgeber beschäftigt und damit seit ungefähr derselben Zeit für Geld mit Python arbeite, haben sich gewisse Antipathien gegenüber Python vertieft (ich kann mit typlosen Sprachen einfach nicht umgehen) - aber auch einige meiner Gründe, Python zu lieben sind ebenso stärker geworden. Einer davon ist der Fakt, dass eine Methode in Python mehr als einen Wert zurückgeben kann.

    Weiterlesen...

Manche nennen es Blog, manche Web-Seite - ich schreibe hier hin und wieder über meine Erlebnisse, Rückschläge und Erleuchtungen bei meinen Hobbies.

Wer daran teilhaben und eventuell sogar davon profitieren möchte, muß damit leben, daß ich hin und wieder kleine Ausflüge in Bereiche mache, die nichts mit IT, Administration oder Softwareentwicklung zu tun haben.

Ich wünsche allen Lesern viel Spaß und hin und wieder einen kleinen AHA!-Effekt...

PS: Meine öffentlichen GitHub-Repositories findet man hier - meine öffentlichen GitLab-Repositories finden sich dagegen hier.