1 Punkte von GN⁺ 22 시간 전 | 1 Kommentare | Auf WhatsApp teilen
  • Ein Bug im Medium-Webeditor, bei dem sich ausgerechnet das polnische große Ś nicht eingeben ließ, entstand durch das Zusammenspiel von Eingabegewohnheiten, dem PC-Importumfeld, Speicher-Shortcut-Gewohnheiten und der Art, wie Windows Right Alt verarbeitet
  • Im Polnischen wird das lateinische Alphabet um 9 diakritische Zeichen ergänzt; in frühen PC-Umgebungen wurde statt einer speziellen Tastatur die Kombination Alt+lateinischer Buchstabe verwendet, das sogenannte „programmer’s layout“, das de facto zum Standard wurde
  • Da Windows Right Alt intern wie Ctrl+Alt abbildet, erschien Right Alt+S, das zur Eingabe von Ś verwendet wird, aus Systemsicht wie Ctrl+Alt+S
  • Medium fing Ctrl+S ab und rief preventDefault() auf, um den Speicher-Dialog des Browsers zu blockieren, prüfte dabei aber nicht, ob Alt gedrückt war, und blockierte dadurch die Zeicheneingabe selbst
  • Die Korrektur war eine kleine Änderung, bei der zur Bedingung für das Abfangen von Ctrl+S !e.altKey hinzugefügt wurde; das zeigt, wie stark auf die 26 englischen Buchstaben zugeschnittene Computing-Gewohnheiten für Nutzer anderer Sprachen Ausnahmen und Reibungen erzeugen können

Das verschwundene Ś bei Medium

  • Ein Nutzer meldete, dass beim Schreiben eines polnischen Texts auf Medium zwar andere Buchstaben eingegeben werden konnten, aber ausgerechnet Ś nicht
  • Medium behandelte keine bestimmte Sprache gesondert, und bei 32 polnischen Buchstaben wirkte es zunächst seltsam, dass nur dieses eine Zeichen Probleme machte
  • Die Ursache war kein Defekt einer einzelnen Funktion, sondern das Ergebnis davon, dass sich Eingabemethoden und Verarbeitungsweisen des Betriebssystems über Jahrzehnte überlagert hatten

Polnisch und zusätzliche Zeichen

  • Polnisch ist nach Russisch die am zweithäufigsten gesprochene slawische Sprache und liegt vor Ukrainisch
  • Anders als Russisch und Ukrainisch basiert Polnisch auf dem englischen/lateinischen Alphabet, ergänzt aber einige Zeichen
  • Ursprünglich gab es in polnischen Wörtern kein Q, V oder X, sie wurden aber für Latein und Lehnwörter beibehalten
  • Stattdessen werden zusätzlich 9 diakritische Zeichen auf Basis lateinischer Buchstaben verwendet
  • Schreibmaschinen zu Beginn des 20. Jahrhunderts mussten diese zusätzlichen Zeichen aufnehmen; einige bekamen eigene Tasten, die übrigen mussten sich Tasten mit den Ziffern teilen
    • Großbuchstaben wurden teils „simuliert“, indem nach der Eingabe des lateinischen Buchstabens per Backspace zurückgesprungen und dann der Akzent darüber gesetzt wurde
    • Um Platz für zusätzliche Buchstaben zu schaffen, wurden teils Satzzeichen wie Semikolon und Klammern geopfert

Die PC-Umgebung im kommunistischen Polen und das programmer’s layout

  • Die frühe PC-Umgebung im Polen der 1980er-Jahre war durch geringes verfügbares Einkommen und das Verbot des kommerziellen Imports westlicher Computer geprägt
  • Computer aus dem Westen kamen oft mit den ursprünglichen Handbüchern, nicht übersetzter Software und US-Tastaturen ins Land
  • Länder wie Frankreich und Deutschland erhielten angepasste Tastaturen nach dem Muster ihrer Schreibmaschinen, Polen musste dagegen einen Weg finden, auf US-Tastaturen 9 zusätzliche Zeichen einzugeben
  • Da Ctrl bereits breit für Shortcuts genutzt wurde und Alt vergleichsweise selten, setzten sich Alt-Kombinationen de facto als Standard durch
    • 8 diakritische Zeichen wurden den entsprechenden lateinischen Buchstaben zugeordnet
    • Das verbleibende Zeichen wurde einer nahegelegenen Taste zugewiesen
  • Das bestehende Layout wurde „typist’s layout“, die neue Methode „programmer’s layout“ genannt
    • Vielleicht, weil frühe PC-Nutzer überwiegend Programmierer waren
    • Vielleicht auch, weil die in der Programmierung häufig benötigten Satzzeichen vollständig erhalten blieben
  • Das programmer’s layout war ergonomisch unpraktisch, weil bei nur einer linken Alt-Taste benachbarte Tasten mit derselben Hand gedrückt werden mussten, setzte sich aber durch, weil es ohne Hardware-Umbauten oder Aufkleber leicht verständlich war
  • Später erschienen spezielle typist’s keyboards, aber fast niemand wechselte, ähnlich wie sich auch das weniger ideale QWERTY weit verbreitet etablieren konnte

