1 pontos por GN⁺ 22 시간 전 | 1 comentários | Compartilhar no WhatsApp
  • O bug no editor web do Medium, em que apenas a letra maiúscula polonesa Ś não podia ser digitada, surgiu da sobreposição entre hábitos de entrada, o contexto de importação de PCs, costumes de atalho para salvar e a forma como o Windows trata o Right Alt
  • O polonês usa o alfabeto latino com 9 letras diacríticas adicionais, e, nos primeiros ambientes de PC, em vez de um teclado dedicado, a combinação Alt+letra latina no “programmer’s layout” acabou se tornando o padrão de fato
  • Como o Windows mapeia internamente o Right Alt como Ctrl+Alt, o Right Alt+S usado para digitar Ś parecia, do ponto de vista do sistema, um Ctrl+Alt+S
  • O Medium interceptava Ctrl+S para bloquear a caixa de diálogo de salvar do navegador e chamava preventDefault(), mas, como não verificava a presença de Alt, acabava bloqueando a própria entrada do caractere
  • A correção foi uma pequena mudança, adicionando !e.altKey à condição que bloqueava Ctrl+S, mostrando como convenções de computação centradas nas 26 letras do inglês podem criar exceções e atritos para usuários de outros idiomas

O Ś que sumiu no Medium

  • Um usuário relatou que, ao começar a escrever em polonês no Medium, conseguia digitar as outras letras, mas não a Ś
  • O Medium não tratava nenhum idioma de forma especial e, entre as 32 letras do polonês, parecia estranho que justamente essa única letra causasse problema
  • A causa não era uma falha de uma única função, mas o resultado da sobreposição de métodos de entrada e formas de tratamento do sistema operacional ao longo de décadas

O polonês e as letras adicionais

  • O polonês é a língua eslava mais falada depois do russo, à frente do ucraniano
  • Ao contrário do russo e do ucraniano, o polonês se baseia no alfabeto inglês/latino, mas adiciona algumas letras
  • As palavras originalmente polonesas não têm Q, V e X, mas essas letras são mantidas por causa do latim e de empréstimos linguísticos
  • Em vez disso, o idioma usa 9 letras diacríticas adicionais baseadas em letras latinas
  • No início do século XX, as máquinas de escrever precisaram acomodar essas letras extras; algumas ganharam teclas próprias, enquanto outras passaram a compartilhar espaço com as teclas numéricas
    • Às vezes, as maiúsculas eram “simuladas” digitando primeiro a letra latina, voltando com backspace e então aplicando o acento por cima
    • Para abrir espaço para essas letras extras, sinais de pontuação como ponto e vírgula e parênteses às vezes eram sacrificados

O ambiente de PCs na Polônia comunista e o programmer’s layout

  • Nos anos 1980, o ambiente inicial de computadores pessoais na Polônia enfrentava restrições como baixa renda disponível e a proibição da importação comercial de computadores ocidentais
  • Os computadores vindos do Ocidente muitas vezes chegavam com os manuais originais, software não traduzido e teclados no padrão americano
  • Países como França e Alemanha recebiam teclados adaptados aos layouts das máquinas de escrever, mas a Polônia precisou encontrar uma forma de digitar 9 letras adicionais em um teclado americano
  • Como o Ctrl já era amplamente usado em atalhos e o Alt era relativamente menos usado, as combinações com Alt acabaram se firmando como padrão de fato
    • 8 letras diacríticas foram atribuídas às letras latinas correspondentes
    • A letra restante foi atribuída a uma tecla próxima
  • O layout antigo era chamado de “typist’s layout”, e o novo de “programmer’s layout”
    • Talvez porque os primeiros usuários de PC fossem majoritariamente programadores
    • Ou talvez porque ele preservasse os sinais de pontuação usados com frequência em programação
  • O programmer’s layout era ergonomicamente desconfortável, porque exigia pressionar o Alt esquerdo e uma tecla próxima com a mesma mão, mas se consolidou por ser fácil de entender sem modificações de hardware nem adesivos
  • Mais tarde surgiram teclados dedicados no estilo typist’s, mas quase ninguém migrou, num processo parecido com a ampla adoção do QWERTY, mesmo sendo menos ideal

