2 पॉइंट द्वारा GN⁺ 2023-08-31 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • अपने लेखन corpus से अपने-आप typing shortcuts बनाने और email व Slack में इस्तेमाल होने वाले input shortcuts जेनरेट करने वाला tool
  • text corpus को parse करके typing के समय सबसे ज़्यादा अक्षर बचा सकने वाले shortcuts सुझाता है, और Linux keyboard shortcut program Autokey की config file जेनरेट करता है
  • corpus में अक्सर आने वाले n-gram खोजकर उन्हें छोटे expressions से बदलने के candidates बनाता है, और suggestion ranking [बचाए गए अक्षरों की संख्या] * [phrase frequency] से calculate करता है
  • shortcut selection का लक्ष्य याद रखने में आसान abbreviations चुनना है; जिन abbreviations को आप word के रूप में type करना चाहते हैं उन्हें blacklist से exclude किया जाता है, और ज़्यादा इस्तेमाल होने वाले phrases को याद रखने में आसान abbreviations पहले allocate किए जाते हैं
  • Slack messages को corpus के रूप में इस्तेमाल करने के लिए Slack Data Export parsing tool भी देता है
    • सिर्फ Slack workspace admin ही export कर सकते हैं
    • केवल public channels export होते हैं
    • USERNAME_TO_EXPORT को Slack username से बदलने के बाद parse_slack.py चलाना ज़रूरी है
    • Slack export को srm से delete करने की प्रक्रिया भी शामिल है
  • basic usage flow: data/corpus/*.txt में corpus डालें, find_suggested_phrases.py से top 200 candidates को output/suggested_shortcuts.yaml में बनाएं, फिर मनचाहे items को shortcuts.yaml में move करें और generate_autokeys.py से Autokey config file जेनरेट करें
  • install.sh से dependencies install होती हैं, और फिलहाल Python 3.10.12 पर test किया गया है
  • Autokey फिलहाल Linux पर केवल X11 support करता है, Wayland support नहीं करता
  • जेनरेट की गई Autokey config इस तरह configure है कि वह केवल Chrome focus में होने पर apply हो; इसमें यह user experience भी शामिल है कि terminal और vscode में छोटे Linux commands या variable names के साथ abbreviations overlap होने से ज़्यादा समस्याएँ आईं

1 टिप्पणियां

 
GN⁺ 2023-08-31
Hacker News की टिप्पणियां
  • प्रोजेक्ट पर एक वीडियो वाला ब्लॉग पोस्ट भी लिखा है: https://erikschluntz.com/software/2023/08/26/compressing-my-...
    यह उन दुर्लभ side projects में से था जिसने लगाए गए समय से ज्यादा समय सच में बचाया :)

  • आइडिया बहुत चतुर है, लेकिन अगर यह समय के साथ बदलता रहे तो शायद मैं इसे इस्तेमाल नहीं करना चाहूंगा
    मसलन, अगर इसे हर 6 महीने में चलाया और पिछले साल db का मतलब debug था लेकिन इस साल वह database हो गया, तो यह muscle memory और आदतों को बिगाड़ सकता है
    इसलिए मुझे एक general-purpose version में ज्यादा दिलचस्पी है, जिसे अलग-अलग पृष्ठभूमि और संदर्भों के हजारों लोगों की किताबों, ईमेल और टेक्स्ट पर चलाने पर सभी के लिए भरोसेमंद तरीके से मदद मिले
    t को the में, st को something में expand करना तो स्वाभाविक लगता है, लेकिन सोचता हूं कि क्या 200~500 के आसपास का कोई न्यूनतम सेट बनाकर उसे एक “standard keyboard” बनाया जा सकता है जिसे सभी सीख सकें

    • Evans Basic English Code देखने लायक है। यह telegraph के Phillips Code पर आधारित एक shorthand system है और थोड़ा पुराना जरूर है, लेकिन सबसे आम शब्द लिखने या typing में काफी उपयोगी हैं
      https://archive.org/details/evansbasicenglis00evan
      PDF इस्तेमाल करना बेहतर है; TXT फाइल का OCR quality खराब है, इसलिए वह लगभग इस्तेमाल लायक नहीं है
      यह भी उपयोगी है: https://en.m.wikipedia.org/wiki/Most_common_words_in_English
    • ठीक इसी वजह से यह अपने-आप run नहीं होता। यह suggested_shortcuts.yaml output करता है, और वहां से shortcuts.yaml में copy करके डालने का तरीका है, इसलिए वास्तव में activate होने वाले shortcuts को आप manually control कर सकते हैं :)
    • ऐसा general-purpose version अंततः shorthand keyboard जैसा ही नहीं होगा क्या?
    • पहले मैंने Yublin देखा था, जो अंग्रेजी के सबसे आम 600 शब्दों के लिए 1~3 अक्षरों के abbreviations बनाने की ठीक ऐसी ही कोशिश थी
      और जाहिर है the -> t लिस्ट में सबसे ऊपर है: https://jonaquino.blogspot.com/2007/06/yublin-shorthand-for-...
    • सामान्य समाधान बहुत से लोगों के लिए बस औसत-सा ही फिट होने की संभावना रखता है
      कोई chemist dropper अक्सर टाइप करता हो तो dp चाह सकता है, लेकिन कोई bureaucrat शायद department को ज्यादा पसंद करे
  • अगर आप Chinese native speaker नहीं हैं तो शायद न जानते हों, लेकिन चीनी में ऐसा feature built-in है
    आधिकारिक तौर पर इसे 双拼(Shuangpin) कहा जाता है, और इसमें हर शब्द के लिए 2 English letters डालकर पूरा शब्द input किया जाता है: https://zh.wikipedia.org/zh-sg/%E5%8F%8C%E6%8B%BC
    Shuangpin को formal तरीके से इस्तेमाल न करें तब भी ज्यादातर Chinese input methods लोकप्रिय phrases के लिए इसी तरह का 简拼 feature support करते हैं, जिससे हर शब्द का सिर्फ पहला English letter डालकर कई शब्दों वाला phrase input किया जा सकता है
    उदाहरण के लिए Chinese में “thank you” यानी xiexie input करना हो, तो आम तौर पर सिर्फ xx टाइप करने पर ज्यादातर Chinese input methods अपने-आप संबंधित Chinese characters suggest कर देते हैं

    • अच्छे pinyin keyboard में आम वाक्य तेजी से input करना आसान होता है
      उदाहरण के लिए “what do you want to eat” यानी 「你想吃什麼」 को n x c s m से input किया जाता है
    • standard keyboard से Chinese input करने के तरीके पर हाल ही में एक दिलचस्प podcast सुना: https://radiolab.org/podcast/wubi-effect
    • सोच रहा हूं कि XLB से Xiao long bao लिखना भी क्या इसी का उदाहरण है। नहीं पता था कि यह कोई ज्यादा व्यापक system है, बढ़िया है
    • यह अभी चल रही चर्चा के विषय से बिल्कुल संबंधित नहीं लगता
  • ऐसे projects देखना वाकई अच्छा लगता है
    weekend में मैंने मिलती-जुलती समस्या पर काम किया था, लेकिन खुद बनाए dictionary के abbreviations के बजाय पूरे शब्दों पर, और सामान्य case में उसे दिए गए text corpus के हिसाब से tune करने का तरीका था
    सवाल यह था कि “क्या दिए गए text corpus के मुताबिक tune किया गया autocorrector बनाया जा सकता है?” मसलन, अगर document में data augmentation जैसी लंबी expression बहुत आती है, तो देखना था कि क्या इसे automate किया जा सकता है
    approach यह था कि generic dataset यानी NYT corpus में single words और 2-grams की surprisal calculate की जाए, tuning target index में मौजूद शब्दों पर weight जोड़ा जाए, फिर surprisal से weighted trie data structure बनाकर advanced autocomplete की तरह इस्तेमाल किया जाए
    काम करने वाला solution यहां है: https://github.com/capjamesg/autowrite/blob/main/autocomplet...
    अभी documentation नहीं है और कुछ दिनों में add करूंगा; बात करना चाहें तो GitHub Issue छोड़ सकते हैं

    • यह https://github.com/wolfgarbe/SymSpell से काफी मिलता-जुलता लगता है
      हो सकता है मैं भ्रमित हूं कि क्या मकसद उसी expression को ज्यादा creative तरीके से कहने का तरीका ढूंढना है
  • विस्तार के आइडिया के तौर पर, इनपुट पर नज़र रखने वाला keylogger जोड़ा जा सकता है। बेशक, यह अपने-आप में एक कमी भी है
    तरीका यह होगा कि यूज़र के अक्सर इस्तेमाल होने वाले वाक्यांश सीखे जाएँ, आम वाक्यांशों को ढूँढकर shortcuts सुझाए जाएँ, और फिर जब भी यूज़र पूरा वाक्यांश टाइप करे तो shortcut को सहज तरीके से बता दिया जाए
    तब इसे कोई भी install कर सकेगा, entry barrier भी कम रहेगा, और समय के साथ productivity धीरे-धीरे बढ़ सकती है

    • मैं एक built-in keylogger keyboard बनाना चाहता था जो कोई special key दबाने पर autocomplete कर दे
      विचार यह था कि डेटा device के अंदर secure storage में रखा जाए ताकि यह security risk न बने
    • इसका कुछ हिस्सा input method (IME) के रूप में implement किया जा सकता है। Input method असल में एक approved keylogger है जो input को edit कर सकता है, और इसकी ज़रूरत मुख्य रूप से Chinese/Japanese input के लिए होती है
      desktop पर phone जैसा English autocomplete देने वाला input method, या fcitx5 जैसे input method framework से shortcuts देने वाला input method, एक दिलचस्प concept लग सकता है
    • यह कैसे काम करेगा, यह जानने की उत्सुकता है
      क्या यह हर हफ्ते Slack history को automatically export करके word frequency निकालेगा, और फिर दिखने वाले results के आधार पर manually कई expansions set करने जैसा होगा?
    • मैंने कुछ ऐसा prototype बनाने के लिए कभी काफ़ी गहराई से खोजबीन की थी
      structure यह था कि Bluetooth Keyboard -> ESP32 को keyboard host की तरह इस्तेमाल किया जाए, और key inputs को USB और file में भेजा जाए
      पैसे हों तो ऐसे USB/PS2 keyboard loggers भी हैं जो data को disk पर store करते हैं
    • लगता है कि standardized abbreviations होना बेहतर नहीं होगा?
      अगर चीज़ों को उस दिशा में converge कराया जाए, तो कई computers के बीच consistency में भी मदद मिलेगी, और कई computers इस्तेमाल करने वालों के लिए भी अच्छा होगा
  • मुझे लगता है कि कुछ chat situations को छोड़कर typing मेरे लिए शायद ही कभी bottleneck रही है
    बल्कि ऐसे interactions रहे हैं जहाँ video या voice की extra bandwidth मददगार होती। मुझे यह जानने की उत्सुकता है कि ऐसे shortcuts सच में काम के समय की बचत में बदलते हैं या नहीं

    • मुख्य motivation बहुत तेज़ Slack conversations और काफ़ी formalized email replies थे
      उदाहरण के लिए “क्या आप screenshot upload कर सकते हैं?” जैसी बातचीत, या Calendly link भेजने जैसे responses
      लंबा लिखते समय भी अक्सर यह खीझ होती है कि विचार typing से तेज़ चलते हैं, इसलिए उस हिस्से में भी मदद मिलती है
    • समय की बचत एक पहलू है, लेकिन यह repetitive strain injury या carpal tunnel syndrome से जूझ रहे लोगों के लिए भी उपयोगी हो सकता है
    • तेज़ typing का मुद्दा कुल समय घटाने से ज़्यादा विचारों के बीच delay घटाने का है
      typing एक manual काम है जो सोचने में बाधा डालता है, इसलिए typing में जाने और उससे बाहर आने में लगने वाला समय जितना घटेगा, उतनी जल्दी आप वापस सोचने पर लौट सकते हैं
    • यह जानने की उत्सुकता है कि touch typing की क्षमता भी असर डालती है या नहीं
  • मैंने अपने इस्तेमाल के लिए text expansion बनाने में काफ़ी समय लगाया
    यह उम्मीद से कहीं ज़्यादा कठिन था, और ऐसे aliases ढूँढना मुश्किल है जो बहुत बार गलत trigger न हों और फिर भी पर्याप्त value दें
    रोज़ कई भाषाओं में communicate करने से यह और जटिल हो गया, इसलिए अब मैंने aliases को application के हिसाब से अलग कर दिया है
    फिर भी misfires बचे हुए हैं, और कुल मिलाकर मैं इस निष्कर्ष के करीब हूँ कि delimiter की ज़रूरत होती है

    • Ikclaks magic sturdy keyboard layout पर दिलचस्प काम कर रहा है: https://github.com/Ikcelaks/keyboard_layouts/blob/main/magic...
    • aliases के आगे kk, zz, qq जैसे character combinations लगाता हूँ जो किसी word या variable name के पहले अक्षरों के रूप में आम तौर पर नहीं आते
      उदाहरण के लिए qqme मेरा email signature है
      अच्छा होगा अगर original post का tool README में मैंने जो देखा उससे लंबे phrases के लिए भी aliases suggest करे। सुना है कि MacOS के लिए TextExpander ऐसा करता है, लेकिन मैं Mac user नहीं हूँ
    • सही trade-off शायद यह हो सकता है कि सिर्फ़ सबसे common words के लिए abbreviations इस्तेमाल किए जाएँ, और बाकी को एक simple GUI popup में fuzzy search से खोजकर paste किया जाए
    • कई भाषाएँ इस्तेमाल करने पर उपलब्ध shortcuts शायद बहुत कम हो जाएँगे
      TODO में से एक यह भी है कि analyze किए गए real text corpus का उपयोग करके उन aliases की block list भी बनाई जाए जिनसे बचना चाहिए
  • निजी तौर पर कहूँ तो, iPhone से पहले के phones में इस्तेमाल होने वाली SMS-style abbreviations मुझे कभी पसंद नहीं थीं
    यह उन कारणों में से एक था कि बहुत ज़रूरी न हो तो मैं SMS या text messages शायद ही इस्तेमाल करता था
    iOS और macOS पर चलने वाले TextExpander के शुरुआती दिनों से ही मैं text expansion इस्तेमाल कर रहा हूँ, और iPhone keyboard कितना भी अच्छा हो, घर का पता, घर/office maps, work और personal information जैसी चीज़ों को बार-बार type करना असुविधाजनक था। TextExpander ने बहुत मदद की
    बाद में TextExpander subscription model पर चला गया तो मैंने alternatives ढूँढने शुरू किए, क्योंकि निजी तौर पर मुझे ऐसे tools के लिए subscription model ठीक नहीं लगा। Alfred के Powerpack में शामिल Snippets बेहतर alternative था
    macOS/iOS में built-in “Text Replacements” भी हैं, लेकिन Apple apps के अलावा जगहों पर वे अक्सर fail हो जाते हैं। यहाँ वाली चीज़ Apple के Text Replacement जैसी है, और मैं उस feature को रहने देता हूँ लेकिन बाकी Alfred से manage करता हूँ। सच कहूँ तो अगर मैं Alfred से पूरी तरह मुक्त हो सकूँ, तो शायद इस तरफ़ migrate कर सकता हूँ
    हालांकि मैं expansions के लिए delimiter इस्तेमाल करना चाहूँगा ताकि वे normal typing में बाधा न डालें। अभी मैं , को delimiter की तरह इस्तेमाल करता हूँ, क्योंकि English में comma के बाद हमेशा space आता है, और मेरे expansions तभी होते हैं जब बिना space के comma और short text type किया जाए। Touch typing करते समय comma key की position भी सुविधाजनक है
    भले ही मैं OS के Text Replacement में रहूँ, unintended situations में words के auto-expand होने से बचने के लिए शायद delimiter introduce करूँगा
    https://textexpander.com
    https://www.alfredapp.com

    • generate होने वाली Autokey settings में delimiter handling सही करने में मैंने काफ़ी समय लगाया
      सबसे बारीक exception handling .py है। आम तौर पर . delimiter है, लेकिन py से पहले इसे exception रखा ताकि Python filenames type करते समय यह बाधा न बने
  • वर्षों के autocomplete की वजह से मेरी दूसरी भाषा English proficiency पहले ही खराब हो गई है
    अक्सर ऐसा होता है कि word पता है लेकिन spelling याद नहीं रहती, इसलिए pronunciation भूल जाता हूँ, और लगता है कि ऐसे tools बची-खुची proficiency भी पूरी तरह खत्म कर देंगे

  • keywords याद रखने के बजाय पहले अक्षर लिखना काम नहीं करेगा क्या, ऐसा लगा
    कुछ हफ्ते पहले ChatGPT के साथ experiment किया था, लेकिन ऐसी functionality वाला कोई मौजूदा software नहीं दिखा
    programming में बहुत अच्छा नहीं हूं, लेकिन अच्छा होगा अगर कोई इसे बना दे: https://imgur.com/a/0o4zLwT

    • इसी से मिलते-जुलते concept का एक prototype बनाया था। आप मनमाने तरीके से छोटा लिखते हैं और ChatGPT हर sentence के बाद उसे correct कर देता है
      accuracy काफी ठीक है, लेकिन जब गलत निकलता है तो बहुत झुंझलाहट होती है
      पूरी तरह काम करे तब भी, असल में इस्तेमाल करने पर सामान्य typing की तुलना में cognitive load कहीं ज्यादा था
      बहुत focus करने पर abbreviations का इस्तेमाल करते हुए अपनी आम आरामदायक typing speed के आसपास पहुंच सकता था, लेकिन उससे आगे नहीं जा पाया, और आखिर में naturally वापस normal typing पर लौट आया
      हालांकि मैं तेज typing करता हूं और काफी लिखता हूं, इसलिए यह prototype करीब 30 साल से बहुत optimize हो चुकी मेरे दिमाग की process को मात देने की कोशिश कर रहा था। जो लोग पहले से fast typist नहीं हैं, उनके लिए शायद यह ज्यादा fit हो सकता है