vzi ist der geistige Nachfolger von nämlich
Die vzi -Befehlszeile wird (jetzt) mit deno implementiert und das Rendern erfordert das Chrome DevTools-Protokoll. vzi wurde nur für Mac getestet, obwohl es unter Linux problemlos funktionieren sollte (geben Sie ihm einfach den Pfad zur Chrome-Binärdatei an).
Viele von uns verwenden die Befehlszeile seit Jahrzehnten. Der Erfolg der Befehlszeilenschnittstelle ist eng mit der Idee der Unix -Pipes verbunden. Pipes geben uns die Möglichkeit, im Handumdrehen komplexe Funktionen zu erstellen, die auf die Anforderungen der Eingabedaten zugeschnitten sind, die wir bearbeiten. Zu diesem Zweck ist die Shell der Eingabemechanismus mit der höchsten Bandbreite, den Menschen bisher erfunden haben, um Maschinen zu unterrichten.
Und doch haben wir keine gute Möglichkeit, Daten in die andere hochdynamische Umgebung zu leiten, in der wir viel Zeit verbringen: den Browser. Das Ziel von vzi ist es, diese Lücke zu schließen, damit wir webbasierte Kompositionen in unsere geschätzten Datenpipelines integrieren können.
Wenn wir Daten im Terminal betrachten, haben wir oft keine gute Möglichkeit, sie zu interpretieren, doch mit einer kleinen Transformation sind unsere Augen in der Lage, tiefgreifende Muster zu erkennen. Angesichts einer Datenquelle, die Breiten- und Längenkoordinaten enthält, ist die Verwendung einer Karte eine natürliche Möglichkeit, diese Daten zu erkunden. Sie können dies mit vzi tun, indem Sie die Daten dorthin weiterleiten, z. B.:
$ your data source | vzi -m scatter -d 'y=lat($[0])' -d 'x=lng($[1])' -d c=2
Hier ist ein Screenshot des Zustands, der durch Verwendung des obigen Befehls mit Datenzeilen der Form latitude longitude language
erstellt wurde:
Der tatsächliche Berichtsstatus, der von vzi zu einem bestimmten Zeitpunkt erstellt wird, ist eine vollständige und vollwertige Webseite, die viel umfangreicher ist als ein statisches Bild. Wenn Sie möchten, können die endgültigen (oder Zwischen-)Berichtsstände gespeichert werden, oder Sie möchten einfach vorübergehend im Browser damit interagieren und die Ausgabe ignorieren. In jedem Fall macht vzi Datenanalysesitzungen unterhaltsamer und produktiver.
Eine weitere integrierte Visualisierungsart ist das bucket
-Modul. Unten sehen Sie einen Screenshot des vom Befehl erstellten Berichts:
$ bin/gen-yxz | vzi -m hist -d c=2
Module können Code voneinander wiederverwenden. Der obige Befehl entspricht tatsächlich dem Befehl:
$ bin/gen-yxz | vzi -m bucket -d c=2 -d orderBy=freq
Die scatter
und bucket
-Module sind eher allgemein gehalten und können in vielen Situationen mit großer Wirkung eingesetzt werden. Es ist jedoch einfach, andere Pipe-Module zu schreiben, und dies kann tatsächlich eine recht unterhaltsame Übung sein.
Installieren Sie zunächst Chrome Canary. Es ist nicht unbedingt erforderlich, aber derzeit die beste und einfachste Möglichkeit, vzi zu verwenden.
Sie können das Befehlszeilentool global mit deno installieren, indem Sie Folgendes verwenden:
deno install -A -f https://raw.githubusercontent.com/jflatow/vzi/master/bin/vzi
Eine bessere Methode für Entwickler besteht darin, das Repository zu klonen und zu installieren:
$ git clone https://github.com/jflatow/vzi.git
$ cd vzi && make install
Testen Sie schnell, ob es funktioniert:
$ vzi
Es sollte sich ein Fenster im Browser öffnen. Wenn nicht, müssen Sie möglicherweise die Option -b
verwenden, um vzi mitzuteilen, wo sich der ausführbare Pfad des Browsers befindet. Für eine vollständige Liste der Optionen: vzi -h
.
Wenn Canary bereits gestartet wird, ohne dass der Remote-Debugging-Port geöffnet ist, erhalten Sie möglicherweise eine Fehlermeldung, wenn vzi eine neue Seite anfordert (z. B. /json/new
). Beenden Sie in diesem Fall einfach Chrome und lassen Sie vzi es wie gewünscht starten, oder öffnen Sie es selbst mit geöffnetem Port erneut. Der von vzi verwendete Standardport ist 9222
, Sie können ihn jedoch mit der Option -p
angeben.
Während das Browserfenster noch geöffnet ist, können Sie in der stdin -Pipe, die für den Browser geöffnet ist, eine Nachricht eingeben:
> hello, world!
Stellen Sie sicher, dass Sie am Ende eine neue Zeile eingeben, damit die Zeile vollständig ist. Zurück im geöffneten Browserfenster sollten Sie Ihre Nachricht im Dokumenttext sehen. Geben Sie so viele Zeilen ein, wie Sie möchten. Jede einzelne aktualisiert das Dokument. Wenn Sie fertig sind, schließen Sie die Pipe mit ^D
.
Wenn Sie das VZI -Repo-Verzeichnis geklont haben, können Sie darin Folgendes versuchen:
$ bin/gen-yxz | vzi -m scatter -d c=2
Standardmäßig erstellt vzi ein einzelnes, endgültiges Berichtsdokument auf stdout . Die von vzi (über Chrome ) ausgeführte Pipe definiert, was mit dem Browserstatus passiert, wenn neue Ereignisse empfangen werden.
Es gibt drei Möglichkeiten, vzi mitzuteilen, wie seine Pipe ausgeführt werden soll:
-c, --cli
-m, --module
$ cat events | vzi pipe.js
$ cat events | vzi -c '...'
$ cat events | vzi -m module
Wenn die Option -K, --keep-alive
angegeben ist, versucht vzi nicht, den Browser zu schließen. Das -OK
kann zusammen für eine ruhige, interaktive Sitzung verwendet werden.
Wenn die Option -O, --no-output
angegeben ist, wird die Ausgabe deaktiviert. Wenn die Option -o, --output
angegeben ist, schreibt vzi seinen Berichtsstatus nach jedem Ereignisstapel in den Ausgabepfad. Auf diese Weise kann man die Ausgabedatei auf Änderungen überwachen, um den aktuellen Zustand der Pipeline zu beobachten (z. B. bei Headless-Betrieb). Wenn weder -o
noch -O
angegeben sind, wird nur der Endzustand nach stdout geschrieben.
$ cat events | vzi pipe.js -O
$ cat events | vzi pipe.js -o report.html
$ cat events | vzi pipe.js > report.html
Sie können auch den Mechanismus steuern, den vzi zum Rendern der Ereignisse verwendet, indem Sie die Option -p, --port
verwenden. Wenn angegeben, wird davon ausgegangen, dass der Port das DevTools-Drahtprotokoll spricht (z. B. ein Browser mit aktiviertem Remote-Debugging). Wenn die Option -p
nicht angegeben ist, erstellt vzi einen eigenen Browser zum Rendern.
$ cat events | vzi pipe.js
$ cat events | vzi pipe.js -p PORT
$ cat events | vzi pipe.js -p PORT > report.html
Die Option -H, --headless
kann angegeben werden, um vzi zu zwingen, einen Headless-Browser zu erstellen. Dies erfordert einen Browser, der kopflos ausgeführt werden kann (Hinweis: Chrome Canary zum Zeitpunkt des Verfassens dieses Artikels).
$ cat events | vzi pipe.js -H
Das kopflose Laufen gilt als eher fortgeschrittene Betriebsart, funktioniert aber recht gut. Im Allgemeinen gibt es zwei Betriebsmodi für den Browser: „attached“ und „detached“ . Wenn Sie losgelöst ausgeführt werden (Standard, wenn nicht Headless), ist der Einstieg etwas einfacher und reibungsloser. Vor allem, wenn man ohne Headless läuft, da man so genau sehen kann, was passiert. Im angehängten Modus führen Interrupts letztendlich zum Abbruch des Browsers. Wenn Sie also kein ordnungsgemäßes EOF senden, erhalten Sie keinen Ausgabebericht. Ohne Headless ist dies immer noch in Ordnung, da Sie die Ausgabe im Browser immer noch so sehen, wie sie generiert wurde. Wenn Sie jedoch im angeschlossenen Headless-Modus arbeiten, möchten Sie im Allgemeinen keinen unendlichen Stream weiterleiten. Dies liegt daran, dass Sie den Prozess ohne EOF nicht ordnungsgemäß beenden können, sodass Sie weder die Ausgabe sehen noch einen Bericht erhalten.
Einige der verfügbaren Optionen können verwirrend sein, ohne die Funktionsweise des Tools zu verstehen. Der Gesamtaufbau ist komplex und dennoch unkompliziert. Sobald die DevTools-Implementierung bekannt ist, wird eine Seite geöffnet und die Ereignisse werden über eine Ebene über dem Chrome-Debugging-Protokoll gesendet. In diesem Kontext werden die benutzerdefinierten Pipe-Handler-Funktionen ausgeführt.
Es gibt zwei wichtige Schnittstellen, die vzi bereitstellt. Eine davon ist die Spezifikation, wie ein Ausgabebericht erstellt wird. Das andere ist die Umgebung, in der benutzerdefinierte Funktionen ausgeführt werden, und die verwendeten Rückrufe. Wir nennen die benutzerdefinierte Logik, die in dieser Umgebung ausgeführt wird, die Pipe . Die Pipe verwaltet die Visualisierungslogik für die Unix -Pipe, in der sie ausgeführt wird.
Die Pipe-Schnittstelle ist derzeit in index.js definiert. Die besten Beispiele sind die integrierten Module, die hier in der Reihenfolge ihrer Komplexität aufgeführt sind:
Hier sind einige weitere schnelle Beispiele, die Sie ausprobieren können, vorausgesetzt, Sie haben das Repository geklont:
bin/gen-yxz | vzi -m scatter -d y='log($[0])' -d ys='exp(_)'
bin/gen-line | vzi -m hist -d v=1 -d k='second((new Date - 0) / 1000, 3)'