O hábito do Ctrl+S e o conflito com editores web

  • Antes de o salvamento automático se tornar comum, o hábito de salvar manualmente documentos era importante
  • Nas décadas de 1980 e 1990, salvar era lento, desgastava aos poucos mídias como discos e às vezes ocupava bastante a CPU, dificultando fazer outras coisas ao mesmo tempo
  • Os usuários desenvolveram o hábito de pressionar Command+S ou Ctrl+S sempre que faziam uma pausa ao escrever
    • Alguns apertavam a cada parágrafo
    • Outros a cada frase e, depois, a cada poucas palavras
  • Em editores baseados na web, esse hábito levava à abertura da caixa de diálogo do navegador para salvar o HTML da página atual
  • O Medium também passou, no passado, a bloquear isso detectando Ctrl+S ou Command+S no código do editor, chamando o salvamento e impedindo a ação padrão
if ((e.metaKey || e.ctrlKey) && e.keyCode === goog.events.KeyCodes.S) {
  this._editors.save()
  e.preventDefault()
}
  • Esse código executava o salvamento do editor e bloqueava a caixa de diálogo de salvar do navegador quando metaKey no Mac ou ctrlKey no Windows/Linux eram pressionados junto com S
  • O problema era que, em alguns ambientes, a digitação do Ś polonês não parecia ser apenas Alt+S

A forma como o Windows trata o Right Alt

  • O Windows 3.x e o Windows 95 permitiam acessar rapidamente itens de menu e controles de caixas de diálogo com Alt+letra sublinhada
  • Na Polônia, o Alt já era usado para digitar letras diacríticas, então isso entrava em conflito com os atalhos do Windows
  • Com a evolução dos teclados, surgiu uma tecla Alt adicional à direita da barra de espaço, permitindo usar o Alt esquerdo para atalhos do Windows e o Alt direito para entrada em polonês
  • Mas, como a funcionalidade do Right Alt também precisava funcionar em teclados antigos com apenas uma tecla Alt, a Microsoft mapeou internamente o Right Alt no Windows como a combinação pouco usada de Ctrl+Alt
  • Por causa dessa decisão, o Right Alt+S usado para digitar Ś passou a parecer, do ponto de vista do sistema, um Ctrl+Alt+S
  • O código do Medium que bloqueava Ctrl+S não verificava se Alt também estava pressionado e, como resultado, interceptava a digitação de Ś como se fosse um bloqueio do atalho de salvar

A correção: não tratar como Ctrl+S quando Alt estiver pressionado

  • Depois que a causa foi identificada, a correção foi simples
  • Em vez de bloquear Ctrl+S incondicionalmente, a condição passou a bloquear apenas quando Ctrl estivesse pressionado e Alt não estivesse
if ((e.metaKey || (e.ctrlKey && !e.altKey)) && e.keyCode === goog.events.KeyCodes.S) {
  this._editors.save()
  e.preventDefault()
}
  • Após a mudança, a entrada com Right Alt+S não atendia mais à condição que bloqueava o Ctrl+S
  • O Medium corrigiu esse bug e, depois disso, essa condição passou a receber muitos comentários para que outras pessoas pudessem entendê-la

Um problema maior por trás de uma pequena condição

  • Na Polônia, o comunismo caiu em 1989, e agora computadores podem ser importados legalmente tanto por pessoas quanto por empresas
  • Hoje, Windows e Mac comprados na Polônia oferecem suporte completo ao polonês e os sistemas operacionais também são localizados
  • Ainda assim, o programmer’s layout continua presente nas configurações do sistema e segue como o mais usado entre os dois layouts
  • Esse pequeno bug se conecta à realidade de que as convenções da computação no estilo americano se desenvolveram em torno das 26 letras sem acento do inglês
  • O polonês precisou negociar compromissos entre layouts derivados do QWERTY, e idiomas que usam sistemas de escrita mais distantes do inglês podem acabar em condições ainda mais desfavoráveis

