1 पॉइंट द्वारा GN⁺ 22 시간 전 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • Medium वेब editor में सिर्फ़ पोलिश uppercase Ś टाइप न हो पाने वाला bug input conventions, PC import environment, save shortcut की आदतों और Windows के Right Alt handling के एक साथ आने से हुआ
  • पोलिश भाषा Latin alphabet में 9 diacritics जोड़कर लिखी जाती है, और शुरुआती PC environment में dedicated keyboard के बजाय Alt+Latin letter combinations वाला “programmer’s layout” व्यावहारिक रूप से standard बन गया
  • Windows ने Right Alt को internally Ctrl+Alt की तरह map किया, जिससे Ś टाइप करने के लिए इस्तेमाल होने वाला Right Alt+S system के नज़रिए से Ctrl+Alt+S जैसा दिखने लगा
  • Medium ने browser save dialog को रोकने के लिए Ctrl+S intercept कर preventDefault() call किया, लेकिन Alt मौजूद है या नहीं यह check नहीं किया, इसलिए उसने character input itself को ही रोक दिया
  • Fix Ctrl+S block condition में !e.altKey जोड़ने जितना छोटा change था, और यह दिखाता है कि English के 26 letters पर केंद्रित computing conventions दूसरी languages के users के लिए exceptions और friction पैदा कर सकते हैं

Medium में गायब हुआ Ś

  • एक user ने report किया कि जब उसने Medium पर पोलिश में लिखना शुरू किया, तो बाकी letters input हो रहे थे लेकिन सिर्फ़ Ś input नहीं हो रहा था
  • Medium किसी particular language को special treatment नहीं देता था, और पोलिश के 32 characters में से सिर्फ़ यही एक character क्यों problem कर रहा है, यह शुरू में अजीब लगा
  • वजह किसी single feature की defect नहीं थी, बल्कि दशकों में बने input methods और operating system handling के overlapping का नतीजा थी

पोलिश भाषा और extra characters

  • पोलिश, Russian के बाद सबसे ज़्यादा इस्तेमाल होने वाली Slavic language है, और Ukrainian से आगे है
  • Russian और Ukrainian के विपरीत, पोलिश English/Latin alphabet पर आधारित है, लेकिन इसमें कुछ characters जोड़े गए हैं
  • मूल पोलिश words में Q, V, X नहीं होते, लेकिन Latin और loanwords के लिए इन्हें रखा गया है
  • इसके बजाय Latin characters पर आधारित 9 diacritics अतिरिक्त रूप से इस्तेमाल किए जाते हैं
  • 20वीं सदी की शुरुआत में typewriters को इन extra characters को support करना पड़ा, और कुछ characters को dedicated keys मिलीं, जबकि बाकी number keys के साथ share हुए
    • Uppercase letters को कभी-कभी Latin letter टाइप करने के बाद backspace से लौटकर accent ऊपर चढ़ाने के तरीके से “simulate” भी किया जाता था
    • Extra letters के लिए जगह बनाने के लिए semicolon और parentheses जैसे punctuation marks की कुर्बानी भी दी जाती थी

Communist Poland का PC environment और programmer’s layout

  • 1980 के दशक में Poland के शुरुआती personal computer environment पर disposable income की कमी और Western computers के commercial import पर ban जैसी पाबंदियां थीं
  • West से आए computers में अक्सर original manuals, untranslated software और US keyboard जस के तस होते थे
  • France और Germany जैसे देशों को typewriter layout reflect करने वाले customized keyboards मिले, लेकिन Poland को US keyboard पर 9 extra characters टाइप करने का तरीका ढूंढना पड़ा
  • Ctrl पहले से shortcuts के लिए widely used था और Alt relatively कम इस्तेमाल होता था, इसलिए Alt combinations practically standard बन गए
    • 8 diacritics corresponding Latin letters को assign किए गए
    • बचा हुआ एक nearby key को assign किया गया
  • Existing layout को “typist’s layout” और नए तरीके को “programmer’s layout” कहा गया
    • शायद इसलिए कि शुरुआती PC users ज़्यादातर programmers थे
    • या शायद इसलिए कि programming में अक्सर इस्तेमाल होने वाले punctuation marks वैसे ही preserve रहे
  • programmer’s layout में left Alt से nearby key को उसी हाथ से दबाना पड़ता था, इसलिए यह ergonomically uncomfortable था, लेकिन hardware modification या stickers के बिना समझना आसान था, इसलिए यह जम गया
  • बाद में dedicated typist’s keyboard आया, लेकिन लगभग किसी ने switch नहीं किया, और यह कम ideal QWERTY के व्यापक रूप से स्थापित हो जाने जैसी ही कहानी दिखाता है

