Meus pensamentos sobre o teclado na tela do Flipper Zero para uma tela de 128x64 pixels



Recentemente, vi uma postagem convidando desenvolvedores para o projeto Flipper Zero e me inscrevi. Fui adicionado ao repositório de firmware e comecei a pensar muito na usabilidade do dispositivo. Sonhei que precisava escanear um monte de chaves de diferentes entradas. No sonho, havia pessoas diferentes, apartamentos, chuva e, por algum motivo, recebi um punhado dessas munições amarelas, que diferiam umas das outras apenas na quantidade de sujeira sobre elas. E, naturalmente, para de alguma forma lidar com essa bagunça, decidi adicionar todas essas chaves ao Flipper Zero.



Bem no meu sonho, eu inseri novos identificadores e todos eles foram adicionados ao menu como "Chave", o que tornou a ação ainda mais sem sentido. O resultado é uma grande lista, consistindo apenas na palavra "Chave". Achei que precisava reescrever o firmware. E aqui está exatamente a vantagem do sono - tudo o que foi concebido se torna realidade de uma vez. As chaves começaram a ser adicionadas com um sufixo aleatório como "Chave 74", seguido por "Chave 22". O número é aleatório, não deve ser confundido com checksums ou hashes. Em princípio, se você tem boa memória, pode se lembrar que a Chave 22 é de Lenin 54 e a Chave 74 é de Pushkin 29. Achei que seria bom editar os números de alguma forma, direto no Flipper, bem na lista de chaves: temos botões esquerdo-direito livres, deixe-os aumentar / diminuir o número! Uma longa espera chamará o teclado completo! Mas parequal teclado desenhar? Qwerty padrão com mudança para Ytsuken? Yaverta russificada? Temos uma tela de apenas 128x64 pixels e, além disso, é necessário de alguma forma amontoar nela a saída do digitado! Como encaixar tudo isso? É possível inserir texto em código Morse?



Teclado primitivo







Dizer que digitar em tal teclado é conveniente é claramente impossível. O que também é rápido. Simplicidade e um grande conjunto de símbolos são as únicas coisas que você pode obter aqui, mas caso contrário, você deseja correr de tal teclado e não olhar para trás. Surpreendentemente, esse método de entrada era bastante comum no passado.



Qwerty



Então, e se você pegar um teclado Android padrão, aplicar um efeito de lente e ver o que acontece? 10 horas no After Effects e aqui está:







Eu tinha um script que converte os gráficos em uma paleta CGA, depois de processar ficou assim:











gostei, e até gostei dos meios-tons. PARE. Flipper tem uma tela em preto e branco! Mas, por outro lado, ele tem energia, o que significa que você pode obter semitons ligando / desligando os pixels rapidamente. Tive que inventar minha própria versão de indecisão. No processo, Smoker Dither foi inventado:







é uma variação do dither de Baer e uma matriz de distribuição de erro de Bill Atkinson ligeiramente modificada. Depois de algumas depurações e consertando 9000 erros, ficou assim:







Não quer dizer que goste muito mais dessa opção, mas na tela LCD ela deve ter uma aparência melhor, os meios-tons devem ser especialmente bons devido à rotação constante das matrizes. Eu não recebi meu Flipper ainda, então não posso realmente testá-lo, mas em teoria deve parecer bom.



Hmm, e se você tentar desenhar um teclado tão pequeno quanto possível?











Em princípio, funcionou bem. Tudo se encaixa se você quiser. Opcionalmente, você pode cortar a chave RUSLAT, como muitas outras teclas úteis. Mas quais? Escalar o padrão HID e apertar o botão de café e vermelho de lá?



Layout



O layout QWERTY padrão possui os seguintes recursos:



  1. Projetado para máquinas de escrever que requerem entrada manual (duas mãos)
  2. Ele deve mudar de mãos durante a digitação. Enquanto uma mão pressiona uma tecla, a outra se prepara para pressionar. No entanto, muitas palavras em inglês só podem ser digitadas no lado esquerdo do teclado.
  3. A disposição diagonal das teclas remonta à disposição física das alavancas de uma máquina de escrever


As seguintes palavras são atribuídas a August Dvorak, criador do “teclado Dvorak”, uma alternativa ao QWERTY:

, , , , . , , . , , , .
Mas aconteceu que nem Dvorak nem seu sucessor, Kolemak, não ganharam popularidade.



