3 पॉइंट द्वारा GN⁺ 2023-11-11 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • RSI दोबारा उभरने के कारण फिर से coding input का तरीका बदलना पड़ा, और VS Code extension Cursorless voice-based code editing का मुख्य tool बन गया
  • Cursorless code tokens पर रंग और अक्षर आधारित hat लगाता है, जिससे user screen location को बोलकर refer कर सकता है और delete, move, insert जैसे काम कर सकता है
  • यह साधारण cursor movement से अधिक शक्तिशाली इसलिए है क्योंकि green urge past green bat जैसी path specification को भाषा की AST पहचान के साथ जोड़कर function, lambda, definition body जैसे structural units संभाले जा सकते हैं
  • Talon commands खुद लिखने पर async <destination> जैसी insertion या Go method declaration जैसी लंबी input को छोटी voice command से automate किया जा सकता है
  • Voice coding बोलने के लिए जरूरी शब्दों को खत्म नहीं करती, लेकिन ऐसा command system बना सकती है जो दिमाग में code समझने के तरीके के अधिक करीब हो

RSI दोबारा उभरना और Cursorless इस्तेमाल करने का संदर्भ

  • नई नौकरी शुरू करने के समय RSI दोबारा उभर आया, और पहले की तरह technical writing पर निर्भर रहने के बजाय फिर से programming करने का तरीका चाहिए था
  • Emacs user होने के बावजूद इस बार एक खास extension की वजह से Visual Studio Code इस्तेमाल कर रहा हूं
  • वह extension Cursorless है, जो voice control software के साथ मिलकर AST-level code editing संभव बनाता है
  • पहले Cursorless का इस्तेमाल मुख्यतः screen navigation के लिए करता था, लेकिन इस बार जितने भी काम संभव हैं उन सब पर इसे गहराई से लागू करने की कोशिश है
  • Slack और Discord messages में भी ऐसी input method होती तो अच्छा होता

hat, target, destination से location बोलकर बताने का तरीका

  • Cursorless की बुनियादी इकाइयां target और destination हैं
    • target document के अंदर अलग-अलग anchors को दर्शाता है
    • destination किसी खास target के आधार पर relative location का मतलब रखता है
  • document के tokens पर रंग और अक्षर से बने hat लगाए जाते हैं
    • hat की position उसका नाम तय करती है
    • hat का रंग ambiguity दूर करता है
  • उदाहरण JavaScript code में अगर function शब्द के u के ऊपर हरे रंग का hat है, तो उस शब्द को green urge कहा जा सकता है
  • इस target पर उस शब्द को delete करने या किसी दूसरी जगह move करने की command दी जा सकती है
  • सिर्फ इसी तरीके से voice के जरिए Vim motion के करीब वाली manipulation संभव हो जाती है

AST पहचान से बनने वाली structural editing

  • Cursorless की ताकत सिर्फ location specification तक सीमित नहीं है; यह path और भाषा की AST पहचान को साथ इस्तेमाल करने से आती है
  • green urge past green bat जैसे expression से screen पर function fetchBlog की range select की जा सकती है
  • यह भाषा की AST structure समझता है, इसलिए पूरे function को delete करना या दूसरी जगह move करना भी संभव है
  • visualize lambdas command function के अंदर lambdas को अलग structural units के रूप में visualize करती है
  • AST units भी target बन सकते हैं, इसलिए definition की body select करने के बाद उसी range में refactoring जारी रखी जा सकती है
  • उदाहरण में function को asynchronous function में बदलने वाली refactoring आसान हो जाती है

Talon commands से voice coding को extend करना

  • Cursorless और Talon को साथ इस्तेमाल करने पर अपनी voice commands लिखी जा सकती हैं
  • async <user.cursorless_destination> उदाहरण specified destination से पहले "async" insert करने वाली command है
[state] async <user.cursorless_destination>:
    user.cursorless_insert(cursorless_destination, "async")
  • Talon commands broadly दो हिस्सों में बंटी होती हैं
    • pattern: user द्वारा बोले गए शब्द
    • capture: बोले गए content से extract किया जाने वाला target
  • इस उदाहरण में pattern async है, और capture वह destination है जहां async insert करना है
  • <user.cursorless_destination> capture एक special capture है जो किसी target के आगे या पीछे की जगह specify करने देता है
  • अधिक complex commands भी संभव हैं, और Go method declaration बनाने वाला Talon rule उदाहरण के तौर पर इस्तेमाल किया गया है