Die Ctrl+S-Gewohnheit und der Konflikt mit Webeditoren

  • Bevor automatisches Speichern verbreitet war, war die Gewohnheit, Dokumente selbst zu speichern, wichtig
  • In den 1980er- und 1990er-Jahren war das Speichern langsam, nutzte Medien wie Disketten Stück für Stück ab und band mitunter die CPU so stark, dass anderes Arbeiten schwierig wurde
  • Nutzer gewöhnten sich deshalb an, beim Schreiben jedes Mal beim kurzen Innehalten Command+S oder Ctrl+S zu drücken
    • Manche drückten es nach jedem Absatz
    • Andere nach jedem Satz, später sogar nach jeweils ein paar Wörtern
  • In webbasierten Editoren führte diese Gewohnheit dazu, dass der Browser den Dialog zum Speichern des aktuellen HTML der Webseite öffnete
  • Auch Medium erkannte deshalb früher in seinem Editorcode Ctrl+S oder Command+S, löste ein Speichern aus und verhinderte das Standardverhalten
if ((e.metaKey || e.ctrlKey) && e.keyCode === goog.events.KeyCodes.S) {
  this._editors.save()
  e.preventDefault()
}
  • Dieser Code führt das Speichern im Editor aus und blockiert den Browser-Speicherdialog, wenn auf dem Mac metaKey oder unter Windows/Linux ctrlKey zusammen mit S gedrückt wird
  • Das Problem war, dass die Eingabe des polnischen Ś in manchen Umgebungen nicht einfach wie Alt+S aussah

Wie Windows Right Alt verarbeitet

  • Windows 3.x und Windows 95 ermöglichten den schnellen Zugriff auf Menüpunkte und Dialogfeld-Steuerelemente mit Alt+unterstrichenem Buchstaben
  • In Polen wurde Alt aber bereits für die Eingabe diakritischer Zeichen genutzt, was mit Windows-Shortcuts kollidierte
  • Mit der Weiterentwicklung von Tastaturen kam rechts neben der Leertaste eine zweite Alt-Taste hinzu; dadurch konnte die linke Alt-Taste für Windows-Shortcuts und die rechte Alt-Taste für polnische Eingaben verwendet werden
  • Da die Right-Alt-Funktion aber auch auf älteren Tastaturen mit nur einer Alt-Taste funktionieren musste, bildete Microsoft Right Alt innerhalb von Windows auf die selten genutzte Kombination Ctrl+Alt gleichzeitig ab
  • Deshalb erscheint Right Alt+S, das für die Eingabe des polnischen Ś verwendet wird, aus Sicht des Systems wie Ctrl+Alt+S
  • Mediums Code zum Abfangen von Ctrl+S prüfte nicht, ob Alt ebenfalls gedrückt war, und blockierte dadurch die Eingabe von Ś so, als wäre sie ein Speicher-Shortcut

Die Korrektur: Ctrl+S nicht erkennen, wenn Alt gedrückt ist

  • Nachdem die Ursache verstanden war, war die Korrektur einfach
  • Statt Ctrl+S pauschal zu blockieren, wurde die Bedingung so geändert, dass nur dann abgefangen wird, wenn zwar Ctrl gedrückt ist, aber nicht Alt