Ctrl+S की आदत और web editor का टकराव

  • Autosave आम होने से पहले documents को manually save करने की आदत important थी
  • 1980–1990 के दशक में save operations धीमे होते थे, disk जैसे media को थोड़ा-थोड़ा घिसते थे, और कभी-कभी CPU को strongly occupy कर लेते थे, जिससे दूसरे काम करना मुश्किल हो जाता था
  • Users ने लिखते समय हर बार सांस लेने जैसा pause आने पर Command+S या Ctrl+S दबाने की आदत डाल ली
    • कुछ लोग हर paragraph के बाद दबाते थे
    • कुछ लोग हर sentence के बाद, और बाद में हर कुछ words के बाद दबाते थे
  • Web-based editors में यह आदत browser का current webpage HTML save dialog खोल देने की problem बन गई
  • Medium ने भी पहले इसे रोकने के लिए editor code में Ctrl+S या Command+S detect करके save call किया और default action रोक दिया
if ((e.metaKey || e.ctrlKey) && e.keyCode === goog.events.KeyCodes.S) {
  this._editors.save()
  e.preventDefault()
}
  • यह code Mac के metaKey या Windows/Linux के ctrlKey के साथ S दबने पर editor save execute करता है और browser save dialog रोकता है
  • Problem यह थी कि कुछ environments में पोलिश Ś input simple Alt+S जैसा नहीं दिखता था

Windows का Right Alt handling

  • Windows 3.x और Windows 95 ने menu items और dialog controls तक Alt+underlined character से जल्दी access देना संभव किया
  • Poland में Alt पहले से diacritics input के लिए इस्तेमाल हो रहा था, इसलिए Windows shortcuts से conflict हुआ
  • Keyboard evolve होने पर spacebar के right side में secondary Alt key आया, जिससे left Alt को Windows shortcuts और right Alt को पोलिश input के लिए इस्तेमाल करना संभव हुआ
  • लेकिन Right Alt functionality उन पुराने keyboards पर भी संभव होनी थी जिनमें सिर्फ़ एक Alt key था, इसलिए Microsoft ने Windows के अंदर Right Alt को शायद ही इस्तेमाल होने वाले Ctrl+Alt simultaneous input combination के रूप में map किया
  • इस decision की वजह से पोलिश Ś input के लिए इस्तेमाल होने वाला Right Alt+S system के नज़रिए से Ctrl+Alt+S जैसा दिखने लगा
  • Medium के Ctrl+S blocking code ने यह check नहीं किया कि Alt साथ में दबा है या नहीं, और नतीजतन Ś input को save shortcut blocking की तरह intercept कर दिया

Fix: Alt दबा हो तो इसे Ctrl+S न मानना

  • Cause identify होने के बाद fix आसान था
  • Ctrl+S को unconditionally block करने के बजाय condition बदली गई ताकि Ctrl दबा हो तब भी केवल Alt न दबा हो तभी block हो
if ((e.metaKey || (e.ctrlKey && !e.altKey)) && e.keyCode === goog.events.KeyCodes.S) {
  this._editors.save()
  e.preventDefault()
}
  • Change के बाद Right Alt+S input Ctrl+S save-block condition में नहीं फंसता
  • Medium ने इस bug को fix किया, और उस condition में बाद में इंसानों के समझने के लिए कई comments जोड़े गए