(method|meth) <user.letter> [<user.go_pointer>] [<user.go_visibility>] <user.text> [over] [<user.go_visibility>] named <user.text> [over]:
    user.go_method(go_pointer or "", letter, go_visibility_1 or "public", text_1, go_visibility_2 or "public", text_2)

Go method declaration और pointer expression पर प्रयोग

  • Go में methods का form कुछ ऐसा होता है
func (reciever *Type) MethodName() {
    // function body here or something
}
  • यह explanation जुड़ी है कि Go में traditional meaning वाले methods नहीं होते, बल्कि ऐसे functions होते हैं जो किसी specific struct से namespaced receiver लेते हैं
  • automation के बिना इस code को voice से input करने के लिए लंबी command बोलनी पड़ेगी

state funk args word reciever space star hammer type over go right space hammer method name args go right brack enter

  • Talon rule इस्तेमाल करने पर इसे ज्यादा छोटा बोला जा सकता है

meth r raised type named method name over

  • अब भी बोलने के लिए काफी शब्द हैं, लेकिन input ज्यादा efficient है और दिमाग में concept बनाने के तरीके के करीब है
  • raised Go pointer concept को अलग तरीके से express करने का experiment है
    • Go pointer syntax C-style है, और यह interpretation इस्तेमाल करता है कि * pointer value को normal value में lower करने के लिए और & normal value को pointer value में raise करने के लिए इस्तेमाल होता है
    • Go के लिए Talon bindings को नए सिरे से design करते समय pointer values को raising/lowering concept में unify करके देख रहे हैं कि क्या यह समझने में आसान है
  • GitHub Copilot Voice beta में शामिल होकर Talon-based voice coding से तुलना करके देखना चाहते हैं

