Der Experiment-Editor
Ein Experiment ist ein Test, der als Graph geschrieben ist: Knoten, die senden (eine HTTP-Anfrage, eine OSC-Nachricht, eine MQTT-Veröffentlichung…), auf eine Antwort warten, prüfen, was zurückkam, die andere Seite spielen oder das Netzwerk auf Kommando unterbrechen, verbunden durch Drähte, die sagen, was als Nächstes läuft. Ein Durchlauf beginnt bei Start, folgt den Drähten und besteht, wenn er Ende erreicht und jeder Schritt bestanden ist. Sie bauen ihn in der Ansicht Experimente, führen ihn dort aus und führen dieselbe Datei von der Kommandozeile oder einem Server aus.
Der Editor hält jeweils ein Experiment und speichert es während der Arbeit. Um mehrere zu behalten, exportieren Sie Momentaufnahmen oder öffnen Sie ein anderes aus einer Datei (siehe Speichern und Dateien).
Jede Art von Knoten, ihre Felder und Ausgänge stehen in der Knotenreferenz. Wie Werte zwischen Knoten fließen, steht in Daten und Vorlagen; parallele Zweige, Schleifen, Neuversuche und Wiederholungen in Ablauf.
Die Ansicht
| Bereich | Was er enthält |
|---|---|
| Werkzeugleiste (oben) | Name und Speicherzustand des Experiments, Knoten hinzufügen, Parameter, Profile, die Bereiche, Fokusmodus, Vollbild und Ausführen |
| Arbeitsflächenleiste | Rückgängig und Wiederholen, die Knotensuche, Anordnen und Zoom |
| Arbeitsfläche | Der Graph: Knoten, Drähte und der auf ihnen gezeichnete Fortschritt des Durchlaufs |
| Eigenschaften (rechts) | Die Felder des ausgewählten Knotens, seine Vorschau und Jetzt senden; oder was mehrere ausgewählte Knoten oder ein ausgewählter Draht erlauben |
| Durchlauf-Zeitleiste (unten) | Die Schritte des aktuellen oder letzten Durchlaufs, sein Ergebnis, Bericht und Startwert |
Der Eigenschaften-Bereich und die Zeitleiste haben einen Griff an ihrer Innenseite: Ziehen Sie ihn, oder fokussieren Sie ihn mit Tab und verwenden Sie die Pfeiltasten (Shift für größere Schritte); ein Doppelklick oder Enter gibt dem Bereich seine Standardgröße zurück. Die Größen bleiben für das nächste Mal erhalten. Die Zeitleiste bleibt eingeklappt, bis der erste Durchlauf sie öffnet.
Die Werkzeugleiste
| Bedienelement | Was es tut |
|---|---|
| ☰ Experimente | Öffnet die Vorlagen, das Öffnen einer JSON-Datei und den Export (Speichern und Dateien) |
| Name des Experiments | Der Name des Experiments; ein Durchlauf braucht einen. Berichte von Durchläufen halten ihn fest, und Vergleichen findet frühere Durchläufe darüber |
| Gespeichert / Wird gespeichert… / Speichern fehlgeschlagen | Ob die letzte Änderung auf der Platte ist |
| ⚠ Graph vervollständigen | Wird angezeigt, solange das Experiment nicht laufen kann; sein Tooltip sagt, warum, ein Klick wählt den Knoten aus, um den es geht (Prüfung) |
| + Knoten hinzufügen | Öffnet das Hinzufügen-Menü, nach dem ausgewählten Knoten, wenn es einen gibt (A) |
| Profil | Welches Profil der Durchlauf, die Vorschau und Jetzt senden verwenden; angezeigt, wenn das Experiment Profile hat. ⚠ markiert ein Profil, das nicht laufen würde |
{ } Parameter | Parameter, Profile, der Startwert, Cookies und Geheimnisse (Daten und Vorlagen) |
| ☷ Eigenschaften | Zeigt oder verbirgt den Eigenschaften-Bereich |
| ▢ Fokusmodus | Verbirgt die Seitenleiste, die Kopfzeile und den unteren Bereich (Fokusmodus und Vollbild) |
| ⛶ Vollbild | Das Fenster im Vollbild, mit Fokusmodus |
| Experiment ausführen | Prüft, speichert und führt das Experiment aus; während es läuft, ist die Schaltfläche Stoppen |
| ▾ Ausführen mit… | Ein Durchlauf mit einem anderen Profil, anderen Parameterwerten oder einem vorgegebenen Startwert, ohne das Experiment zu ändern |
Auf der Arbeitsfläche bewegen
- Schwenken: Ziehen Sie die leere Arbeitsfläche oder scrollen Sie.
- Zoom: Ctrl und das Mausrad zoomen um den Zeiger; − und + in der Arbeitsflächenleiste schreiten um 10 % weiter. Der Zoom geht von 15 % bis 200 %; der Prozentwert zwischen den Schaltflächen zeigt, wo Sie sind.
- 1:1 (Zoom zurücksetzen, Ctrl+1) geht zurück auf 100 %.
- ⊡ Graph einpassen (Ctrl+0) zeigt den ganzen Graphen, höchstens bei 100 %.
- Einen Knoten finden: Knoten in der Arbeitsflächenleiste (es zeigt, wie viele Knoten es gibt) oder Ctrl+F. Tippen Sie Wörter aus dem Namen des Knotens, seiner Zusammenfassung (eine URL, eine Adresse, ein Topic) oder seiner id; ↑ ↓ wählen, Enter wählt den Knoten aus und holt ihn ins Sichtfeld (auf mindestens 80 % gezoomt), Esc schließt.
Es gibt keine Minimap: Graph einpassen und die Suche erledigen ihre Arbeit.
Knoten und Drähte
Ein Knoten zeigt seine Art, eine einzeilige Zusammenfassung dessen, was er tut, und Plaketten für seine Einstellungen: ↻ und eine Zahl für Neuversuch, × und eine Anzahl (oder eine Zeit) für Wiederholung, ⚡ für Last. Sein Eingang ist links — jeder Knoten außer Start hat einen — und seine Ausgänge rechts:
| Ausgang | An | Verfolgt, wenn |
|---|---|---|
| Ausgang | Die meisten Knoten | Der Schritt bestanden ist |
| Ja / Nein | Statusverzweigung, Nach Wert verzweigen | Der Vergleich zutraf / nicht zutraf |
| Zweig 1 / Zweig 2 | Paralleler Zweig | Immer, beide zugleich |
| Treffer / Timeout | Warteknoten | Eine passende Nachricht traf ein / rechtzeitig keine |
| Rumpf / Fertig / Limit | Schleife | Eine weitere Iteration / die Schleife ist vorbei / die Iterationen gingen aus |
Ein Ausgang darf mehrere Drähte haben. Der erste Draht führt den Zweig fort; jeder weitere Draht startet einen parallelen Zweig mit einer Kopie der zu diesem Zeitpunkt bekannten Variablen. Ein Knoten Zweige zusammenführen wartet auf jeden Draht, der in ihn führt. Einzelheiten stehen in Ablauf.
Timeout und Limit sind optional: Ohne Draht lässt ein Timeout oder das Ausgehen der Iterationen den Schritt fehlschlagen. Jeder andere Ausgang muss einen Draht haben, bevor das Experiment laufen kann.
Der Draht vom Rumpf einer Schleife zurück zu ihr wird als Bogen über den Rumpf gezeichnet; er ist der einzige Draht, der rückwärts führen darf.
Knoten hinzufügen
Das Hinzufügen-Menü
Das Hinzufügen-Menü listet jede Art von Knoten nach Gruppe auf — Aktionen, Beobachten, Emulieren, Störungen, Daten, Prüfungen, Ablauf — und dann Gespeicherte Signale: die Signale Ihrer Bibliothek, die ein Knoten werden können (OSC, HTTP, UDP mit Text-Nutzdaten, MQTT), mit ausgefüllten Feldern.
Ihr Suchfeld hat beim Öffnen den Fokus. Tippen Sie ein paar Buchstaben: Jedes Wort muss im Namen des Knotens, seiner Beschreibung oder seinem Typ (http, wait_osc) vorkommen; ein Signal wird über seinen Namen, seinen Ordner, seinen Transport oder sein Ziel gefunden. ↑ ↓ wählen, Enter fügt hinzu, Esc schließt. Die Zeile oben sagt, wohin der Knoten kommt: nach einen Knoten oder parallel zu einem.
Ein neuer Knoten ist ausgewählt, der Eigenschaften-Bereich öffnet sich, und sein Hauptfeld — die URL, die Adresse, das Topic, die Verzögerung — hat den Fokus, mit ausgewähltem Text, sodass Sie sofort tippen können. Esc in einem Feld bringt Sie zurück zum Knoten auf der Arbeitsfläche, bereit für das nächste A.
Nach dem ausgewählten Knoten
A, + Knoten hinzufügen in der Werkzeugleiste und + Danach hinzufügen im Eigenschaften-Bereich fügen den nächsten Schritt nach dem ausgewählten Knoten hinzu:
- Er hängt sich an den ersten Ausgang des Knotens, der noch keinen Draht hat (etwa das freie Nein einer Statusverzweigung), oder sonst an seinen ersten Ausgang.
- Hat dieser Ausgang bereits einen Draht, wird der neue Knoten in ihn eingefügt (in den ersten, wenn es mehrere gibt): Der Draht läuft nun durch den neuen Knoten, und alles danach rückt nach rechts, um Platz zu machen.
- Ist Ende ausgewählt, kommt der Knoten davor, wenn ein Draht in ihn führt.
- Ist nichts ausgewählt, landet der Knoten in der Mitte der Ansicht, ohne Drähte.
Ein Knoten mit einem einzigen Ausgang, der auf den leeren Rumpf einer Schleife gesetzt wird — so oder auf einem neuen Draht —, wird auch zurück zu ihr verdrahtet, sodass der Rumpf sofort vollständig ist.
In einen Draht
Jeder Draht hat ein + in der Mitte (Knoten einfügen). Es öffnet das Hinzufügen-Menü, und der gewählte Knoten wird in diesen Draht eingefügt. Eine so eingefügte Schleife setzt den Ablauf durch ihren Fertig fort.
Auf einem neuen Draht
Ziehen Sie einen Draht aus einem Ausgang und lassen Sie ihn auf der leeren Arbeitsfläche los: Das Hinzufügen-Menü öffnet sich dort, und der neue Knoten kommt auf einen neuen Draht dieses Ausgangs — neben die Drähte, die er bereits hat, sodass er parallel zu ihnen läuft. Dasselbe geschieht, wenn Sie einen Ausgang anklicken und dann die leere Arbeitsfläche anklicken oder doppelklicken.
Überall
Doppelklicken Sie auf die leere Arbeitsfläche, um an dieser Stelle einen Knoten ohne Drähte hinzuzufügen.
Aus anderen Ansichten
- Zum Experiment hinzufügen in den Ansichten OSC und HTTP fügt das eben Ausprobierte als nächsten Schritt hinzu — direkt vor Ende, wenn ein Draht in ihn führt — und wechselt zum Editor.
- Darauf warten neben einer Nachricht im OSC-Monitor fügt einen Auf OSC warten hinzu, der sie erkennt: ihre Adresse und ihren Text, Ganzzahl- und Wahr/Falsch-Argumente (Floats sind Messwerte, die sich ändern, daher bleiben sie weg). Stoppen Sie den Monitor vor dem Ausführen: Der Durchlauf lauscht selbst auf diesem Port.
- Darauf warten an einem Topic des MQTT-Baums fügt einen Auf MQTT warten auf diesem Topic bei diesem Broker hinzu.
Während ein Durchlauf läuft, können keine Knoten hinzugefügt werden; die Konsole sagt es.
Knoten verbinden
- Ziehen Sie von einem Ausgang auf einen Knoten. Loslassen innerhalb von 24 Pixeln um einen Knoten genügt.
- Klicken Sie einen Ausgang an (oder fokussieren Sie ihn und drücken Sie Enter oder Space): Die Arbeitsflächenleiste sagt Einen Eingang wählen. Klicken Sie einen Knoten oder seinen Eingang an, um zu verbinden; klicken Sie die leere Arbeitsfläche an, um dort einen Knoten auf einem neuen Draht hinzuzufügen; Abbrechen oder Esc gibt auf.
Ein Draht wird abgelehnt, wenn er einen Zyklus erzeugen würde (außer dem Rückweg einer Schleife), wenn er in Start hinein oder aus Ende heraus führt oder wenn er einen Knoten mit sich selbst verbinden würde; der Editor sagt es. Einen bereits vorhandenen Draht zu ziehen, ändert nichts.
Um einen Draht zu entfernen, klicken Sie ihn an — der Eigenschaften-Bereich zeigt, was er verbindet — und drücken Sie Delete, oder verwenden Sie dort Verbindung entfernen. Beim Überfahren eines Drahts erscheint zudem ein × über seinem +. Die Eigenschaften eines Knotens listen seine ausgehenden Drähte auf, jeder mit × (Trennen).
Mehrere Knoten auswählen
| Um | Tun Sie |
|---|---|
| Einen Knoten auswählen | Klicken Sie ihn an oder bewegen Sie sich mit Tab zu ihm |
| Einen Knoten zur Auswahl hinzufügen oder herausnehmen | Shift oder Ctrl und ein Klick |
| Mit einem Rahmen auswählen | Shift und auf der leeren Arbeitsfläche ziehen: Jeder Knoten, den der Rahmen berührt, tritt der Auswahl bei |
| Alle Knoten auswählen | Ctrl+A |
| Die Auswahl aufheben | Klicken Sie die leere Arbeitsfläche an; Esc, wenn mehrere ausgewählt sind |
| Sie verschieben | Ziehen Sie einen von ihnen: Alle bewegen sich |
| Sie leicht verschieben | Ist ein Knoten fokussiert, verschieben die Pfeiltasten die Auswahl um 5 Pixel, mit Shift um 20 |
Der Eigenschaften-Bereich zeigt den zuletzt angeklickten Knoten; sind mehrere ausgewählt, zeigt er deren Anzahl, mit Kopieren, Duplizieren und Knoten löschen.
Kopieren, Ausschneiden und Einfügen
Ctrl+C kopiert die ausgewählten Knoten und die Drähte zwischen ihnen als Text; Ctrl+X entfernt sie zusätzlich; Ctrl+V fügt sie ein — in dieses Experiment, in ein später geöffnetes anderes oder in ein anderes Signal-Lab-Fenster. Der Text ist JSON, sodass Sie ihn auch in einer Datei oder einer Nachricht aufbewahren können.
- Start und Ende sind einzigartig: Sie werden nie kopiert.
- Drähte zwischen einem kopierten Knoten und dem Rest des Graphen werden nicht kopiert; verdrahten Sie die Kopie selbst.
- Jeder eingefügte Knoten erhält eine neue id.
- Ein Knoten, der einen anderen benennt — Störung ändern, Emulator aus/an, WebSocket senden, Auf WebSocket warten, WebSocket schließen —, benennt die Kopie, wenn diese ebenfalls kopiert wurde; andernfalls benennt er weiter das Original, wenn es in diesem Experiment ist, oder den ersten Knoten dieser Art hier.
- Ein eingefügter Emulator oder Störung, auf dessen Port dieses Experiment bereits lauscht, weicht auf den nächsten freien Port aus. Was an das Original sendet, tut das weiterhin.
- Die Kopie landet 32 Pixel rechts von und eine Zeile unter ihrer Herkunft, weiter unten, bis sie keinen Knoten überdeckt, und ist ausgewählt.
Ctrl+D (Duplizieren) tut dasselbe ohne die Zwischenablage.
Löschen
Delete oder Backspace (Knoten löschen, Knoten löschen) entfernt die ausgewählten Knoten und ihre Drähte. Ein Knoten, der genau einen Draht hinein und einen hinaus hatte, hinterlässt an seiner Stelle einen Draht vom Knoten davor zum Knoten danach, sodass eine Kette verbunden bleibt. Start und Ende lassen sich nicht löschen.
Rückgängig und Wiederholen
Ctrl+Z macht rückgängig; Ctrl+Shift+Z oder Ctrl+Y wiederholt (↶ ↷ in der Arbeitsflächenleiste). Ein Ziehen, eine Reihe von Pfeiltasten-Verschiebungen oder das Tippen in einem Feld ist ein Schritt. Die letzten 100 Schritte bleiben erhalten, solange die App offen ist, über Ansichtswechsel hinweg; das Öffnen eines anderen Experiments ist ebenfalls ein Schritt, sodass Ctrl+Z das vorherige zurückbringt. Rückgängig und Wiederholen warten, während ein Durchlauf läuft.
Anordnen
Anordnen legt den Graphen von links nach rechts aus: jeden Knoten in der Spalte nach dem letzten Knoten, der zu ihm führt, den Rumpf einer Schleife in ihrer Zeile — und passt dann die Ansicht an. Es ist ein Schritt der Historie. Ein Entwurf mit einem Zyklus, der nicht der einer Schleife ist, bleibt, wie er ist.
Der Eigenschaften-Bereich
Ist ein Knoten ausgewählt, zeigt der Bereich von oben nach unten:
- Den Namen des Knotens (sein Tooltip sagt, was er tut) und, wenn das Experiment wegen dieses Knotens nicht laufen kann, was falsch ist.
- Seine Felder. Felder, die Vorlagen annehmen, schlagen Parameter, Variablen, Geheimnisse und Generatoren vor, während Sie
{{tippen, oder bei Ctrl+Space. - Seine Einstellungen: unter Last senden bei einer HTTP-Anfrage, wiederholt senden bei Knoten, die senden, bei Fehler erneut versuchen bei Knoten, die senden oder lauschen, und auf eine Antwort warten bei OSC- und UDP-Nachrichten (siehe Knoteneinstellungen). Last ersetzt Wiederholung und Neuversuch, solange sie an ist.
- Das Lastergebnis des letzten Durchlaufs, bei einem HTTP-Knoten, der unter Last lief.
- Die Vorschau — Wird gesendet, Wartet auf oder Vergleicht —, wenn der Knoten Vorlagen hat: was er senden, erwarten oder vergleichen würde, aufgelöst mit den aktuellen Parametern und den bisher bekannten Werten (Jetzt senden und die Vorschau).
- Jetzt senden oder Jetzt empfangen und was es zuletzt getan hat.
- Seine ausgehenden Drähte, jeder mit ×.
- ⚡ Über eine Störung leiten bei einer OSC- oder UDP-Nachricht: Eine Störung wird vor den Knoten gesetzt — sie lauscht auf einem freien Loopback-Port ab 9010 aufwärts und leitet an das Ziel des Knotens weiter —, und der Knoten wird auf sie gerichtet, sodass der nächste Durchlauf verschlechtert, was er sendet (Störungen).
- + Danach hinzufügen, Kopieren, Duplizieren und Knoten löschen.
Ein Doppelklick auf einen Knoten öffnet den Bereich mit dem Cursor in seinem Hauptfeld. Sind mehrere Knoten ausgewählt, bietet der Bereich, was mit allen getan werden kann; ist ein Draht ausgewählt, was er verbindet und Verbindung entfernen. Während ein Durchlauf läuft, sind die Felder gesperrt.
Jetzt senden und die Vorschau
Jetzt senden (Ctrl+Enter, auch aus dem Inneren der Knotenfelder) sendet den ausgewählten Knoten für sich allein, ohne das Experiment auszuführen, durch denselben Code, den ein Durchlauf verwendet. Es wird bei HTTP-Anfrage, TCP-Nachricht, OSC-Nachricht, UDP-Datagramm, MQTT veröffentlichen, WebSocket verbinden und WebSocket senden angeboten. Bei einem Warteknoten ist es Jetzt empfangen: Der Warteknoten lauscht von jetzt an, bis eine Nachricht passt oder sein Timeout endet.
- Der Knoten verwendet das aktive Profil, die gespeicherten Geheimnisse und die bisher bekannten Variablenwerte — aus dem letzten Durchlauf und aus früheren Ergebnissen von Jetzt senden. Benennt eine Vorlage einen Wert, den noch niemand gesetzt hat, wird nichts gesendet und die Namen werden aufgelistet.
- Es wird einmal gesendet: Neuversuch, Wiederholung und Last gelten nicht, keine Cookies werden behalten, und Emulatoren und Relais des Experiments werden nicht gestartet.
- Ein WebSocket senden oder Auf WebSocket warten öffnet die Verbindung, die sein WebSocket verbinden beschreibt, für diesen einen Test.
- Bei einer HTTP-Anfrage wird die Antwort gezeigt — Status, Zeit, Größe und der Body, JSON-formatiert. Die Werte, die die Wert extrahieren-Knoten nach der Anfrage nehmen würden, werden sofort eingefüllt. Klicken Sie einen Wert in einer JSON-Antwort an, um direkt nach der Anfrage einen Wert extrahieren-Knoten dafür hinzuzufügen, mit benannter Variable und bekanntem Wert. Nachbilden macht die Antwort zu einer Route eines Emulators.
- Das Ergebnis wird außerdem in die Konsole geschrieben.
Die Vorschau wird ebenfalls von der Engine aufgelöst, etwa eine Viertelsekunde nach einer Änderung. Geheimwerte werden dort und nirgends gezeigt.
Prüfung
Der Editor prüft das Experiment während der Bearbeitung und noch einmal, wenn Sie Experiment ausführen drücken:
- Ein Ausgang, der noch einen Draht braucht, pulsiert bernsteinfarben.
- Ein Knoten, den kein Draht von Start erreicht, wird gestrichelt gezeichnet; sein Tooltip sagt es.
- Der Knoten, um den es bei einem Problem geht, wird umrandet, und das Problem steht über seinen Feldern.
- ⚠ Graph vervollständigen in der Werkzeugleiste benennt das Problem; ein Klick wählt den Knoten aus.
Ein Experiment läuft, wenn unter anderem:
- es einen Namen, genau eine Start und eine Ende und höchstens 64 Knoten hat;
- jeder Knoten von Start aus erreichbar ist und jeder erforderliche Ausgang einen Draht hat;
- die einzigen Zyklen die Rümpfe von Schleife-Knoten sind, die zu ihnen zurückführen;
- jede Prüfung und jeder Wert extrahieren auf jedem Pfad eine HTTP-Anfrage davor hat (eine unter Last zählt nicht: Sie hinterlässt keine Antwort);
- ein WebSocket senden, Auf WebSocket warten oder WebSocket schließen nach dem WebSocket verbinden kommt, den er verwendet;
- jedes Feld ausgefüllt und im gültigen Bereich ist und jede Vorlage etwas benennt, das an dieser Stelle bekannt ist.
Unfertige Entwürfe werden trotzdem gespeichert. Ein Durchlauf wird vor jeglichem Verkehr abgelehnt, wenn ein benötigtes Geheimnis nicht gespeichert ist. Jede Meldung ist in der Fehlerreferenz aufgeführt.
Ausführen
Experiment ausführen prüft das Experiment, speichert es und startet es. Kann es nicht laufen, wird das Problem gezeigt und sein Knoten ausgewählt. Andernfalls öffnet sich die Zeitleiste, und Knoten leuchten auf, während der Durchlauf sie erreicht: ● läuft, ✓ bestanden, ✕ fehlgeschlagen, ↻ Neuversuch, ⟳ Wiederholung, ⚡ unter Last; Drähte, die den Ablauf trugen, sind ebenfalls gefärbt.
- Warteknoten, Emulatoren und Störungs-Relais öffnen ihre Ports vor dem ersten Schritt, damit nichts, was früh eintrifft, verloren geht. Ein Port, der sich nicht öffnen lässt (etwa weil ein anderes Programm ihn belegt), hindert den Durchlauf am Starten, und der Knoten, der ihn braucht, wird gezeigt.
- Stoppen beendet den Durchlauf sofort: Pausen, Warteknoten und Lasten eingeschlossen. Der Durchlauf ist außerdem ein Job in der Job-Leiste der Konsole, die ihn ebenfalls stoppen kann.
- Ein Durchlauf, der länger als 300 Sekunden dauert, wird gestoppt und schlägt fehl.
- Während ein Durchlauf läuft, lässt sich das Experiment nicht bearbeiten; Schwenken, Zoomen und Auswählen funktionieren weiterhin.
▾ Ausführen mit… neben der Schaltfläche führt einmal mit einem anderen Profil, anderen Parameterwerten oder einem vorgegebenen Startwert aus; das Experiment selbst wird nicht geändert, und das Formular behält das Eingetippte, bis die App schließt (Daten und Vorlagen).
Die Durchlauf-Zeitleiste
Die Durchlauf-Zeitleiste listet eine Zeile pro Schritt: die Zeit, den Knoten und was geschah — bestanden, fehlgeschlagen und warum, ein Neuversuch, der Fortschritt einer Wiederholung, die Zahlen einer Last einmal pro Sekunde. Klicken Sie eine Zeile an, um ihren Knoten auf der Arbeitsfläche auszuwählen.
Ihre Titelzeile enthält:
- das Ergebnis: Bestanden, Fehlgeschlagen mit dem Grund oder Gestoppt;
- Bericht gespeichert — die Berichtsdatei des Durchlaufs (auf einem Server ein Download);
- Vergleichen — dieser Durchlauf neben einem früheren desselben Experiments;
- das Profil und die geänderten Werte, die der Durchlauf verwendet hat, wenn es welche gab;
- den Startwert des Durchlaufs, mit Fixieren, um ihn im Experiment zu behalten, damit die nächsten Durchläufe dieselben Zufallswerte ziehen, oder Lösen, sobald er fixiert ist.
Wenn der Inspektor mitschnitt, ist ein Warteknoten (oder eine erwartete Antwort), der passte, mit dem Frame verknüpft, auf den er passte; ein Klick öffnet ihn im Inspektor. Berichte, Startwerte und das Vergleichen von Durchläufen stehen in Durchläufe und Berichte.
Fokusmodus und Vollbild
▢ Fokusmodus verbirgt die Seitenleiste, die Kopfzeile und den unteren Bereich (Konsole und Inspektor) und überlässt den Bildschirm dem Editor. ⛶ Vollbild setzt das Fenster ins Vollbild und schaltet den Fokusmodus ein; das Verlassen des Vollbilds setzt den Fokusmodus auf den vorherigen Zustand zurück. Der Wechsel zu einer anderen Ansicht verlässt den Fokusmodus.
Esc auf der Arbeitsfläche verlässt, wenn es sonst nichts zu schließen gibt, das Vollbild und dann den Fokusmodus.
Speichern und Dateien
Das Experiment wird von selbst gespeichert, einen Moment nach jeder Änderung, in experiment.json im Datenordner (Documents/SignalLab auf dem Desktop; ein Server hat seinen eigenen — siehe Dateien und Ordner). Entwürfe, die noch nicht laufen können, werden ebenfalls gespeichert. Ein Durchlauf speichert zuerst, sodass das Gelaufene das auf der Platte ist.
Lässt sich diese Datei nicht lesen — etwa von Hand zu kaputtem JSON bearbeitet —, sagt der Editor, welche Datei und warum, und lässt sie in Ruhe. Ein anderes Experiment über ☰ Experimente zu öffnen, ersetzt sie dann beim nächsten Speichern.
☰ Experimente öffnet den Experimente-Dialog:
- Vorlagen: Wählen Sie eine und drücken Sie Experiment öffnen. Sie alle verwenden Loopback-Adressen.
- JSON öffnen… liest eine Experimentdatei — von dieser Version von Signal Lab oder einer früheren geschrieben, bis zu 4 MiB — und zeigt ihren Namen und wie viele Knoten und Verbindungen sie hat, bevor Sie sie öffnen. Dateien aus früheren Versionen werden beim Öffnen auf den neuesten Stand gebracht. Eine Datei, die sich nicht parsen lässt oder kein gültiges Experiment wäre, wird mit dem Grund abgelehnt, und das aktuelle Experiment bleibt.
- Aktuelles JSON exportieren schreibt eine Momentaufnahme des aktuellen Experiments — Knoten, Drähte, Positionen, Parameter und Profile, nie Geheimwerte — in eine neue Datei in
exportsim Datenordner und zeigt ihren Pfad; auf einem Server mit einem Herunterladen-Link. - Experiment öffnen ersetzt das aktuelle Experiment durch die Vorlage oder Datei. Es führt sie nicht aus, und Ctrl+Z bringt das vorherige zurück.
| Vorlage | Was sie tut |
|---|---|
| Leeres Experiment | Start und Ende, für Ihren eigenen Ablauf |
| HTTP-Prüfung | Ein GET an http://127.0.0.1:8080/ und eine Prüfung auf Status 200 — das Experiment, mit dem Sie beginnen |
| HTTP zu OSC | Dieselbe Anfrage; bei 200 eine OSC-Nachricht an 127.0.0.1:9000, sonst eine Verzögerung von 500 ms |
| Parallele Abläufe | Zwei Zweige zugleich — eine Anfrage und eine Logzeile —, vor Ende zusammengeführt |
| OSC-Ping → Antwort | Sendet /ping mit der id des Durchlaufs an 127.0.0.1:9000 und wartet auf 127.0.0.1:9001 auf /pong, das sie zurückbringt |
| Abfragen bis bereit | Fragt ein Gerät alle 0,3 s nach /status, bis es ready antwortet, höchstens zehn Mal |
| Unzuverlässige API erneut abfragen | Eine emulierte API, die zweimal scheitert, bevor sie antwortet, und eine Schleife, die fragt, bis sie es tut |
| Störungsphasen | Datagramme an ein emuliertes Gerät durch ein Störungs-Relais, während ein paralleler Zweig das Netzwerk sauber, verlustbehaftet, offline und wieder sauber schaltet |
| Ausfall einer Abhängigkeit | Eine emulierte API, die von einem parallelen Zweig zwei Sekunden lang abgeschaltet wird, und ein Client, der weiter fragt, bis sie wieder antwortet |
| WebSocket-Echo | Verbindet sich mit einem Echo-Dienst unter ws://127.0.0.1:9001/echo, sendet ein JSON-Ping, erwartet es unverändert zurück und schließt |
Dieselben Dateien laufen ohne den Editor: signallab run experiment.json — siehe Die Kommandozeile.
Tastaturkürzel
Einzelne Tasten wirken auf der Arbeitsfläche und bleiben unberührt, während Sie in einem Feld tippen. Auf einem Mac funktioniert im Browser Cmd dort, wo Ctrl geschrieben steht.
| Tasten | Aktion |
|---|---|
| A | Fügt einen Knoten nach dem ausgewählten hinzu, oder mitten in der Ansicht, wenn nichts ausgewählt ist |
| Ctrl+Enter | Jetzt senden oder Jetzt empfangen beim ausgewählten Knoten |
| Ctrl+Z | Rückgängig |
| Ctrl+Shift+Z, Ctrl+Y | Wiederholen |
| Ctrl+A | Alle Knoten auswählen |
| Ctrl+C / Ctrl+X / Ctrl+V | Die ausgewählten Knoten und die Drähte zwischen ihnen kopieren / ausschneiden / einfügen |
| Ctrl+D | Die ausgewählten Knoten duplizieren |
| Delete, Backspace | Den ausgewählten Draht oder die ausgewählten Knoten entfernen |
| Pfeiltasten (ein Knoten fokussiert) | Verschieben die ausgewählten Knoten um 5 Pixel; mit Shift um 20 |
| Ctrl+F | Einen Knoten finden |
| Ctrl+0 | Den Graphen einpassen |
| Ctrl+1 | Auf 100 % zoomen |
| Ctrl + Mausrad | Um den Zeiger zoomen |
| Shift + Klick, Ctrl + Klick | Einen Knoten zur Auswahl hinzufügen oder herausnehmen |
| Shift + Ziehen auf der leeren Arbeitsfläche | Mit einem Rahmen auswählen |
| Doppelklick auf einen Knoten | Seine Felder bearbeiten |
| Doppelklick auf die leere Arbeitsfläche | Dort einen Knoten hinzufügen |
| Enter, Space bei einem fokussierten Ausgang | Von ihm aus einen Draht beginnen |
{{ oder Ctrl+Space in einem Feld | Parameter, Variablen, Geheimnisse und Generatoren vorschlagen |
| Esc in einem Feld | Zurück zum Knoten auf der Arbeitsfläche |
| Esc auf der Arbeitsfläche | Das Hinzufügen-Menü schließen; sonst den gerade gezogenen Draht abbrechen; sonst den ausgewählten Draht loslassen; sonst eine Auswahl mehrerer aufheben; sonst das Vollbild verlassen; sonst den Fokusmodus verlassen |
Im Hinzufügen-Menü und in der Suche wählen ↑ ↓, Enter übernimmt die Wahl und Esc schließt. Alle Tastaturkürzel der App stehen in Tastaturkürzel.