vzi는 viz의 영적 계승자입니다.
vzi 명령줄은 (현재) deno를 사용하여 구현되며 렌더링에는 Chrome DevTools 프로토콜이 필요합니다. vzi는 Mac에서만 테스트되었지만 Linux에서는 간단하게 작동합니다(Chrome 바이너리 경로만 알려주면 됩니다).
우리 중 많은 사람들이 수십 년 동안 명령줄을 사용해 왔습니다. 명령줄 인터페이스의 성공은 Unix 파이프의 아이디어와 밀접하게 연관되어 있습니다. 파이프는 우리가 조작하는 입력 데이터의 요구 사항에 맞춰 복잡한 기능을 즉석에서 구성할 수 있는 기능을 제공합니다. 이를 위해 쉘은 인간이 기계에 지시하기 위해 발명한 가장 높은 대역폭의 입력 메커니즘입니다.
그럼에도 불구하고 우리는 많은 시간을 소비하는 매우 동적인 환경인 브라우저에 데이터를 전달할 수 있는 좋은 방법이 없습니다. vzi 의 목표는 이러한 격차를 해소하여 소중한 데이터 파이프라인의 일부로 웹 기반 구성을 포함할 수 있도록 하는 것입니다.
터미널에서 데이터를 보면 이를 해석할 좋은 방법이 없는 경우가 많지만, 약간의 변형만으로도 우리의 눈은 깊은 패턴을 이해할 수 있습니다. 위도 및 경도 좌표가 포함된 데이터 소스가 있는 경우 이 데이터를 탐색하는 자연스러운 방법은 지도를 사용하는 것입니다. vzi 로 데이터를 파이핑하여 이를 수행할 수 있습니다. 예:
$ your data source | vzi -m scatter -d 'y=lat($[0])' -d 'x=lng($[1])' -d c=2
다음은 latitude longitude language
형식의 데이터 줄과 함께 위 명령을 사용하여 생성된 상태의 스크린샷입니다.
주어진 시간에 vzi 가 생성하는 실제 보고서 상태는 정적 이미지보다 훨씬 풍부한 완전한 기능을 갖춘 웹 페이지입니다. 원하는 경우 최종(또는 중간) 보고서 상태를 저장할 수 있습니다. 또는 출력을 무시하고 브라우저 내에서 일시적으로 상호 작용할 수도 있습니다. 어느 쪽이든 vzi는 데이터 분석 세션을 더욱 재미있고 생산적으로 만듭니다.
내장된 또 다른 유형의 시각화는 bucket
모듈입니다. 다음은 명령으로 생성된 보고서의 스크린샷입니다.
$ bin/gen-yxz | vzi -m hist -d c=2
모듈은 서로의 코드를 재사용할 수 있습니다. 위 명령은 실제로 다음 명령과 동일합니다.
$ bin/gen-yxz | vzi -m bucket -d c=2 -d orderBy=freq
scatter
및 bucket
모듈은 다소 일반적이며 다양한 상황에서 큰 효과를 발휘할 수 있습니다. 그러나 다른 파이프 모듈을 작성하는 것은 쉽고 실제로는 꽤 즐거운 연습이 될 수 있습니다.
먼저 크롬 카나리아를 설치하세요. 엄격하게 필수는 아니지만 현재 vzi를 사용하는 가장 좋고 쉬운 방법입니다.
다음을 사용하여 deno를 사용하여 전역적으로 명령줄 도구를 설치할 수 있습니다.
deno install -A -f https://raw.githubusercontent.com/jflatow/vzi/master/bin/vzi
개발자를 위한 더 나은 방법은 저장소를 복제하고 설치하는 것입니다.
$ git clone https://github.com/jflatow/vzi.git
$ cd vzi && make install
작동 여부를 빠르게 테스트하세요.
$ vzi
브라우저에서 창이 열려야 합니다. 그렇지 않은 경우 -b
옵션을 사용하여 vzi에게 브라우저 실행 경로가 어디에 있는지 알려야 할 수도 있습니다. 전체 옵션 목록을 보려면: vzi -h
.
원격 디버깅 포트를 열지 않은 채 Canary가 이미 시작된 경우 vzi가 새 페이지(예: /json/new
)를 요청할 때 오류가 발생할 수 있습니다 . 이 경우에는 Chrome을 종료하고 vzi가 원하는 대로 실행하도록 하거나 포트가 열린 상태에서 직접 다시 열면 됩니다. vzi 에서 사용하는 기본 포트는 9222
이지만 -p
옵션을 사용하여 지정할 수 있습니다.
브라우저 창이 계속 열려 있는 상태에서 브라우저에 열려 있는 stdin 파이프에 다음 메시지를 입력할 수 있습니다.
> hello, world!
줄이 완성되도록 끝에 개행 문자를 입력해야 합니다. 열린 브라우저 창으로 돌아가서 문서 본문에 메시지가 표시되어야 합니다. 원하는 만큼 줄을 입력하면 각 줄이 문서를 업데이트합니다. 완료되면 ^D
사용하여 파이프를 닫습니다.
vzi repo 디렉터리를 복제했다면 그 내부에서 다음을 시도해 볼 수 있습니다.
$ bin/gen-yxz | vzi -m scatter -d c=2
기본적으로 vzi는 stdout 에 단일 최종 보고서 문서를 생성합니다. vzi ( Chrome을 통해)에 의해 실행되는 파이프는 새 이벤트가 수신될 때 브라우저 상태에 어떤 일이 발생하는지 정의합니다.
vzi에게 파이프 실행 방법을 알려주는 세 가지 방법이 있습니다.
-c, --cli
옵션을 사용하여 스크립트를 직접 전달합니다.-m, --module
옵션을 사용하여 내장 모듈의 이름을 전달하세요. $ cat events | vzi pipe.js
$ cat events | vzi -c '...'
$ cat events | vzi -m module
-K, --keep-alive
옵션이 주어지면 vzi는 브라우저를 닫으려고 시도하지 않습니다. 조용한 대화형 세션을 위해 -OK
를 함께 사용할 수 있습니다.
-O, --no-output
옵션을 지정하면 출력이 비활성화됩니다. -o, --output
옵션이 제공되면 vzi는 모든 이벤트 배치 후에 출력 경로에 보고서 상태를 기록합니다. 이러한 방식으로 파이프라인의 최근 상태(예: 헤드리스 실행 시)를 관찰하기 위해 출력 파일의 변경 사항을 관찰할 수 있습니다. -o
와 -O
모두 지정하지 않으면 최종 상태만 stdout 에 기록됩니다.
$ cat events | vzi pipe.js -O
$ cat events | vzi pipe.js -o report.html
$ cat events | vzi pipe.js > report.html
-p, --port
옵션을 사용하여 vzi가 이벤트를 렌더링하는 데 사용하는 메커니즘을 제어할 수도 있습니다. 주어진 경우 포트는 DevTools 유선 프로토콜(예: 원격 디버깅이 활성화된 브라우저)을 말하는 것으로 가정됩니다. -p
옵션이 제공되지 않으면 vzi는 렌더링을 위해 자체 브라우저를 생성합니다.
$ cat events | vzi pipe.js
$ cat events | vzi pipe.js -p PORT
$ cat events | vzi pipe.js -p PORT > report.html
-H, --headless
옵션을 사용하면 vzi 가 헤드리스 브라우저를 만들도록 할 수 있습니다. 이를 위해서는 헤드리스로 실행될 수 있는 브라우저가 필요합니다(주의: 이 글을 쓰는 시점의 Chrome Canary ).
$ cat events | vzi pipe.js -H
헤드리스 실행은 꽤 잘 작동하기는 하지만 다소 고급 작동 모드로 간주됩니다. 일반적으로 브라우저에는 연결 및 분리라는 두 가지 작동 모드가 있습니다. 분리된 상태로 실행하면(헤드리스가 아닌 경우 기본값) 시작하기가 좀 더 쉽고 매끄러워집니다. 특히 머리 없이 달릴 때 무슨 일이 일어나고 있는지 정확히 볼 수 있기 때문입니다. 연결된 모드에서는 인터럽트로 인해 브라우저가 종료되므로 적절한 EOF를 보내지 않으면 출력 보고서를 받을 수 없습니다. 헤드리스가 없어도 괜찮습니다. 브라우저에서 생성된 출력을 계속 볼 수 있기 때문입니다. 그러나 연결된 헤드리스 모드에서 실행하는 경우 일반적으로 무한 스트림을 파이프하고 싶지 않습니다. EOF가 없으면 프로세스를 정상적으로 종료할 수 없으므로 출력도 볼 수 없고 보고서도 받을 수 없기 때문입니다.
사용 가능한 옵션 중 일부는 도구 작동 방식을 이해하지 못하면 혼란스러울 수 있습니다. 전체적인 설정은 복잡하면서도 간단합니다. DevTools 구현이 알려지면 페이지가 열리고 Chrome 디버깅 프로토콜 위에 있는 레이어를 통해 이벤트가 전송됩니다. 이 컨텍스트 내에서 사용자 정의 파이프 처리기 함수가 실행됩니다.
vzi가 제공하는 두 가지 주요 인터페이스가 있습니다. 하나는 출력 보고서가 생성되는 방식에 대한 사양입니다. 다른 하나는 사용자 정의 함수가 실행되는 환경과 사용되는 콜백입니다. 이 환경에서 실행되는 사용자 정의 논리를 파이프라고 부릅니다. 파이프는 내부에서 실행되는 Unix 파이프의 시각화 논리를 처리합니다.
파이프 인터페이스는 현재 index.js에 정의되어 있습니다. 가장 좋은 예는 여기에 복잡한 순서대로 나열된 내장 모듈입니다.
저장소를 복제했다고 가정하고 시도해 볼 수 있는 몇 가지 다른 빠른 예는 다음과 같습니다.
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)'