प्रयोग एडिटर
एक प्रयोग एक ग्राफ़ के रूप में लिखा गया टेस्ट है: ऐसे नोड जो भेजते हैं (एक HTTP रिक्वेस्ट, एक OSC संदेश, एक MQTT पब्लिश…), किसी जवाब की प्रतीक्षा करते हैं, जो वापस आया उसे जाँचते हैं, दूसरा पक्ष बनते हैं या इशारे पर नेटवर्क तोड़ते हैं, और उन्हें वे वायर जोड़ते हैं जो बताते हैं कि आगे क्या चलता है। एक रन शुरुआत से शुरू होता है, वायरों का पीछा करता है और अंत पर पहुँचकर सफल होता है, जब हर चरण सफल हुआ हो। आप इसे प्रयोग स्क्रीन पर बनाते हैं, वहीं चलाते हैं, और वही फ़ाइल कमांड लाइन या किसी सर्वर से चलाते हैं।
एडिटर एक बार में एक प्रयोग रखता है और काम करते हुए उसे सहेजता रहता है। कई रखने के लिए स्नैपशॉट निर्यात करें या किसी फ़ाइल से दूसरा खोलें (सहेजना और फ़ाइलें देखें)।
हर तरह का नोड, उसके फ़ील्ड और आउटपुट नोड संदर्भ में हैं। नोड के बीच मान कैसे बहते हैं, यह डेटा और टेम्पलेट में है; समानांतर शाखाएँ, लूप, दोबारा प्रयास और दोहराव फ़्लो में हैं।
स्क्रीन
| क्षेत्र | क्या रखता है |
|---|---|
| टूलबार (ऊपर) | प्रयोग का नाम और सहेजने की स्थिति, नोड जोड़ना, पैरामीटर, प्रोफ़ाइल, पैन, फ़ोकस मोड, फ़ुलस्क्रीन और रन |
| कैनवास पट्टी | पूर्ववत और फिर से करें, नोड खोजक, व्यवस्थित करें और ज़ूम |
| कैनवास | ग्राफ़: नोड, वायर, और उन पर बनती रन की प्रगति |
| गुण (दाएँ) | चुने गए नोड के फ़ील्ड, उसका प्रीव्यू और अभी भेजें; या कई चुने गए नोड या किसी चुने वायर की अनुमति |
| रन टाइमलाइन (नीचे) | वर्तमान या पिछले रन के चरण, उसका नतीजा, रिपोर्ट और सीड |
प्रॉपर्टी पैन और टाइमलाइन के भीतरी किनारे पर एक हैंडल होता है: उसे खींचें, या Tab से उस पर फ़ोकस करके तीर कुंजियाँ इस्तेमाल करें (बड़े कदमों के लिए Shift); डबल-क्लिक या Enter पैन को उसका डिफ़ॉल्ट आकार लौटा देता है। आकार अगली बार के लिए सहेजे जाते हैं। टाइमलाइन तब तक समेटी रहती है जब तक पहला रन उसे नहीं खोलता।
टूलबार
| नियंत्रण | क्या करता है |
|---|---|
| ☰ प्रयोग | टेम्पलेट खोलता है, JSON फ़ाइल खोलना और निर्यात करना (सहेजना और फ़ाइलें) |
| प्रयोग का नाम | प्रयोग का नाम; रन के लिए एक ज़रूरी है। रन रिपोर्ट इसे दर्ज करती हैं, और तुलना करें इसी से पिछले रन ढूँढता है |
| सहेजा गया / सहेजा जा रहा है… / सहेजना विफल | क्या अंतिम बदलाव डिस्क पर है |
| ⚠ ग्राफ़ पूरा करें | तब दिखता है जब प्रयोग चल नहीं सकता; इसका टूलटिप वजह बताता है, क्लिक उस नोड को चुनता है जिसके बारे में है (जाँच) |
| + नोड जोड़ें | नोड जोड़ने का मेनू खोलता है, चुने नोड के बाद जब कोई हो (A) |
| प्रोफ़ाइल | कौन-सी प्रोफ़ाइल रन, प्रीव्यू और अभी भेजें इस्तेमाल करते हैं; तब दिखता है जब प्रयोग में प्रोफ़ाइल हों। ⚠ उस प्रोफ़ाइल को चिह्नित करता है जो चलेगी नहीं |
{ } पैरामीटर | पैरामीटर, प्रोफ़ाइल, सीड, कुकीज़ और सीक्रेट (डेटा और टेम्पलेट) |
| ☷ गुण | प्रॉपर्टी पैन दिखाता या छिपाता है |
| ▢ फ़ोकस मोड | साइडबार, हेडर और निचला पैन छिपाता है (फ़ोकस मोड और फ़ुलस्क्रीन) |
| ⛶ फ़ुलस्क्रीन | विंडो को फ़ुलस्क्रीन में, फ़ोकस मोड के साथ |
| प्रयोग चलाएँ | प्रयोग की जाँच करता है, सहेजता है और चलाता है; चलते समय बटन रोकें होता है |
| ▾ इसके साथ चलाएँ… | दूसरी प्रोफ़ाइल, दूसरे पैरामीटर मान या दिए गए सीड के साथ एक रन, प्रयोग को बदले बिना |
कैनवास पर घूमना
- पैन: ख़ाली कैनवास खींचें, या स्क्रॉल करें।
- ज़ूम: Ctrl और माउस व्हील पॉइंटर के आसपास ज़ूम करते हैं; कैनवास पट्टी में − और + 10 % के कदम से बढ़ाते-घटाते हैं। ज़ूम 15 % से 200 % तक जाता है; बटनों के बीच का प्रतिशत बताता है कि आप कहाँ हैं।
- 1:1 (ज़ूम रीसेट करें, Ctrl+1) 100 % पर लौटाता है।
- ⊡ ग्राफ़ फ़िट करें (Ctrl+0) पूरा ग्राफ़ दिखाता है, अधिकतम 100 % पर।
- नोड ढूँढें: कैनवास पट्टी में नोड (यह बताता है कि कितने नोड हैं) या Ctrl+F। नोड के नाम, उसके सारांश (कोई URL, कोई पता, कोई टॉपिक) या उसकी id से शब्द टाइप करें; ↑ ↓ चुनते हैं, Enter नोड चुनता है और उसे दृश्य में लाता है (कम से कम 80 % पर ज़ूम करके), Esc बंद करता है।
कोई मिनीमैप नहीं है: ग्राफ़ फ़िट करें और खोजक उसका काम करते हैं।
नोड और वायर
एक नोड अपना प्रकार, अपने काम का एक पंक्ति का सारांश, और अपनी सेटिंग्स के बैज दिखाता है: दोबारा प्रयास के लिए ↻ और एक संख्या, दोहराव के लिए × और एक गिनती (या एक समय), लोड के लिए ⚡। उसका इनपुट बाईं ओर होता है — शुरुआत के अलावा हर नोड का एक होता है — और उसके आउटपुट दाईं ओर:
| आउटपुट | किस पर | कब पीछा किया जाता है |
|---|---|---|
| आउटपुट | ज़्यादातर नोड | चरण सफल हुआ |
| हाँ / नहीं | स्टेटस पर शाखा, मान पर शाखा | तुलना सही हुई / नहीं हुई |
| शाखा 1 / शाखा 2 | समानांतर शाखा | हमेशा, दोनों एक साथ |
| मेल खाया / टाइमआउट | प्रतीक्षाएँ | मेल खाता संदेश आया / समय में कोई नहीं आया |
| बॉडी / पूर्ण / सीमा | लूप | एक और पुनरावृत्ति / लूप समाप्त / पुनरावृत्तियाँ ख़त्म हो गईं |
एक आउटपुट पर कई वायर हो सकते हैं। पहला वायर शाखा को जारी रखता है; हर अगला वायर उस बिंदु तक ज्ञात चरों की एक प्रति के साथ एक समानांतर शाखा शुरू करता है। एक शाखाएँ जोड़ें नोड उसमें आने वाले हर वायर की प्रतीक्षा करता है। विवरण फ़्लो में हैं।
टाइमआउट और सीमा वैकल्पिक हैं: बिना वायर छोड़े जाने पर, समय समाप्त होना या पुनरावृत्तियाँ ख़त्म होना चरण को विफल कर देता है। बाकी हर आउटपुट पर वायर होना चाहिए, तभी प्रयोग चल सकता है।
किसी लूप के बॉडी से उस तक वापस जाने वाला वायर बॉडी के ऊपर एक चाप के रूप में बनता है; यह अकेला वायर है जो पीछे की ओर जा सकता है।
नोड जोड़ना
नोड जोड़ने का मेनू
नोड जोड़ने का मेनू हर तरह के नोड को समूह के अनुसार सूचीबद्ध करता है — क्रियाएँ, निगरानी, एमुलेशन, फ़ॉल्ट, डेटा, जाँच, प्रवाह — और फिर सहेजे गए सिग्नल: आपकी लाइब्रेरी के वे सिग्नल जो नोड बन सकते हैं (OSC, HTTP, टेक्स्ट पेलोड वाला UDP, MQTT), उनके फ़ील्ड भरे हुए।
खुलते ही उसका खोज फ़ील्ड फ़ोकस में होता है। कुछ अक्षर टाइप करें: हर शब्द नोड के नाम, उसके विवरण या उसके प्रकार (http, wait_osc) में होना चाहिए; कोई सिग्नल उसके नाम, फ़ोल्डर, ट्रांसपोर्ट या लक्ष्य से मिलता है। ↑ ↓ चुनते हैं, Enter जोड़ता है, Esc बंद करता है। सबसे ऊपर की पंक्ति बताती है कि नोड कहाँ जाएगा: किसी नोड के बाद, या किसी के समानांतर।
नया नोड चुना जाता है, प्रॉपर्टी पैन खुलता है, और उसका मुख्य फ़ील्ड — URL, पता, टॉपिक, विलंब — अपने टेक्स्ट के साथ चुना हुआ फ़ोकस में होता है, ताकि आप सीधे टाइप कर सकें। किसी फ़ील्ड में Esc आपको कैनवास पर नोड के पास लौटा देता है, अगले A के लिए तैयार।
चुने गए नोड के बाद
A, टूलबार में + नोड जोड़ें और प्रॉपर्टी पैन में + अगला जोड़ें चुने गए नोड के बाद अगला चरण जोड़ते हैं:
- यह नोड के पहले ऐसे आउटपुट से जुड़ता है जिस पर अभी कोई वायर नहीं है (जैसे किसी स्टेटस पर शाखा का ख़ाली नहीं), वरना उसके पहले आउटपुट से।
- अगर उस आउटपुट पर पहले से वायर है, तो नया नोड उसमें जोड़ दिया जाता है (कई हों तो पहले में): वायर अब नए नोड से होकर जाता है, और उसके बाद का सब कुछ जगह बनाने के लिए दाईं ओर खिसक जाता है।
- अंत चुने होने पर नोड उसके पहले जाता है, जब उसमें एक वायर आता हो।
- कुछ भी चुना न हो तो नोड दृश्य के बीच में, बिना वायर के, आ जाता है।
एक ही आउटपुट वाला नोड जो किसी लूप के ख़ाली बॉडी पर रखा जाता है — इस तरह या नए वायर पर — वह भी उससे वापस जोड़ दिया जाता है, इसलिए बॉडी तुरंत पूरी हो जाती है।
किसी वायर में
हर वायर के बीच में एक + होता है (नोड डालें)। यह नोड जोड़ने का मेनू खोलता है, और आप जो नोड चुनते हैं वह उस वायर में जोड़ दिया जाता है। इस तरह जोड़ा गया लूप अपने पूर्ण से प्रवाह जारी रखता है।
नए वायर पर
किसी आउटपुट से वायर खींचकर ख़ाली कैनवास पर छोड़ें: वहाँ नोड जोड़ने का मेनू खुलता है, और नया नोड उस आउटपुट के एक नए वायर पर जाता है — उसके पहले से मौजूद वायरों के बगल में, इसलिए वह उनके साथ समानांतर चलता है। ऐसा ही तब होता है जब आप किसी आउटपुट पर क्लिक करके ख़ाली कैनवास पर क्लिक करें, या उस पर डबल-क्लिक करें।
कहीं भी
ख़ाली कैनवास पर डबल-क्लिक करके उस जगह एक नोड जोड़ें, बिना वायर के।
दूसरी स्क्रीनों से
- OSC और HTTP स्क्रीनों पर प्रयोग में जोड़ें जो आपने अभी आज़माया उसे अगले चरण के रूप में जोड़ता है — अंत के ठीक पहले, जब उसमें एक वायर आता हो — और एडिटर पर चला जाता है।
- OSC मॉनिटर में किसी संदेश के बगल में इसकी प्रतीक्षा करें एक OSC की प्रतीक्षा जोड़ता है जो उसे पहचानता है: उसका पता और उसका टेक्स्ट, पूर्णांक और सही/ग़लत आर्ग्युमेंट (फ़्लोट ऐसे माप हैं जो बदलते हैं, इसलिए उन्हें छोड़ दिया जाता है)। चलाने से पहले मॉनिटर रोकें: रन ख़ुद उस पोर्ट पर सुनता है।
- MQTT ट्री के किसी टॉपिक पर इसकी प्रतीक्षा करें उसी टॉपिक पर, उसी ब्रोकर पर, एक MQTT की प्रतीक्षा जोड़ता है।
रन चलते समय नोड नहीं जोड़े जा सकते; कंसोल यह बताता है।
नोड कनेक्ट करना
- खींचें: किसी आउटपुट से किसी नोड पर। नोड के 24 पिक्सल के भीतर छोड़ना काफ़ी है।
- क्लिक करें: किसी आउटपुट पर (या उस पर फ़ोकस करके Enter या Space दबाएँ): कैनवास पट्टी इनपुट पोर्ट चुनें कहती है। जोड़ने के लिए किसी नोड या उसके इनपुट पर क्लिक करें; वहाँ नए वायर पर नोड जोड़ने के लिए ख़ाली कैनवास पर क्लिक करें; रद्द करें या Esc हार मान लेता है।
कोई वायर तब अस्वीकार किया जाता है जब वह चक्र बनाएगा (किसी लूप के वापसी रास्ते के अलावा), जब वह शुरुआत में जाता हो या अंत से बाहर, या जब वह किसी नोड को उसी से जोड़ेगा; एडिटर यह बताता है। जो वायर पहले से मौजूद है, उसे बनाने से कुछ नहीं बदलता।
वायर हटाने के लिए उस पर क्लिक करें — प्रॉपर्टी पैन दिखाता है कि वह किसे जोड़ता है — और Delete दबाएँ, या वहाँ कनेक्शन हटाएँ इस्तेमाल करें। वायर पर पॉइंटर रखने से उसके + के ऊपर एक × भी दिखता है। एक नोड की प्रॉपर्टी उसके बाहर जाने वाले वायर सूचीबद्ध करती हैं, हर एक के साथ × (डिस्कनेक्ट करें)।
कई नोड चुनना
| क्या करने के लिए | क्या करें |
|---|---|
| एक नोड चुनें | उस पर क्लिक करें, या Tab से उस तक जाएँ |
| चयन में नोड जोड़ें, या निकालें | Shift या Ctrl और एक क्लिक |
| फ़्रेम से चुनें | Shift और ख़ाली कैनवास पर खींचें: फ़्रेम जिस-जिस नोड को छूता है, वह चयन में जुड़ जाता है |
| हर नोड चुनें | Ctrl+A |
| चयन हटाएँ | ख़ाली कैनवास पर क्लिक करें; कई चुने होने पर Esc |
| उन्हें खिसकाएँ | उनमें से एक को खींचें: वे सब खिसक जाते हैं |
| उन्हें हल्का खिसकाएँ | किसी नोड पर फ़ोकस होने पर, तीर कुंजियाँ चयन को 5 पिक्सल खिसकाती हैं, Shift के साथ 20 |
प्रॉपर्टी पैन अंतिम चुना गया नोड दिखाता है; कई चुने होने पर यह बताता है कि कितने हैं, कॉपी करें, डुप्लिकेट करें और नोड हटाएँ के साथ।
कॉपी, काटें और चिपकाएँ
Ctrl+C चुने गए नोड और उनके बीच के वायर टेक्स्ट के रूप में कॉपी करता है; Ctrl+X उन्हें हटाता भी है; Ctrl+V उन्हें चिपकाता है — इस प्रयोग में, बाद में खोले गए किसी दूसरे में, या किसी दूसरी Signal Lab विंडो में। यह टेक्स्ट JSON है, इसलिए आप उसे किसी फ़ाइल या संदेश में भी रख सकते हैं।
- शुरुआत और अंत एकमात्र हैं: वे कभी कॉपी नहीं होते।
- कॉपी किए गए नोड और ग्राफ़ के बाकी हिस्से के बीच के वायर कॉपी नहीं होते; कॉपी को ख़ुद जोड़ें।
- चिपकाए गए हर नोड को नई id मिलती है।
- जो नोड किसी दूसरे का नाम लेता है — बाधा बदलें, एमुलेटर बंद/चालू, WebSocket भेजें, WebSocket की प्रतीक्षा, WebSocket बंद करें — वह कॉपी का नाम लेता है जब वह भी कॉपी की गई हो; वरना यह मूल का नाम लेता रहता है, अगर वह इस प्रयोग में है, या यहाँ उस तरह के पहले नोड का।
- चिपकाया गया एमुलेटर या नेटवर्क बाधा जिसका पोर्ट यह प्रयोग पहले से सुनता है, अगले ख़ाली पोर्ट पर चला जाता है। जो मूल को भेजता है, वह अब भी भेजता है।
- कॉपी जहाँ से आई उससे 32 पिक्सल दाएँ और एक पंक्ति नीचे आती है, तब तक और नीचे जब तक किसी नोड को न ढके, और चुनी हुई होती है।
Ctrl+D (डुप्लिकेट करें) क्लिपबोर्ड के बिना वही करता है।
हटाना
Delete या Backspace (नोड हटाएँ, नोड हटाएँ) चुने गए नोड और उनके वायर हटाता है। जिस नोड में ठीक एक वायर अंदर और एक वायर बाहर था, वह अपनी जगह एक वायर छोड़ जाता है, उससे पहले के नोड से उसके बाद के नोड तक, इसलिए श्रृंखला जुड़ी रहती है। शुरुआत और अंत हटाए नहीं जा सकते।
पूर्ववत और फिर से करें
Ctrl+Z पूर्ववत करता है; Ctrl+Shift+Z या Ctrl+Y फिर से करता है (कैनवास पट्टी में ↶ ↷)। एक खींचना, तीर कुंजियों से खिसकाने की एक श्रृंखला, या एक फ़ील्ड में टाइप करना एक कदम है। ऐप खुला रहने तक अंतिम 100 कदम रखे जाते हैं, स्क्रीन बदलने पर भी; किसी दूसरे प्रयोग को खोलना भी एक कदम है, इसलिए Ctrl+Z पिछला वापस ले आता है। रन चलते समय पूर्ववत और फिर से करें रुके रहते हैं।
व्यवस्थित करें
व्यवस्थित करें ग्राफ़ को बाएँ से दाएँ बिछाता है: हर नोड उस तक आने वाले अंतिम नोड के बाद के स्तंभ में, किसी लूप की बॉडी उसकी पंक्ति में — और फिर दृश्य को फ़िट करता है। यह इतिहास का एक कदम है। ऐसा ड्राफ़्ट जिसमें लूप के अलावा कोई चक्र हो, जैसा है वैसा छोड़ दिया जाता है।
प्रॉपर्टी पैन
एक नोड चुने होने पर पैन ऊपर से नीचे यह दिखाता है:
- नोड का नाम (उसका टूलटिप बताता है कि वह क्या करता है) और, जब इस नोड की वजह से प्रयोग चल नहीं सकता, तो क्या ग़लत है।
- उसके फ़ील्ड। टेम्पलेट लेने वाले फ़ील्ड
{{टाइप करते ही, या Ctrl+Space पर, पैरामीटर, चर, सीक्रेट और जनरेटर सुझाते हैं। - उसकी सेटिंग्स: HTTP रिक्वेस्ट पर लोड के तहत भेजें, भेजने वाले नोड पर भेजना दोहराएँ, भेजने या सुनने वाले नोड पर विफल होने पर पुनः प्रयास करें, और OSC तथा UDP संदेशों पर जवाब की प्रतीक्षा करें (नोड सेटिंग्स देखें)। लोड चालू रहते समय दोहराव और दोबारा प्रयास को बदल देता है।
- अंतिम रन का लोड परिणाम, उस HTTP नोड पर जो लोड के तहत चला।
- प्रीव्यू — भेजा जाएगा, इसकी प्रतीक्षा होगी या तुलना होगी — जब नोड में टेम्पलेट हों: वह क्या भेजेगा, किसकी प्रतीक्षा करेगा या किसकी तुलना करेगा, वर्तमान पैरामीटर और अब तक ज्ञात मानों के साथ हल किया हुआ (अभी भेजें और प्रीव्यू)।
- अभी भेजें या अभी सुनें, और उसने पिछली बार क्या किया।
- उसके बाहर जाने वाले वायर, हर एक के साथ ×।
- OSC या UDP संदेश पर ⚡ बाधा से होकर भेजें: नोड के आगे एक नेटवर्क बाधा रखा जाता है — 9010 से ऊपर के किसी ख़ाली लूपबैक पोर्ट पर सुनते हुए, नोड के लक्ष्य को अग्रेषित करते हुए — और नोड उसकी ओर इंगित कर दिया जाता है, इसलिए अगला रन जो वह भेजता है उसे ख़राब कर देता है (फ़ॉल्ट)।
- + अगला जोड़ें, कॉपी करें, डुप्लिकेट करें और नोड हटाएँ।
किसी नोड पर डबल-क्लिक पैन को उसके मुख्य फ़ील्ड में कर्सर के साथ खोलता है। कई नोड चुने होने पर पैन वह सब देता है जो उन सब पर किया जा सकता है; कोई वायर चुना होने पर, वह किसे जोड़ता है और कनेक्शन हटाएँ। रन चलते समय फ़ील्ड ताले में रहते हैं।
अभी भेजें और प्रीव्यू
अभी भेजें (Ctrl+Enter, नोड के फ़ील्ड के अंदर से भी) चुने गए नोड को अकेले भेजता है, प्रयोग चलाए बिना, उसी कोड के ज़रिए जो एक रन इस्तेमाल करता है। यह HTTP रिक्वेस्ट, TCP संदेश, OSC संदेश, UDP डेटाग्राम, MQTT पब्लिश, WebSocket कनेक्ट और WebSocket भेजें पर दिया जाता है। किसी प्रतीक्षा पर यह अभी सुनें होता है: प्रतीक्षा अब से तब तक सुनती है जब तक कोई संदेश मेल न खाए या उसका टाइमआउट समाप्त न हो जाए।
- नोड सक्रिय प्रोफ़ाइल, सहेजे गए सीक्रेट और अब तक ज्ञात चर मान इस्तेमाल करता है — अंतिम रन से और पिछले अभी भेजें परिणामों से। अगर कोई टेम्पलेट ऐसे मान का नाम लेता है जो किसी ने अभी सेट नहीं किया, तो कुछ नहीं भेजा जाता और नाम सूचीबद्ध कर दिए जाते हैं।
- यह एक बार भेजा जाता है: दोबारा प्रयास, दोहराव और लोड लागू नहीं होते, कोई कुकी नहीं रखी जाती, और प्रयोग के एमुलेटर तथा रिले शुरू नहीं किए जाते।
- WebSocket भेजें या WebSocket की प्रतीक्षा उस एक टेस्ट के लिए वह कनेक्शन खोलता है जिसका वर्णन उसका WebSocket कनेक्ट करता है।
- HTTP रिक्वेस्ट पर जवाब दिखाया जाता है — स्टेटस, समय, आकार, और बॉडी, JSON में सजाकर। रिक्वेस्ट के बाद के मान निकालें नोड जो मान लेंगे, वे तुरंत भर दिए जाते हैं। किसी JSON जवाब में किसी मान पर क्लिक करके उसके लिए रिक्वेस्ट के ठीक बाद एक मान निकालें नोड जोड़ें, उसका चर नामित और उसका मान ज्ञात। इसका मॉक बनाएँ जवाब को किसी एमुलेटर के रूट में बदल देता है।
- परिणाम कंसोल में भी लिखा जाता है।
प्रीव्यू भी इंजन ही हल करता है, किसी बदलाव के लगभग एक चौथाई सेकंड बाद। सीक्रेट मान कभी नहीं दिखाए जाते, न वहाँ न कहीं और।
जाँच
एडिटर संपादन करते हुए प्रयोग की जाँच करता है, और प्रयोग चलाएँ दबाने पर एक बार और:
- जिस आउटपुट पर अभी वायर चाहिए, वह अंबर रंग में धड़कता है।
- जिस नोड तक शुरुआत से कोई वायर नहीं पहुँचता, वह बिंदुदार बनाया जाता है; उसका टूलटिप यह बताता है।
- जिस नोड की समस्या है वह रेखांकित किया जाता है, और समस्या उसके फ़ील्ड के ऊपर लिखी जाती है।
- टूलबार में ⚠ ग्राफ़ पूरा करें समस्या बताता है; क्लिक उस नोड को चुनता है।
एक प्रयोग तब चलता है जब, अन्य बातों के साथ:
- उसका एक नाम हो, ठीक एक शुरुआत और एक अंत हो, और अधिकतम 64 नोड हों;
- शुरुआत से हर नोड तक पहुँच हो, और हर ज़रूरी आउटपुट पर वायर हो;
- केवल वही चक्र हों जो लूप नोड की बॉडी हैं जो उन्हीं तक वापस जाती हैं;
- हर जाँच और मान निकालें से पहले हर रास्ते पर एक HTTP रिक्वेस्ट हो (लोड के तहत वाला नहीं गिना जाता: वह कोई जवाब नहीं छोड़ता);
- WebSocket भेजें, WebSocket की प्रतीक्षा या WebSocket बंद करें उस WebSocket कनेक्ट के बाद आए जिसे वह इस्तेमाल करता है;
- हर फ़ील्ड भरा और सीमा में हो, और हर टेम्पलेट उस बिंदु तक ज्ञात किसी चीज़ का नाम ले।
अधूरे ड्राफ़्ट फिर भी सहेजे जाते हैं। जब कोई ज़रूरी सीक्रेट सहेजा नहीं गया हो, तो किसी भी ट्रैफ़िक से पहले रन अस्वीकार कर दिया जाता है। हर संदेश त्रुटि संदर्भ में सूचीबद्ध है।
चलाना
प्रयोग चलाएँ प्रयोग की जाँच करता है, उसे सहेजता है, और शुरू करता है। अगर वह चल न सके, तो समस्या दिखाई जाती है और उसका नोड चुना जाता है। वरना टाइमलाइन खुलती है और रन के पहुँचते-पहुँचते नोड जगमगाते हैं: ● चल रहा है, ✓ सफल, ✕ विफल, ↻ दोबारा प्रयास, ⟳ दोहराव, ⚡ लोड के तहत; जिन वायरों से प्रवाह गया वे भी रंगे जाते हैं।
- प्रतीक्षाएँ, एमुलेटर और इम्पेयरमेंट रिले पहले चरण से पहले अपने पोर्ट खोल लेते हैं, इसलिए जल्दी आने वाला कुछ नहीं छूटता। जो पोर्ट खुल न सके (मान लें, कोई दूसरा प्रोग्राम उसे लिए है), वह रन को शुरू होने से रोक देता है, और जिस नोड को वह चाहिए वह दिखा दिया जाता है।
- रोकें रन को तुरंत समाप्त कर देता है: ठहराव, प्रतीक्षाएँ और लोड समेत। रन कंसोल की जॉब पट्टी में एक जॉब भी होता है, जो उसे भी रोक सकती है।
- 300 सेकंड से ज़्यादा लेने वाला रन रोक दिया जाता है और विफल हो जाता है।
- रन चलते समय प्रयोग संपादित नहीं किया जा सकता; पैन करना, ज़ूम करना और चुनना अब भी काम करते हैं।
बटन के बगल में ▾ इसके साथ चलाएँ… दूसरी प्रोफ़ाइल, दूसरे पैरामीटर मान या दिए गए सीड के साथ एक बार चलाता है; प्रयोग ख़ुद नहीं बदलता, और ऐप बंद होने तक फ़ॉर्म आपका टाइप किया हुआ रखता है (डेटा और टेम्पलेट)।
रन टाइमलाइन
रन टाइमलाइन हर चरण की एक पंक्ति सूचीबद्ध करती है: समय, नोड और क्या हुआ — सफल, विफल और क्यों, कोई दोबारा प्रयास, किसी दोहराव की प्रगति, किसी लोड की संख्याएँ सेकंड में एक बार। कैनवास पर उसका नोड चुनने के लिए किसी पंक्ति पर क्लिक करें।
उसकी शीर्षक पंक्ति में होता है:
- नतीजा: सफल, वजह के साथ विफल, या रोका गया;
- रिपोर्ट सहेजी गई — रन की रिपोर्ट फ़ाइल (सर्वर पर, एक डाउनलोड);
- तुलना करें — इस रन को उसी प्रयोग के किसी पिछले रन के साथ;
- रन ने जो प्रोफ़ाइल और बदले गए मान इस्तेमाल किए, जब कोई थे;
- रन का सीड, उसे प्रयोग में रखने के लिए पिन करें के साथ ताकि अगले रन वही रैंडम मान निकालें, या पिन हो जाने पर अनपिन करें।
जब इंस्पेक्टर कैप्चर कर रहा था, तो जो प्रतीक्षा (या अपेक्षित जवाब) मेल खाया वह उस फ़्रेम से जुड़ता है जिससे वह मेल खाया; क्लिक उसे इंस्पेक्टर में खोलता है। रिपोर्ट, सीड और रनों की तुलना रन और रिपोर्ट में हैं।
फ़ोकस मोड और फ़ुलस्क्रीन
▢ फ़ोकस मोड साइडबार, हेडर और निचला पैन (कंसोल और इंस्पेक्टर) छिपा देता है, स्क्रीन एडिटर को छोड़ देता है। ⛶ फ़ुलस्क्रीन विंडो को फ़ुलस्क्रीन में डालता है और फ़ोकस मोड चालू करता है; फ़ुलस्क्रीन से बाहर आने पर फ़ोकस मोड जैसा था वैसा हो जाता है। किसी दूसरी स्क्रीन पर जाने से फ़ोकस मोड चला जाता है।
कैनवास पर Esc, जब बंद करने को और कुछ न हो, फ़ुलस्क्रीन से बाहर निकालता है और फिर फ़ोकस मोड से।
सहेजना और फ़ाइलें
प्रयोग अपने आप, हर बदलाव के कुछ क्षण बाद, डेटा फ़ोल्डर की experiment.json में सहेजा जाता है (डेस्कटॉप पर Documents/SignalLab; सर्वर का अपना होता है — फ़ाइलें और फ़ोल्डर देखें)। जो ड्राफ़्ट अभी चल नहीं सकते वे भी सहेजे जाते हैं। रन पहले सहेजता है, इसलिए जो चला वही डिस्क पर है।
अगर वह फ़ाइल पढ़ी न जा सके — मान लें, हाथ से संपादित करके ख़राब JSON बना दी गई हो — तो एडिटर बताता है कि कौन-सी फ़ाइल और क्यों, और उसे जैसी है वैसी छोड़ देता है। ☰ प्रयोग से दूसरा प्रयोग खोलने पर वह अगले सहेजने पर उसे बदल देता है।
☰ प्रयोग प्रयोगों का डायलॉग खोलता है:
- टेम्पलेट: एक चुनें और प्रयोग खोलें दबाएँ। वे सब लूपबैक पते इस्तेमाल करते हैं।
- JSON खोलें… एक प्रयोग फ़ाइल पढ़ता है — Signal Lab के इस संस्करण या किसी पुराने संस्करण से लिखी, अधिकतम 4 MiB — और खोलने से पहले उसका नाम तथा उसमें कितने नोड और कनेक्शन हैं, दिखाता है। पुराने संस्करणों की फ़ाइलें खुलते ही अद्यतन कर दी जाती हैं। जो फ़ाइल पार्स न हो, या वैध प्रयोग न बने, वह वजह के साथ अस्वीकार कर दी जाती है, और वर्तमान प्रयोग बना रहता है।
- वर्तमान JSON निर्यात करें वर्तमान प्रयोग का स्नैपशॉट — नोड, वायर, स्थितियाँ, पैरामीटर और प्रोफ़ाइल, कभी सीक्रेट मान नहीं — डेटा फ़ोल्डर के
exportsमें एक नई फ़ाइल में लिखता है और उसका पथ दिखाता है; सर्वर पर, एक डाउनलोड करें लिंक के साथ। - प्रयोग खोलें वर्तमान प्रयोग को टेम्पलेट या फ़ाइल से बदल देता है। यह उसे चलाता नहीं, और Ctrl+Z पिछला वापस ले आता है।
| टेम्पलेट | क्या करता है |
|---|---|
| खाली प्रयोग | शुरुआत और अंत, आपके अपने प्रवाह के लिए |
| HTTP जाँच | http://127.0.0.1:8080/ पर एक GET और स्टेटस 200 की जाँच — वह प्रयोग जिससे आप शुरू करते हैं |
| HTTP से OSC | वही रिक्वेस्ट; 200 पर 127.0.0.1:9000 को एक OSC संदेश, वरना 500 ms का विलंब |
| समानांतर प्रवाह | एक साथ दो शाखाएँ — एक रिक्वेस्ट और एक लॉग पंक्ति — अंत से पहले जुड़ी हुई |
| OSC ping → जवाब | रन की id के साथ /ping को 127.0.0.1:9000 पर भेजता है और 127.0.0.1:9001 पर उसे वापस लाने वाले /pong की प्रतीक्षा करता है |
| तैयार होने तक पोल करें | किसी डिवाइस से हर 0.3 s पर /status माँगता है जब तक वह ready जवाब न दे, अधिकतम दस बार |
| अस्थिर API पर पुनः प्रयास | एक एमुलेट किया गया API जो जवाब देने से पहले दो बार विफल होता है, और एक लूप जो जवाब मिलने तक माँगता है |
| फ़ॉल्ट फ़ेज़ | एक इम्पेयरमेंट रिले के ज़रिए एमुलेट किए गए डिवाइस को डेटाग्राम, जबकि एक समानांतर शाखा नेटवर्क को साफ़, हानि वाला, ऑफ़लाइन और फिर साफ़ करती है |
| डिपेंडेंसी आउटेज | एक एमुलेट किया गया API जिसे एक समानांतर शाखा दो सेकंड के लिए बंद कर देती है, और एक क्लाइंट जो फिर जवाब मिलने तक माँगता रहता है |
| WebSocket इको | ws://127.0.0.1:9001/echo पर एक इको सेवा से जुड़ता है, एक JSON ping भेजता है, उसे बिना बदले वापस पाने की अपेक्षा करता है, और बंद करता है |
वही फ़ाइलें एडिटर के बिना चलती हैं: signallab run experiment.json — कमांड लाइन देखें।
कीबोर्ड शॉर्टकट
एकेल कुंजियाँ कैनवास पर काम करती हैं और फ़ील्ड में टाइप करते समय अछूती रहती हैं। मैक पर, ब्राउज़र में, जहाँ Ctrl लिखा है वहाँ Cmd काम करता है।
| कुंजियाँ | क्रिया |
|---|---|
| A | चुने नोड के बाद नोड जोड़ें, या कुछ चुना न हो तो दृश्य के बीच |
| Ctrl+Enter | चुने गए नोड पर अभी भेजें, या अभी सुनें |
| Ctrl+Z | पूर्ववत |
| Ctrl+Shift+Z, Ctrl+Y | फिर से करें |
| Ctrl+A | हर नोड चुनें |
| Ctrl+C / Ctrl+X / Ctrl+V | चुने गए नोड और उनके बीच के वायर कॉपी / काटें / चिपकाएँ |
| Ctrl+D | चुने गए नोड की प्रतिलिपि बनाएँ |
| Delete, Backspace | चुना गया वायर हटाएँ, या चुने गए नोड |
| तीर कुंजियाँ (किसी नोड पर फ़ोकस) | चुने गए नोड को 5 पिक्सल खिसकाएँ; Shift के साथ, 20 |
| Ctrl+F | नोड ढूँढें |
| Ctrl+0 | ग्राफ़ फ़िट करें |
| Ctrl+1 | 100 % पर ज़ूम करें |
| Ctrl + माउस व्हील | पॉइंटर के आसपास ज़ूम करें |
| Shift + क्लिक, Ctrl + क्लिक | चयन में नोड जोड़ें, या निकालें |
| Shift + ख़ाली कैनवास पर खींचें | फ़्रेम से चुनें |
| किसी नोड पर डबल-क्लिक | उसके फ़ील्ड संपादित करें |
| ख़ाली कैनवास पर डबल-क्लिक | वहाँ नोड जोड़ें |
| फ़ोकस वाले आउटपुट पर Enter, Space | उससे वायर शुरू करें |
किसी फ़ील्ड में {{ या Ctrl+Space | पैरामीटर, चर, सीक्रेट और जनरेटर सुझाएँ |
| किसी फ़ील्ड में Esc | कैनवास पर नोड के पास वापस |
| कैनवास पर Esc | नोड जोड़ने का मेनू बंद करें; वरना खींचा जा रहा वायर रद्द करें; वरना चुना गया वायर छोड़ें; वरना कई का चयन हटाएँ; वरना फ़ुलस्क्रीन से बाहर; वरना फ़ोकस मोड से बाहर |
नोड जोड़ने के मेनू और खोजक में, ↑ ↓ चुनते हैं, Enter चुनाव लेता है और Esc बंद करता है। ऐप के सभी शॉर्टकट कीबोर्ड शॉर्टकट में हैं।