1 टिप्पणियां

 
GN⁺ 2023-11-11
Hacker News की राय
  • मैं ही लेखक हूं, मुझे अंदाज़ा नहीं था कि यहां इतनी अच्छी प्रतिक्रिया मिलेगी
    अगर रुचि हो, तो अपनी प्रयोगात्मक Talon config repository यहां डाल दी है: https://github.com/Xe/invocations

    • कलाइयां आम तौर पर ठीक हैं, लेकिन परिवार में चली आ रही early osteoarthritis की वजह से उंगलियों के जोड़ हमेशा ठीक नहीं रहते
      लगता है किसी दिन keyboard के बजाय इस तरीके से काम करना ज़रूरी तो नहीं, पर काफी कम दर्दनाक होगा, और यह जानकर अच्छा लगा कि एक व्यावहारिक विकल्प मौजूद है
    • यह HN की पसंद के लिए बिल्कुल फिट लेख लगता है
      ऐसी setup देखते हुए हर बार महसूस होता है कि मेरी neurodiversity बाकी लोगों से काफी अलग है। स्क्रीन को समझने और नेविगेट करने के लिए दिमाग में रखना पड़ने वाला context और abstractions बहुत ज्यादा हैं, और यह तभी संभव लगता है जब कोई भाषा और IDE/CLI से दशकों से परिचित हो
      “समय के साथ यह Vim commands की तरह second nature बन जाता है” वाला हिस्सा भी सचमुच इसी तरह सीखना पड़ेगा लगता है। 30 साल से कंप्यूटर इस्तेमाल कर रहा हूं, लेकिन इस स्तर की coding proficiency अब भी उलझाने वाली और प्रभावित करने वाली दोनों लगती है
    • जिज्ञासा है कि क्या Emacs solution भी देखा गया था
      जानना चाहूंगा कि वह अच्छा नहीं लगा, या VS Code वाला solution कहीं बेहतर लगा
    • इस लेख की वजह से Talon को लेकर सचमुच जिज्ञासा हुई और मैं तुरंत कूद पड़ा; पहले ही Warp terminal के लिए app layer बना ली और terminal Emacs को भी, जो आम तौर पर detect नहीं होता था, Talon के सामने expose कर दिया
      Cursorless में ज्यादा रुचि नहीं है, क्योंकि मैं VSCode इस्तेमाल नहीं करता और Vim/Evil mode के text objects भी उतने ही powerful हैं, साथ ही visually कम noisy हैं। यह पूरा concept बहुत exciting है
  • यह tree-sitter AST का इस्तेमाल करके buffer के “हिस्सों” पर operations करने जैसा दिखता है
    अगर ऐसा है, तो यह Vim/Evil के text objects से बहुत मिलता-जुलता है, बस इसमें voice element जुड़ गया है
    अगर इसमें “record then execute” जैसी functionality जुड़ जाए तो संभावनाएं काफी बढ़ती दिखती हैं। Keyboard से X काम करते समय, अगर अगला Y काम स्क्रीन पर दिख रहा हो और वह सरल हो, तो Y command बोलकर रख सकते हैं और X खत्म होने के बाद button दबाकर voice command चला सकते हैं। Typing और बोलने को बारी-बारी करने से यह काफी बेहतर है
    Typing और बोलना अलग-अलग cognitive areas का इस्तेमाल करते हैं, और grammar समझ लेने के बाद software लिखना इतना linguistic नहीं रहता। अगर एक साथ type और बोल सकें तो flow state में जाना आसान लगेगा, और यह किसी तरह के enhanced rubber duck debugging जैसा दिखता है। Notes भी लिए जा सकेंगे
    लगता है Emacs package आ जाएगा

    • Emacs, Emacspeak की वजह से उल्टी दिशा में—यानी जब typing संभव हो लेकिन screen न दिखती हो—काफी अच्छा है
      लेकिन इस क्षेत्र की बराबरी करने में समय लगेगा। Display engine Cursorless-style notation संभाल नहीं पाता, और tree-sitter integration भी अभी mature नहीं है। खुद करके देखा है
    • Voice से programming का यह demo देखना अच्छा रहेगा: https://youtu.be/GM_siEPD4Ws?si=f52wK3tqqJaCQPp7
    • VSCode या JetBrains को Cursorless plugin से control करने वाला Emacs package मौजूद है
      फिर भी native Emacs के लिए कुछ हो तो अच्छा होगा
  • Cursorless खुद नहीं, लेकिन voice programming पर एक शानदार talk और demo यहां है: https://youtu.be/GM_siEPD4Ws?si=99ZhC1P4irOyu1pH
    देखने में मजेदार है, और speaker इस क्षेत्र की मौजूदा common problems को भी अच्छी तरह cover करता है

    • वह talk याद है। Speaker के channel पर और videos हैं, लेकिन अफसोस कि लगता है अब वह voice coding नहीं करता: https://www.youtube.com/@mccGoNZooo
  • अभी भी पूरी तरह समझने की कोशिश कर रहा हूं कि यह काम कैसे करता है
    यह keyboard की जगह voice इस्तेमाल करने वाले avy जैसा सुनाई देता है, और उसके साथ AST-aware commands जुड़ी हैं: https://karthinks.com/software/avy-can-do-anything/

    • सही। असल में जब Emacs के लिए इसे फिर से implement करने की कोशिश की थी, तो पहला step avy-style hats बनाना था
      उसके बाद overlay को हमेशा visible रखने की कोशिश की, लेकिन कहीं अटक गया
  • Cursorless के author की Strange Loop talk: https://www.youtube.com/watch?v=NcUJnmBqHTY

  • जिज्ञासा है कि “urge” और “bat” क्यों इस्तेमाल करते हैं
    क्या संबंधित अक्षर से शुरू होने वाला कोई भी शब्द इस्तेमाल नहीं कर सकते?

    • नहीं। Talon में छोटा और अलग पहचान में आने के लिए चुना गया voice alphabet है
      details यहां हैं: https://whalequench.club/blog/2019/09/03/learning-to-speak-c...
    • क्योंकि बोलना आसान है और Talon के लिए अलग पहचानना आसान है
      पहले जब दिन में 6–8 घंटे voice coding करके देखा था, तो ऐसी हर micro-optimization की अहमियत महसूस होती थी
  • आजकल eye-tracking technology से 2 सेकंड से ज्यादा जिस जगह देखते रहें, वहां cursor रख देना क्या पर्याप्त नहीं है?
    Driving या art pieces देखते समय gaze के रुकने पर हुई studies याद आती हैं

    • संभव हो सकता है, लेकिन screen location बताने के लिए 2 सेकंड से ज्यादा का ठहराव बहुत लंबा है
      Coding के दौरान इस तरह ठहरना बहुत बार होता है
    • YouTube पर eye tracker को coding या gaming में इस्तेमाल करने के examples देखकर latency का अंदाज़ा खुद लगा सकते हैं। Example यहां है: https://youtu.be/FZRgBw8m34c?feature=shared&t=90
    • neural signal click के साथ eye tracking चाहिए
      बेहद responsive और accurate eye-tracking device चाहिए, जो कम से कम 3–5 buttons detect कर सके: click, press, release, move right, move left
  • यह writing style Gödel, Escher, Bach में कछुए और Achilles के संवाद वाले हिस्से जैसी काफी लगती है
    मेरी उम्र 52 है और 1995 से tech roles में रोज़ typing कर रहा/रही हूँ। 2000 के आसपास repetitive strain injury हुई थी, और keyboard के सामने कलाई टिकाने वाले गद्देदार pad या कोहनी रखने वाली sliding device जैसे ergonomic aids आज़माए, लेकिन कोई असर नहीं हुआ
    इसके बजाय मैंने typing का तरीका बदला। हाथ और कलाई को relaxed रखा, और उंगलियां फैलाकर keys दबाने के बजाय बांह को move करने लगा/लगी, तो असर हुआ
    आज भी रोज़ बहुत typing करता/करती हूँ, लेकिन 20 साल से दर्द नहीं है। हर व्यक्ति अलग हो सकता है, लेकिन बांहों और हाथों को इस्तेमाल करने का तरीका बदलना बहुत मदद कर सकता है

    • हाई स्कूल में bass guitar बजाते हुए मुझे मिली सबसे बड़ी सीख भी यही थी
      अगर movement को बड़े muscle groups को सौंप सकते हैं, तो आम तौर पर वैसा करना बेहतर होता है। जैसे बांह के बजाय कंधे/पीठ, हाथ के बजाय बांह, और उंगलियों के बजाय हाथ का इस्तेमाल करना
    • करीब 15 साल पहले कुछ महीनों तक गंभीर repetitive strain injury रही, और कई आदतें बदलने के बाद वह गायब हो गई
      हर व्यक्ति अलग हो सकता है, लेकिन trackball ने बहुत मदद की। कुछ समय तक बाईं तरफ mouse और दाईं तरफ trackball रखकर बारी-बारी इस्तेमाल किया, लेकिन अब इसकी ज़रूरत नहीं है
      break लेना और posture पर ध्यान देना भी ज़रूरी है। खासकर कलाई का posture महत्वपूर्ण है, इसलिए मैं कलाई या बांह को कहीं टिकाए बिना सिर्फ उंगलियों को keyboard से छूने देता/देती हूँ
      काफी बाद में kettlebell से strength training शुरू की, और strength व blood circulation में काफी सुधार महसूस हुआ
    • लेखक ने जानबूझकर ऐसा लिखा है। character page देखें तो यह Socrates और छात्र के संवाद को reflect करने के लिए बनाया गया है। मुझे यह काफी clever लगता है
    • typing का तरीका बदलना ही मुख्य बात है
      करीब 10 साल पहले back pain, neck pain और repetitive strain injury की समस्या थी। कमर सीधी रखकर बैठना सीखा, desk की height ठीक की, और desk पर चीज़ों को फिर से arrange किया ताकि झींगे की तरह मुड़ी हुई posture में typing न करूं/करूं। और यह भी समझ आया कि असल में इतनी ज्यादा typing करने की ज़रूरत नहीं होती
      उसके बाद से बिल्कुल दर्द नहीं है
    • शरीर के बाकी हिस्से भी महत्वपूर्ण हैं। खासकर सिर और कंधों, और core, hips, feet तक पर ध्यान देना फायदे का है
  • अगर Cursorless का overall overview और real use देखना चाहते हैं, तो इस साल का Strange Loop talk अच्छा था: https://youtube.com/watch?v=NcUJnmBqHTY

  • यह बहुत पसंद आया और खुशी है कि development जारी है, लेकिन सच में गहराई से इसमें उतरने के लिए शायद आपकी बांह या हाथ में चोट होनी चाहिए, या गंभीर repetitive strain injury होनी चाहिए
    मानसिक initial entry cost ऊंची लगती है

    • सहमत हूँ, लेकिन Emacs/Vim, Dvorak/Colemak, chorded keyboards जैसे tools की भी initial entry cost ऊंची होती है
      हालांकि सबसे बड़ी constraint शायद यह है कि इसे practically तभी इस्तेमाल किया जा सकता है जब आप अकेले work from home कर रहे हों। बाहर या office में इसे इस्तेमाल करते हुए कल्पना करना मुश्किल है
    • अच्छा है कि यह actively develop हो रहा है
      अगर हाथ इस्तेमाल नहीं कर पाया/पाई, तो शायद इसे इस्तेमाल करूंगा/करूंगी