vzi เป็นผู้สืบทอดทางจิตวิญญาณของกล่าวคือ
(ขณะนี้) มีการใช้งานบรรทัดคำสั่ง vzi โดยใช้ deno และการเรนเดอร์ต้องใช้ Chrome DevTools Protocol 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
ค่อนข้างทั่วไปและสามารถนำมาใช้ให้เกิดผลดีเยี่ยมในทุกสถานการณ์ อย่างไรก็ตาม การเขียนโมดูลไปป์อื่นๆ เป็นเรื่องง่าย และการทำเช่นนี้อาจเป็นแบบฝึกหัดที่น่าสนุกทีเดียว
ขั้นแรก ติดตั้ง Chrome Canary ไม่จำเป็นอย่างเคร่งครัด แต่เป็นวิธีที่ดีที่สุดและง่ายที่สุดในการใช้ 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
เราอาจควบคุมกลไกที่ vzi ใช้ในการเรนเดอร์เหตุการณ์โดยใช้ตัวเลือก -p, --port
หากระบุไว้ พอร์ตจะถือว่าพูดโปรโตคอลแบบใช้สายของ 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
การวิ่งแบบไม่มีหัวถือเป็นโหมดการทำงานที่ค่อนข้างล้ำหน้า แม้ว่าจะใช้งานได้ค่อนข้างดีก็ตาม โดยทั่วไปเบราว์เซอร์มี 2 โหมดการทำงาน: แบบแนบ และ แบบแยกออก เมื่อคุณเรียกใช้แบบแยกส่วน (ค่าเริ่มต้นหากไม่ใช่แบบไม่มีหัว) การเริ่มต้นจะง่ายขึ้นและราบรื่นขึ้นเล็กน้อย โดยเฉพาะอย่างยิ่งเมื่อคุณวิ่งโดยไม่มีหัวขาด เนื่องจากคุณสามารถมองเห็นได้อย่างชัดเจนว่าเกิดอะไรขึ้น ในโหมดที่แนบมา การขัดจังหวะจะทำให้เบราว์เซอร์เสียหาย ดังนั้นหากคุณส่ง EOF ที่เหมาะสม คุณจะไม่ได้รับรายงานผลลัพธ์ สิ่งนี้ยังคงใช้ได้หากไม่มีส่วนหัว เนื่องจากคุณยังคงเห็นเอาต์พุตในเบราว์เซอร์ในขณะที่สร้างขึ้น อย่างไรก็ตาม เมื่อคุณทำงานในโหมด headless ที่แนบมา โดยทั่วไปแล้ว คุณจะไม่ต้องการไปป์สตรีมที่ไม่มีที่สิ้นสุด เนื่องจากหากไม่มี 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)'