1 comentários

 
Opiniões do Hacker News
  • Acho que o fato de o polonês usar o alfabeto latino e representar apenas os fonemas adicionais com pequenas variações eslavas tornou muito mais fácil para a Polônia se alinhar com uma orientação ocidental.
    O polonês médio é culturalmente muito mais próximo dos vizinhos ocidentais do que um ucraniano ou russo, talvez com a culinária como única exceção.

    • O Cazaquistão também decidiu migrar do alfabeto cirílico para o latino para se alinhar mais com a Europa do que com a Rússia https://www.bbc.com/worklife/article/20180424-the-cost-of-ch...
      Fico curioso se, em um futuro distante, a Ucrânia seguirá o mesmo caminho.
    • A própria adoção do alfabeto latino foi uma escolha de orientação ocidental para se alinhar com os reinos do mundo latino, e não do bizantino, e também está ligada à adoção do catolicismo em vez da Igreja Ortodoxa.
    • Resumindo de forma aproximada: assim como o cristianismo chegou à Polônia no século X, quando Mieszko se casou com a princesa tcheca Doubravka/Dobrawa, também foi adotado o alfabeto tcheco, isto é, o latino, que surgiu dos esforços de Jan Hus para sistematizar o tcheco.
      Os estudiosos consideram que, em período parecido, o polonês começou a se desenvolver como uma língua separada, e até o século XIII era possível se comunicar sem grandes problemas com os vizinhos do sul.
      Nos séculos XV e XVI, a ortografia polonesa tomou forma, e Stanisław Zaborowski e Jan Kochanowski tentaram introduzir letras para refletir com mais precisão a fonologia do polonês da época, mas o alfabeto que propuseram era bem longo.
      Durante o período das partições, houve uma forte russificação para eliminar a língua e a cultura polonesas, e também tentativas de introduzir o alfabeto cirílico, mas elas acabaram fracassando; a literatura da época tinha muitas obras sobre patriotismo e amor à pátria.
      Com a reforma linguística de 1936, o idioma chegou a uma forma próxima da que conhecemos hoje; no período comunista, foi introduzido no idioma oficial o plural de segunda pessoa, como o vykání do tcheco e do eslovaco, mas ele soava artificial e tinha forte conotação política, por isso não durou muito.
      O polonês tem dialetos, mas, após a Segunda Guerra Mundial, as migrações diluíram as diferenças, e o polonês padrão também se consolidou nessa época; hoje há muitos empréstimos do inglês, a ponto de hater ser naturalizado como hejter.
    • O fato de ser católico também ajuda.
    • A culinária polonesa é muito parecida com a culinária alemã.
      Dizer isso vai deixar muitos poloneses bem irritados.
  • O verdadeiro problema é que os navegadores não expõem uma forma simples de verificar combinações de teclas, e os desenvolvedores também não a implementam por conta própria.
    Em muitos sites, a combinação de teclas pretendida também é executada quando vem acompanhada de modificadores adicionais como alt ou shift.
    O código citado aqui só corrige o problema maior no Windows; alt+cmd+s continua bloqueado.
    Seria preciso uma proposta para que o navegador exponha, nos eventos keydown/up/press, uma propriedade contendo códigos de combinação como "CTRL+S" ou "CTRL+ALT+S".
    Assim, o desenvolvedor poderia ramificar com base nessa propriedade em vez de verificar manualmente o código da tecla e os modificadores.
    Também seria bom que desenvolvedores web criassem uma propriedade dessas dentro do próprio código e comparassem com ela, em vez de inspecionar os modificadores manualmente. Isso evitaria bugs como o do post original e seria muito mais fácil de usar.

    • Esse bug surgiu porque um desenvolvedor que tentava corrigir o problema de o usuário apertar Control S e abrir a caixa de diálogo de salvar mexeu em um comportamento fundamental e propenso a bugs.
      Imagine o tamanho do estrago se os desenvolvedores tiverem ainda mais opções para intervir com facilidade.
      Se for preciso interceptar teclas, já existe uma API de baixo nível, e é melhor parar por aí.
      Por outro lado, o HTML tem o atributo accesskey para definir teclas de atalho: https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/...
  • O novo Copilot 365 é exatamente assim também. Toda vez que tento digitar "Ć", o Copilot aparece e tenho que ficar fechando o app.

    • Cada uma dessas pequenas coisas cria um novo usuário de Linux.
      Depois que migrei, nunca mais olhei para trás.
      Escrito no SteamOS.
    • É claro que os idiotas da MSFT não conhecem nem a própria API https://devblogs.microsoft.com/oldnewthing/20040329-00/?p=40...
    • Passei pela mesma coisa durante uma prova na escola. Eu estava tentando digitar & em um teclado húngaro, e claro que isso também era altgr+c.
    • Lembram quando alt+c abria o ATI Catalyst Control Center em vez de digitar "ć"?
    • O melhor é que ele é instalado automaticamente sem perguntar.
      Obrigado, Microsoft. É bom ver que a garantia de qualidade está funcionando bem.
  • Curiosidade: ao aplicar a normalização por decomposição canônica do Unicode, 8 das 9 letras polonesas (ż, ó, ć, ę, ś, ą, ź, ń) se decompõem em letra base + sinal diacrítico combinante, mas ł permanece como está.
    Por isso, com o tokenizer unicode61 remove_diacritics do sqlite, não dá para normalizar texto em polonês para busca de texto completo.

    • Lembro de ter descoberto isso enquanto escrevia código para uma tarefa de entrevista. O motivo é simples: em vários sistemas de entrada, como o ABC International no Mac, mesmo que a entrada de ł seja feita com uma sequência de duas letras, na prática não existe um caractere combinante correspondente ao traço que atravessa o l.
      Não tenho certeza, mas imagino que o remove_diacritics do sqlite funcione como a implementação que eu mesmo fiz: converte para NCD e depois remove da string os caracteres combinantes.
      Espero que outros casos especiais que não se decompõem, como ħ ou ø, se comportem de forma parecida.
    • Será que um usuário de polonês, ao buscar por “ł”, espera que “l” também apareça?
  • Polish is the second most-used Slavic language, right after Russian and just before Ukrainian
    Quanto ao ucraniano, isso não está exatamente correto. Embora seja o idioma oficial da Ucrânia, na prática nem todos os ucranianos realmente falam ucraniano.

    • Mesmo voltando o relógio para 2019, havia gente suficiente falando ucraniano.
      Lviv = 2,5 milhões
      Vinnytsia = 1,5 milhão
      Ivano-Frankivsk = 1,3 milhão
      Khmelnytskyi = 1,2 milhão
      Rivne = 1,1 milhão
      Ternopil = 1 milhão
      Volyn = 1 milhão
      Chernivtsi = 800 mil
      Zakarpattia = 800 mil (excluindo os húngaros étnicos)
      Com isso, são 11,2 milhões de habitantes da Ucrânia Ocidental em que o uso do ucraniano é predominante, e mesmo ignorando completamente o restante das regiões, já é mais do que o número de falantes de tcheco. Além disso, o restante das regiões também não era totalmente russofono, e hoje é menos ainda.
    • Esse “ajuste” não apresentou outro idioma eslavo que tenha mais falantes que o ucraniano e que ficaria em 3º lugar, atrás do russo e do polonês, então não há nenhuma mudança no ranking.
  • Infelizmente, não é só o Medium; vários apps do Windows também são assim. Por exemplo, no Active Presenter, ao digitar uma única letra, talvez Ó, a gravação da tela para, então muitas vezes fica impossível gravar cenas de digitação em polonês.
    Outros apps parecem fazer algo parecido, atribuindo combinações como Alt + Ctrl + letra a atalhos e de alguma forma sobrepondo o driver de layout do teclado.

  • Mesmo em 2026, de repente ficou impossível digitar Ś maiúsculo no Edge para Mac. Parece que voltamos uns 25 anos no tempo.

    • Eu também vi a mesma coisa no Teams. Será porque ambos são apps da MS?
  • O nvidia overlay tem um atalho Alt+Z que funciona tanto com o Alt esquerdo quanto com o Alt direito, então, para usuários de polonês, é bem irritante: eles não conseguem digitar “ż” a menos que abram o overlay ou remapeiem a tecla.
    Nvidia, por favor, corrija isso.

  • Em resumo, é isto:

    Em vez de bloquear Ctrl S de forma gananciosa e indiscriminada, bastava bloquear Ctrl S apenas quando a tecla Alt não estivesse pressionada.
    O atalho de teclado para o S polonês era Ctrl alt s e, ao bloquear Ctrl s para melhorar a ação de salvar, acabaram bloqueando também ctrl alt s.

    • Não. O atalho era alt+s, e foi isso que as pessoas realmente pressionaram.
      No Windows, como combinações com Alt já estavam em uso, virou Alt direito+s; e embora o Alt direito não fosse usado pelo próprio Windows, em vez de um código separado para o Alt direito, o Windows reescreveu essa tecla como uma combinação ctrl+alt.
      Se for resumir, pelo menos acerte o detalhe mais importante. As pessoas só pressionavam Alt, mas o Windows transformava isso em “agora você está pressionando ctrl+alt”, de modo que alt+s parecia ctrl+s e vinha junto com um Alt que ninguém verificava ao interceptar e matar o evento.