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

  • Aviator + Websockets

    15.06.2019

    Nachdem ich in den letzten Wochen und Monaten meine Zeit und Energie in die sQLshell gesteckt habe - was sowohl Bugfixing als auch neue Features betraf - habe ich nun endlich die Zeit gefunden, ein bereits lange überfälliges Feature an dWb+ und speziell am aviator zu implementieren.

    Weiterlesen...

Neueste Artikel

  • Neue Version plantumlinterfaceproxy napkin look

    Es gibt eine neue Version des Projektes plantumlinterfaceproxy - Codename napkin look.

    Weiterlesen...
  • Apache HTTPCore5 funktioniert nicht mit Docker

    Ich habe neulich drei Stunden meines Lebens verschwendet weil ich unbedingt die neueste Version der HTTPCore5 Library von Apache einsetzen wollte.

    Weiterlesen...
  • Entwurfsmodus für beliebige SVG Graphiken

    Nachdem ich in der Vergangenheit immer wieder Weiterentwicklungen der Idee vorgestellt habe, Graphiken mit dem Computer so zu ezeugen dass sie eine gewisse "handgemachte" Anmutung haben, habe ich nunmehr die durchschlagende Idee gehabt:

    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.