if ((e.metaKey || (e.ctrlKey && !e.altKey)) && e.keyCode === goog.events.KeyCodes.S) {
  this._editors.save()
  e.preventDefault()
}
  • Nach der Änderung fällt die Eingabe von Right Alt+S nicht mehr unter die Bedingung zum Blockieren von Ctrl+S
  • Medium behob diesen Bug, und die betreffende Bedingung wurde später mit vielen Kommentaren versehen, damit Menschen sie verstehen konnten

Das größere Problem hinter einer kleinen Bedingung

  • In Polen brach der Kommunismus 1989 zusammen, und Computer können heute sowohl von Privatpersonen als auch von Unternehmen legal importiert werden
  • Windows- und Mac-Systeme, die heute in Polen gekauft werden, unterstützen Polnisch vollständig, und auch die Betriebssysteme sind lokalisiert
  • Trotzdem gibt es in den Systemeinstellungen weiterhin das programmer’s layout, und es ist von den beiden Layouts noch immer das am häufigsten verwendete
  • Dieser kleine Bug hängt mit der Realität zusammen, dass sich US-amerikanische Computing-Gewohnheiten rund um die 26 unakzentuierten Buchstaben des Englischen entwickelt haben
  • Polnisch musste sich kompromisshaft zwischen von QWERTY abgeleiteten Layouts bewegen, und Sprachen mit Schriftsystemen, die noch weiter vom Englischen entfernt sind, können unter noch ungünstigeren Bedingungen stehen