Mas voltando ao Flipper. Temos influência nisso? Posso usar 2 mãos ao mesmo tempo para digitar? Faz sentido alternar as mãos? Queremos usar nossos dedinhos de maneira mais eficaz, como anuncia o autor Kolemak? Precisamos de compatibilidade com teclas de atalho populares do Windows como CTRL + C / CTRL + V? A resposta a todas essas perguntas é NÃO. Conclusão: precisamos inventar nosso próprio layout, já que o QWERTY não atende às nossas tarefas e objetivos.



Balões



Peguei alguns artigos da Wikipedia, copiei o texto deles e contei os caracteres únicos, aqui estão: Engraçado, mas não há aspas duplas ", mas há" árvores de Natal ". Tentei visualizar a frequência de uso de cada letra, mas imediatamente tive que aplicar uma escala logarítmica, para ver pelo menos alguma coisa: vamos pensar em como organizar esses caracteres na tela para que seja mais conveniente para o usuário inseri-los? A primeira ideia é calcular a frequência de uso desta ou daquela letra junto com os vizinhos. E usando esses dados, inicie o simulador "Balls", onde existe alguma força de atração entre as bolas, igual à frequência de uso dessas letras na vizinhança. A primeira experiência foi a seguinte:



!$%&'(),-./01234567

89:;?ABCDEFGHIJKLM

NOPQRSTUVWXYZ[]a

bcdefghijklmnopqrstu

vwxyz|£¥«°²»àéœ́







—’“„…№

↑▲
































Há pouco para ver, mas se você olhar de perto, você pode ver como os alfabetos cirílico e latino formaram grupos, praticamente desconectados um do outro, e personagens pouco usados ​​voam para fora do espaço.



Após 9000 horas de depuração e dor, uma simulação mais agradável foi feita:







Para minha decepção, os símbolos estão interferindo muito nos movimentos uns dos outros. Tentei brincar com a força da gravidade, mudei dinamicamente, até fiz "vórtices" manuais, mas nada adiantou.







Já pode ser visto aqui que embora os clusters já tenham sido formados em sua maioria, eles contêm elementos estranhos. Precisamos encontrar alguma outra forma de arranjar as chaves ...



Por outro lado, se colocarmos tudo isso no diagrama de Voronoi ...







Parece muito legal! Hmm, com um teclado assim, você poderia até sair do Flipper e começar a produzir seus próprios teclados reais! Quem mais precisa de teclados de um dedo? O que devo escrever no kickstarter? Vou chorar no travesseiro por causa da minha próxima invenção inútil.



Genética



Ok, depois de chorar, continuei minha pesquisa. Como base, peguei um protótipo de teclado chinês :







Ou seja, peguei uma matriz de espaços de familiaridade 16x16 e coloquei um conjunto de caracteres nela em ordem aleatória. Em geral, no começo eu queria empacotá-los de uma forma bonita, usando os dados de frequência dos símbolos vizinhos, análogos das árvores de Huffman passavam pela minha cabeça, mas não conseguia dar à luz nada sensato. Portanto, simplesmente coloquei as chaves no centro, colocando-as em uma espiral a partir da célula central. Posteriormente, comecei a misturá-los, então o calvário com as árvores Huffman era desnecessário.



E então comecei uma pesquisa genética simples: fiz um conjunto de mutações, selecionei as melhores (veja abaixo), fiz delas os pais das próximas gerações. E assim, até que pare, ou seja, não vai correr para um poço evolucionário.



Houve muitos experimentos:



  • 2 , ,
  • 30 3000. , , — 30.
  • , , .
  • , - 5 ,
  • , , . - ,


Então, considerei o quão eficaz era essa ou aquela mutação. Tive que inventar meu próprio sistema de classificação. Para fazer isso, peguei um texto da Wikipedia e fiz algo como um simulador do processo de digitação. Teclado virtual 16x16, joystick virtual, texto virtual. No final da simulação, verifiquei quantos cliques foram necessários para digitar este texto. Esta foi a classificação de eficiência. Se o número de pressionamentos de tecla fosse menor do que em outras variações da mutação, e ainda mais antes de as teclas serem reorganizadas, então essa “mutação” acabou sendo melhor e foi usada para continuar o cálculo. Como resultado, ficou assim:























