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
عامة إلى حد ما ويمكن استخدامها لتحقيق تأثير كبير في أي عدد من المواقف. ومع ذلك، من السهل كتابة وحدات أنابيب أخرى، وقد يكون القيام بذلك في الواقع تمرينًا ممتعًا للغاية.
أولاً، قم بتثبيت 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
يعتبر الجري بلا رأس طريقة تشغيل متقدمة إلى حد ما، على الرغم من أنه يعمل بشكل جيد. بشكل عام، هناك وضعان لتشغيل المتصفح: متصل ومنفصل . عندما تقوم بالتشغيل بشكل منفصل (افتراضي إن لم يكن بدون رأس)، تصبح الأمور أسهل قليلاً وأكثر سلاسة للبدء. خاصة عندما تركض بدون رأس، حيث يمكنك رؤية ما يحدث بالضبط. في الوضع المرفق، تنتهي المقاطعات بقتل المتصفح، لذلك ما لم ترسل 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)'