1 Kommentare

 
Meinungen auf Hacker News
  • Ich denke, dass es für Polen viel einfacher war, sich westlich zu orientieren, weil Polnisch das lateinische Alphabet verwendet und zusätzliche Lautwerte nur mit kleinen slawischen Varianten ausdrückt.
    Der durchschnittliche Pole ist seinen westlichen Nachbarn kulturell deutlich näher als ein Ukrainer oder Russe; vielleicht ist die Küche die einzige Ausnahme.

    • Kasachstan hat ebenfalls beschlossen, vom kyrillischen zum lateinischen Alphabet zu wechseln, um sich stärker an Europa als an Russland auszurichten: https://www.bbc.com/worklife/article/20180424-the-cost-of-ch...
      Ich frage mich, ob die Ukraine in ferner Zukunft denselben Weg gehen wird.
    • Die Übernahme des lateinischen Alphabets selbst war eine westlich orientierte Entscheidung, sich an den Königreichen des lateinischen Kulturkreises statt an Byzanz auszurichten, und hängt auch damit zusammen, dass man den Katholizismus statt der Orthodoxie annahm.
    • Grob zusammengefasst: So wie das Christentum im 10. Jahrhundert nach Polen kam, als Mieszko die böhmische Prinzessin Doubravka/Dobrawa heiratete, übernahm man auch die tschechische Schrift, also das lateinische Alphabet, die aus Jan Hus’ Bemühungen hervorging, das Tschechische zu ordnen.
      Gelehrte gehen davon aus, dass sich Polnisch etwa zur selben Zeit als eigene Sprache zu entwickeln begann, und bis ins 13. Jahrhundert konnte man sich mit den südlichen Nachbarn ohne größere Probleme verständigen.
      Im 15. und 16. Jahrhundert bildete sich die polnische Orthografie heraus, und Stanisław Zaborowski sowie Jan Kochanowski versuchten, Buchstaben einzuführen, um die damalige polnische Phonologie genauer abzubilden; das von ihnen vorgeschlagene Alphabet war allerdings ziemlich lang.
      Während der Teilungszeit gab es eine starke Russifizierung, die polnische Sprache und Kultur auslöschen sollte, sowie Versuche, das kyrillische Alphabet einzuführen; letztlich scheiterten sie jedoch, und die damalige Literatur behandelte häufig Patriotismus und Vaterlandsliebe.
      Durch die Sprachreform von 1936 näherte sich die Sprache der Form an, die wir heute kennen. In der kommunistischen Zeit wurde in der Amtssprache die zweite Person Plural eingeführt, ähnlich dem vykání im Tschechischen und Slowakischen, doch sie wirkte unnatürlich und war stark politisch gefärbt, sodass sie sich nicht lange hielt.
      Im Polnischen gibt es Dialekte, aber nach dem Zweiten Weltkrieg verwischten Migrationen die Unterschiede, und auch das Standardpolnisch verfestigte sich in dieser Zeit. Heute gibt es viele englische Lehnwörter, sodass etwa hater als hejter eingebürgert wird.
    • Auch der Umstand, katholisch zu sein, hilft.
    • Die polnische Küche ist der deutschen Küche sehr ähnlich.
      Diese Aussage wird viele Polen ziemlich wütend machen.
  • Das eigentliche Problem ist, dass Browser keine einfache Möglichkeit bereitstellen, Tastenkombinationen zu prüfen, und Entwickler sie auch nicht selbst bauen.
    Auf vielen Websites wird die beabsichtigte Tastenkombination auch dann ausgelöst, wenn zusätzliche Modifikatortasten wie Alt oder Shift gedrückt sind.
    Auch der hier gezeigte Code behebt unter Windows nur das größere Problem; alt+cmd+s bleibt weiterhin blockiert.
    Es bräuchte einen Vorschlag, dass Browser in keydown/up/press-Events eine Eigenschaft mit einem Tastenkombinationscode wie „CTRL+S“ oder „CTRL+ALT+S“ bereitstellen.
    Dann könnten Entwickler anhand dieser Eigenschaft verzweigen, statt Tastencodes und Modifikatortasten selbst zu prüfen.
    Webentwickler sollten so eine Eigenschaft auch in ihrem eigenen Code selbst erzeugen und vergleichen, statt Modifikatortasten manuell zu prüfen. Das würde Bugs wie im Originalbeitrag verhindern und wäre viel bequemer zu verwenden.

    • Dieser Bug entstand, weil ein Entwickler, der das Problem beheben wollte, dass beim Drücken von Control S durch den Nutzer der Speichern-Dialog erscheint, an grundlegendem und fehleranfälligem Verhalten herumgedreht hat.
      Stell dir vor, wie viel Schaden Entwickler anrichten könnten, wenn sie noch mehr Optionen bekämen, leichter einzugreifen.
      Wenn man Tasten abfangen muss, gibt es bereits Low-Level-APIs; dabei sollte man es belassen.
      HTML hat übrigens das accesskey-Attribut, mit dem man Tastenkürzel festlegen kann: https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/...
  • Der neue Copilot 365 macht genau das. Jedes Mal, wenn ich „Ć“ eingeben will, springt Copilot auf, und ich muss die App ständig schließen.

    • Jede einzelne Kleinigkeit dieser Art erzeugt neue Linux-Nutzer.
      Seit dem Umstieg habe ich kein einziges Mal zurückgeblickt.
      Geschrieben auf SteamOS.
    • Natürlich kennen die Idioten bei MSFT nicht einmal ihre eigenen APIs: https://devblogs.microsoft.com/oldnewthing/20040329-00/?p=40...
    • Mir ist dasselbe passiert, als ich in der Schule eine Prüfung schrieb. Ich wollte auf einer ungarischen Tastatur & eingeben, und das war natürlich ebenfalls altgr+c.
    • Erinnert ihr euch noch daran, dass alt+c früher statt „ć“ das ATI Catalyst Control Center gestartet hat?
    • Das Beste daran ist, dass es ohne Nachfrage automatisch installiert wird.
      Danke, Microsoft. Schön zu sehen, dass die Qualitätssicherung gut funktioniert.
  • Interessante Tatsache: Wenn man die kanonische Unicode-Dekompositionsnormalisierung anwendet, werden 8 der 9 polnischen Buchstaben (ż, ó, ć, ę, ś, ą, ź, ń) in Grundbuchstabe + kombinierendes diakritisches Zeichen zerlegt, aber ł bleibt unverändert.
    Deshalb kann man mit dem unicode61-remove_diacritics-Tokenizer von sqlite polnischen Text nicht für die Volltextsuche normalisieren.

    • Ich erinnere mich, dass ich das entdeckt habe, als ich Code für eine Bewerbungsaufgabe schrieb. Der Grund ist simpel: In mehreren Eingabesystemen wie ABC International auf dem Mac wird ł zwar über eine Zwei-Zeichen-Sequenz eingegeben, tatsächlich gibt es aber kein kombinierendes Zeichen, das dem Strich durch das l entspricht.
      Ich bin mir nicht sicher, aber sqlite remove_diacritics funktioniert vermutlich so, dass es wie meine eigene Implementierung erst nach NCD konvertiert und dann die kombinierenden Zeichen aus dem String entfernt.
      Ich würde erwarten, dass andere Spezialfälle, die nicht zerlegt werden, wie ħ oder ø, ähnlich funktionieren.
    • Würde ein polnischer Nutzer erwarten, dass bei einer Suche nach „ł“ auch „l“ gefunden wird?
  • Polish is the second most-used Slavic language, right after Russian and just before Ukrainian
    In Bezug auf Ukrainisch stimmt das nicht ganz. Es ist zwar die Amtssprache der Ukraine, aber in der Praxis sprechen nicht alle Ukrainer tatsächlich Ukrainisch.

    • Selbst wenn man die Uhr auf 2019 zurückdreht, gibt es genügend Menschen, die Ukrainisch verwenden.
      Lviv = 2,5 Mio.
      Vinnytsia = 1,5 Mio.
      Ivano-Frankivsk = 1,3 Mio.
      Khmelnytskyi = 1,2 Mio.
      Rivne = 1,1 Mio.
      Ternopil = 1,0 Mio.
      Volyn = 1,0 Mio.
      Chernivtsi = 0,8 Mio.
      Zakarpattia = 0,8 Mio. (Ungarnstämmige nicht mitgezählt)
      Damit kommt man allein auf 11,2 Millionen Westukrainer, bei denen Ukrainisch klar dominiert, und selbst wenn man den Rest des Landes völlig ignoriert, sind das mehr als die Zahl der Tschechischsprecher. Außerdem waren die übrigen Regionen auch nicht vollständig russischsprachig, und heute erst recht nicht.
    • Diese „Korrektur“ nennt keine andere slawische Sprache, die mehr Sprecher als Ukrainisch hätte und damit hinter Russisch und Polnisch auf Platz 3 läge; an der Rangfolge ändert sich also nichts.
  • Leider betrifft das nicht nur Medium, sondern auch mehrere Windows-Apps. In Active Presenter zum Beispiel stoppt die Bildschirmaufnahme, wenn man ein bestimmtes Zeichen eingibt, vermutlich Ó, wodurch es oft unmöglich wird, eine Szene aufzunehmen, in der man auf Polnisch tippt.
    Andere Apps scheinen ähnlich Kombinationen wie Alt + Ctrl + Buchstabe als Shortcuts zu belegen und damit irgendwie den Tastaturlayout-Treiber zu übergehen.

  • Selbst im Jahr 2026 kann ich plötzlich in Edge für Mac kein großes Ś mehr eingeben. Es fühlt sich an, als wäre man etwa 25 Jahre in die Vergangenheit zurückversetzt.

    • Dasselbe habe ich auch in Teams gesehen. Liegt es daran, dass beides MS-Apps sind?
  • nvidia overlay hat den Shortcut Alt+Z, der sowohl mit der linken als auch mit der rechten Alt-Taste funktioniert. Für polnische Nutzer ist das ziemlich nervig, weil sie kein „ż“ eingeben können, ohne das Overlay zu öffnen oder die Taste neu zu belegen.
    Nvidia, bitte behebt das.

  • Zusammengefasst ist es so:

    Statt Ctrl S blind und gierig abzufangen, hätte man Ctrl S nur dann abfangen müssen, wenn die Alt-Taste nicht gedrückt ist.
    Der Tastatur-Shortcut für das polnische S war Ctrl alt s, und beim Versuch, das Speichern zu verbessern, indem man Ctrl s abfing, wurde ctrl alt s gleich mit abgefangen.

    • Nein. Der Shortcut war alt+s, und genau das haben die Leute tatsächlich gedrückt.
      Unter Windows wurde bereits eine Alt-Kombination verwendet, also wurde daraus rechtes Alt+s; die rechte Alt-Taste wurde von Windows selbst zwar nicht genutzt, aber statt eines separaten rechten-Alt-Codes schrieb Windows diese Taste als ctrl+alt-Kombination um.
      Wenn man es zusammenfasst, sollte zumindest das wichtigste Detail stimmen. Die Leute haben nur Alt gedrückt, aber Windows machte daraus „jetzt wird ctrl+alt gedrückt“, sodass alt+s wie ctrl+s aussah und beim Abfangen und Unterdrücken des Events ein angehängtes Alt vorhanden war, nach dem niemand prüfte.