Em alguns lugares eu realmente gosto do teclado numérico resultante, em alguns lugares o cirílico e o latim formaram alguma semelhança com "Yin e Yang", em quase todos os lugares os símbolos do dólar, euro e libras estão próximos um do outro, assim como o símbolo de porcentagem. O número à esquerda significa quantas vezes você precisa pressionar os botões do joystick para digitar o texto de teste. Talvez, se eu rodasse o simulador por uma semana, haveria opções mais interessantes, mas tenho um computador antigo para esses experimentos. E o leitor atento encontrará também meia-páscoa-meia-bolsa: quase todas as opções de layout contêm a palavra KFC, já que foi treinada em um artigo sobre KFC e alguns tenistas.



Em princípio, sou tentado a pegar e reorganizar algumas teclas com minhas mãos, especialmente o cirílico Y, que sempre acaba ficando perto do alfabeto latino, ou o latim X, que às vezes acontece entre o alfabeto cirílico, e os símbolos são distribuídos uniformemente em um círculo ou empilhados em uma pilha, mas ... E a que a evolução responderá isto é? Quão eficaz seria esse rearranjo? Sim, eu estava com preguiça de escrever um rearranjo interativo. Mas é para melhor: agora eu sei que até para o alfabeto cirílico / latino pode haver vários layouts, e deixa o usuário escolher o que é melhor para ele.



Se você estiver interessado em outras opções para layouts que foram gerados durante o cálculo, consulte os arquivos anon.fm/articles/flipper-keyboard/layouts.html e anon.fm/articles/flipper-keyboard/layouts-more.html



Você pode experimentar por um longo tempo, aqui estão algumas ideias para experimentos:



  1. Enrolando as bordas do espaço umas sobre as outras. Essa. não é o cursor que se move pelo teclado, mas o teclado se move e, à medida que se move para um lado da tela, aparece do outro lado.
  2. Rejeição do espaço bidimensional e envolvimento do plano em algum tipo de objeto tridimensional, digamos, estendendo-se sobre um globo ou alguma outra figura geométrica. Existem mais possibilidades de loop de espaço.
  3. Adicionar símbolos comumente usados ​​em várias instâncias. Por exemplo, por que não adicionar uma dúzia de espaços? Aqui no Kolemak existem 2 backspaces, mas no nosso caso é um espaço para se multiplicar.
  4. , , . —
  5. , , Dasher


Se alguém não conhece o Dasher, execute aqui: f-droid.org/en/packages/dasher.android - tudo sobre o nosso dispositivo e ainda mais aqui: entrada de texto de joysticks, trackballs, ratos, rastreadores de olhos e outros com uma mão, um dedo e dispositivos vestíveis. A interface pode ser iniciada até em 32x32 pixels sem sacrificar a usabilidade. Trabalhou no Pocket PC e sobreviveu por anos! Mas, por mais que eu seja fã disso, apesar da grande seleção de opções, não aprendi a usar, enquanto sinto a comodidade, então para mim é mais uma tecnologia de possibilidades, a possibilidade de interagir com uma máquina. Se alguém quiser portar o Dasher, então você é bem-vindo, patches ainda vêm para o repositório em uma base regular, eu acho que haverá muitos que desejam ver tal coisa em seu Flipper.



Aqui você também pode adicionar uma variedade de opções para teclados de acordes ou teclados na tela da era Palm, como MessagEase. A ideia por trás do MessagEase é ótima, mas o problema é que segurar 2 botões é pessoalmente inaceitável para mim, então, pessoalmente, não vou transformar o Flipper em um teclado de acordes. Mas tenho certeza de que um dispositivo de hacking real não pode sobreviver sem um teclado de acordes, então alguém certamente o adicionará.



Resumindo: pode haver uma grande variedade de opções de teclado. Mas devo não apenas imaginar como deveria ser, mas também implementar tudo o que foi descrito acima. Então, se você quiser, pode tentar, mas eu tenho que trabalhar.



Implementação



E na próxima parte tentaremos implementar tudo o que concebemos. Vamos escrever um pequeno emulador e tentar inventar uma API.



Finalmente, aqui estão mais algumas animações com conceitos de teclado:







Teclado esticado sobre o que Max chama de Torus Knot:







E esta é uma tentativa de puxar uma coruja para um globo ^ W ^ W ^ W teclado sobre uma esfera. Aqui eu experimentei um pouco com hesitação, e também adicionei Dithering Epiléptico ao Dithering do Fumante.







Semelhante ao anterior, apenas para CGA.



UPD: Esqueci completamente de anexar as fontes de toda essa desgraça. Eles são interessantes para alguém?



All Articles