छोटे condition के पीछे बड़ी problem

  • Poland में 1989 में communism गिर गया, और अब computers individuals और companies दोनों कानूनी रूप से import कर सकते हैं
  • आज Poland में खरीदे जाने वाले Windows और Mac पोलिश को पूरी तरह support करते हैं और operating systems भी localized हैं
  • फिर भी system settings में programmer’s layout अभी भी मौजूद है, और दो layouts में सबसे commonly used option बना हुआ है
  • यह छोटा bug इस reality से जुड़ता है कि American computing conventions English के 26 non-accented letters के इर्द-गिर्द develop हुए हैं
  • पोलिश को QWERTY-derived layouts के बीच घूमते हुए compromise करना पड़ा, और English से और ज़्यादा दूर writing systems इस्तेमाल करने वाली languages और भी disadvantageous conditions में हो सकती हैं

1 टिप्पणियां

 
Hacker News राय
  • मेरा मानना है कि पोलिश भाषा के Latin script इस्तेमाल करने और अतिरिक्त ध्वनियों को सिर्फ छोटे Slavic बदलावों से दिखाने की वजह से Poland के लिए पश्चिम की ओर झुकाव के साथ तालमेल बैठाना कहीं आसान हुआ
    औसत Polish व्यक्ति सांस्कृतिक रूप से Ukrainians या Russians की तुलना में अपने पश्चिमी पड़ोसियों के बहुत ज्यादा करीब है, शायद केवल खाना इसका अपवाद हो सकता है

    • Kazakhstan ने भी Russia की बजाय Europe के साथ ज्यादा तालमेल बिठाने के लिए Cyrillic script से Latin script में बदलने का फैसला किया https://www.bbc.com/worklife/article/20180424-the-cost-of-ch...
      सोचता हूँ कि दूर भविष्य में Ukraine भी यही रास्ता अपनाएगा या नहीं
    • Latin script अपनाना अपने-आप में Byzantine दुनिया नहीं, बल्कि Latin दुनिया के राज्यों के साथ तालमेल की ओर एक पश्चिम-उन्मुख चुनाव था, और यह Orthodox Church की बजाय Catholicism अपनाने से भी जुड़ा था
    • मोटे तौर पर कहें तो, जैसे 10वीं सदी में Mieszko ने Czech राजकुमारी Doubravka/Dobrawa से शादी की और ईसाई धर्म Poland में आया, वैसे ही Jan Hus के Czech भाषा को व्यवस्थित करने के प्रयासों से निकली Czech orthography, यानी Latin script भी अपनाई गई
      विद्वानों का मानना है कि लगभग उसी समय Polish एक अलग भाषा के रूप में विकसित होना शुरू हुई, और 13वीं सदी तक दक्षिणी पड़ोसियों के साथ बिना बड़ी दिक्कत के बातचीत हो सकती थी
      15वीं–16वीं सदी में Polish orthography बनी, और Stanisław Zaborowski तथा Jan Kochanowski ने उस समय की Polish phonology को अधिक सटीक रूप से दिखाने के लिए अक्षर लाने की कोशिश की, लेकिन उनका प्रस्तावित alphabet काफी लंबा था
      विभाजन और कब्जे के दौर में Polish भाषा और संस्कृति को मिटाने के लिए मजबूत Russification हुई और Cyrillic script लागू करने की कोशिशें भी हुईं, लेकिन अंततः वे असफल रहीं; उस समय के साहित्य में देशभक्ति और मातृभूमि-प्रेम पर आधारित रचनाएँ बहुत थीं
      1936 के भाषा सुधार के बाद यह आज हमें ज्ञात रूप के करीब पहुँची, और Communist दौर में Czech और Slovak के vykání की तरह औपचारिक भाषा में second-person plural लाया गया, लेकिन वह अप्राकृतिक और बहुत राजनीतिक रंग वाला था, इसलिए ज्यादा समय तक नहीं चला
      Polish में बोलियाँ हैं, लेकिन Second World War के बाद migration के कारण अंतर धुंधले हो गए और उसी समय Standard Polish भी स्थिर हुई; आज English loanwords इतने बढ़ गए हैं कि hater का hejter की तरह स्वाभाविकीकरण भी हो जाता है
    • Catholic होना भी मददगार है
    • Polish cuisine German cuisine से बहुत मिलती-जुलती है
      यह बात बहुत से Polish लोगों को काफी नाराज़ कर देगी
  • असली समस्या यह है कि browser key combination जाँचने का कोई सरल तरीका expose नहीं करता, और developers भी इसे खुद नहीं बनाते
    कई sites पर intended key combination में alt या shift जैसे अतिरिक्त modifier keys जुड़ जाने पर भी वही action चल जाता है
    यहाँ दिया गया code भी Windows पर सिर्फ बड़ी समस्या को ठीक करता है, alt+cmd+s अब भी block होता है
    browser को keydown/up/press events में "CTRL+S", "CTRL+ALT+S" जैसे key combination code वाला property expose करने का proposal चाहिए
    तब developer key code और modifier keys को खुद check करने के बजाय उसी property के आधार पर branching कर सकेगा
    Web developers भी अपने code में ऐसा property खुद बनाकर modifier keys को अलग से जाँचने के बजाय comparison करें तो अच्छा होगा। इससे original post जैसे bugs भी रुकेंगे और इस्तेमाल भी बहुत आसान होगा

    • यह bug तब पैदा हुआ जब user के Control S दबाने पर save dialog खुलने वाली समस्या ठीक करने की कोशिश कर रहे developer ने बुनियादी और bug-prone behavior में हाथ डाल दिया
      सोचिए, अगर developers के पास intervene करने के और भी आसान विकल्प होंगे तो वे कितना बड़ा नुकसान कर सकते हैं
      अगर keys intercept करनी ही हैं, तो low-level API पहले से है, वहीं तक रखना बेहतर है
      दूसरी ओर HTML में shortcut keys तय करने के लिए accesskey attribute है: https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/...
  • नया Copilot 365 भी बिल्कुल ऐसा ही है। हर बार जब मैं "Ć" input करने की कोशिश करता हूँ, Copilot पॉप अप हो जाता है और मुझे app बार-बार बंद करनी पड़ती है

    • ऐसी छोटी-छोटी चीजें मिलकर नए Linux users बनाती हैं
      switch करने के बाद मैंने कभी पीछे मुड़कर नहीं देखा
      SteamOS से लिखा गया
    • MSFT के मूर्खों को अपनी ही API न पता होना स्वाभाविक है https://devblogs.microsoft.com/oldnewthing/20040329-00/?p=40...
    • school में exam देते समय मेरे साथ भी यही हुआ था। Hungarian keyboard पर & input करने की कोशिश कर रहा था, और वह भी जाहिर तौर पर altgr+c था
    • याद है, पहले alt+c "ć" की जगह ATI Catalyst Control Center launch कर देता था?
    • सबसे अच्छी बात यह है कि यह बिना पूछे अपने-आप install हो जाता है
      धन्यवाद Microsoft। quality assurance को इतनी अच्छी तरह चलते देखकर अच्छा लगा
  • मजेदार तथ्य: Unicode canonical decomposition normalization लागू करने पर Polish के 9 अक्षरों में से 8 (ż, ó, ć, ę, ś, ą, ź, ń) base letter + combining diacritic में decompose हो जाते हैं, लेकिन ł वैसा ही रहता है
    इसलिए sqlite के unicode61 remove_diacritics tokenizer से Polish text को full-text search के लिए normalize नहीं किया जा सकता

    • मुझे याद है कि interview assignment के लिए code लिखते हुए मैंने यह खोजा था। वजह सरल है: Mac पर इस्तेमाल होने वाले ABC International जैसे कई input systems में ł input दो-character sequence से होता है, फिर भी असल में l को काटती हुई line के बराबर कोई combining character मौजूद नहीं है
      पक्का नहीं, लेकिन sqlite का remove_diacritics शायद वैसा ही काम करता है जैसा मैंने खुद implement किया था: NCD में convert करना और फिर string से combining characters हटाना
      मुझे उम्मीद है कि ħ या ø जैसे अन्य special cases जो decompose नहीं होते, वे भी इसी तरह behave करेंगे
    • क्या Polish user “ł” से search करते समय “l” भी साथ में आने की उम्मीद करेगा?
  • Polish is the second most-used Slavic language, right after Russian and just before Ukrainian
    यूक्रेनी के बारे में यह पूरी तरह सही बात नहीं है। यह यूक्रेन की आधिकारिक भाषा तो है, लेकिन वास्तविकता में यह कहना होगा कि सभी यूक्रेनियन सचमुच यूक्रेनी नहीं बोलते

    • 2019 तक पीछे जाएँ, तब भी यूक्रेनी बोलने वाले काफी ज़्यादा थे
      Lviv = 25 लाख
      Vinnytsia = 15 लाख
      Ivano-Frankivsk = 13 लाख
      Khmelnytskyi = 12 लाख
      Rivne = 11 लाख
      Ternopil = 10 लाख
      Volyn = 10 लाख
      Chernivtsi = 8 लाख
      Zakarpattia = 8 लाख (हंगेरियन मूल के लोगों को छोड़कर)
      इससे यूक्रेनी-भाषी पश्चिमी यूक्रेनियन 1.12 करोड़ हो जाते हैं, और बाकी इलाकों को पूरी तरह नज़रअंदाज़ कर दें तो भी यह Czech बोलने वालों से ज़्यादा है। ऊपर से बाकी इलाके भी पूरी तरह Russian-speaking नहीं थे, और अब तो बिल्कुल भी नहीं हैं
    • उस “adjustment” से ranking में कोई बदलाव नहीं आता, क्योंकि उसने Ukrainian से ज़्यादा बोलने वालों वाली कोई दूसरी Slavic language नहीं बताई जो Russian और Polish के बाद तीसरे नंबर पर आ सके
  • अफसोस, सिर्फ Medium ही नहीं, कई Windows apps में भी यही हाल है। उदाहरण के लिए Active Presenter में एक अक्षर, शायद Ó, टाइप करते ही screen recording रुक जाती है, इसलिए Polish में typing करते हुए scene record कर पाना अक्सर नामुमकिन हो जाता है
    लगता है दूसरे apps भी Alt + Ctrl + letter combinations को shortcuts के तौर पर assign करके किसी तरह keyboard layout driver को override कर देते हैं

  • 2026 में भी अचानक Mac के लिए Edge में uppercase Ś टाइप नहीं किया जा सकता। ऐसा लगता है जैसे 25 साल पीछे लौट गए हों

    • मैंने भी Teams में यही देखा। क्या इसलिए कि दोनों MS apps हैं?
  • nvidia overlay में Alt+Z shortcut है, और वह left Alt और right Alt दोनों पर काम करता है, इसलिए Polish users “ż” टाइप नहीं कर सकते जब तक वे overlay न खोलें या key remap न करें; यह काफी परेशान करने वाला है
    Nvidia, प्लीज़ इसे ठीक करो

  • सारांश यह है:

    Ctrl S को अंधाधुंध लालच में block करने के बजाय, सिर्फ तब Ctrl S को block करना था जब Alt key दबा हुआ न हो
    Polish S का keyboard shortcut Ctrl alt s था, और save action सुधारने के लिए Ctrl s block करते समय ctrl alt s भी साथ में block कर दिया गया

    • नहीं। shortcut alt+s था, और लोगों ने असल में वही दबाया था
      Windows में पहले से Alt combinations इस्तेमाल हो रहे थे, इसलिए यह right Alt+s बन गया, और right Alt को Windows खुद इस्तेमाल नहीं करता था, लेकिन अलग right Alt code की जगह Windows ने उस key को ctrl+alt combination के रूप में फिर से लिख दिया
      अगर summarize करना है तो कम-से-कम सबसे अहम detail तो सही रखनी चाहिए। लोगों ने सिर्फ Alt दबाया था, लेकिन Windows ने उसे “अब ctrl+alt दब रहा है” में बदल दिया, जिससे alt+s, ctrl+s जैसा दिखने लगा और event को intercept करके खत्म करते समय उससे जुड़ा Alt कोई check ही नहीं करता था