Duas histórias de como ANKI pode ajudá-lo a aprender uma língua estrangeira e a se preparar para entrevistas

Sempre acreditei que um programador preguiçoso é um bom programador. Por que? Porque peça a um trabalhador para fazer algo, ele irá e fará. E um programador preguiçoso gastará 2 a 3 vezes mais tempo, mas escreverá um script que fará isso por ele. Pode levar um tempo excessivamente longo para fazer isso na primeira vez, mas com tarefas repetidas essa abordagem terá resultados muito rápidos. Eu me considero um programador preguiçoso. Esse foi o preâmbulo, agora vamos ao que interessa.

Primeira história

Há alguns anos, me perguntei como poderia melhorar meu inglês. Nada melhor me veio à mente do que ler literatura. Comprei um leitor eletrônico, baixei livros e comecei a ler. Durante a leitura, continuei encontrando palavras desconhecidas. Eu imediatamente as traduzi usando os dicionários embutidos no leitor, mas notei uma característica: as palavras não queriam ser lembradas. Quando me deparei com essa palavra novamente, algumas páginas depois, com 90% de probabilidade, eu precisava de tradução novamente, e assim por diante, sempre. A conclusão foi que não bastava simplesmente traduzir palavras desconhecidas durante a leitura, era preciso fazer outra coisa. O ideal seria introduzi-lo no dia a dia e começar a usá-lo, mas não moro em país de língua inglesa e isso é improvável. Então me lembrei que uma vez li sobre Repetição Espaçada.

O que é e com que se come? Resumindo, existe isso curva do esquecimento, citação adicional da Wikipedia:

Já na primeira hora, até 60% de todas as informações recebidas são esquecidas; 10 horas após a memorização, 35% do que foi aprendido permanece na memória. Então o processo de esquecimento prossegue lentamente e, após 6 dias, cerca de 20% do número total de sílabas inicialmente aprendidas permanece na memória, e a mesma quantidade permanece na memória após um mês.

E a conclusão daqui

As conclusões que podem ser tiradas com base nesta curva são que para uma memorização eficaz é necessário repetir o material memorizado.

Então tivemos uma ideia repetição espaçada.

ANKI é um programa totalmente gratuito e de código aberto que implementa a ideia de repetição espaçada. Simplificando, os cartões flash computadorizados têm uma pergunta de um lado e uma resposta do outro. Já que você pode fazer perguntas/respostas usando html/css/javascript, então podemos dizer que tem possibilidades verdadeiramente ilimitadas. Além disso, é expansível com especial plug-ins, e um deles será muito útil para nós no futuro.

Criar cartões manualmente é longo, tedioso e com grande probabilidade, depois de um tempo você se esquecerá dessa tarefa, e então em algum momento me perguntei se é possível automatizar essa tarefa. A resposta é sim você pode. E eu fiz isso. Direi imediatamente, é mais POC (prova de conceito), mas que pode ser usado. Se houver interesse dos usuários e outros desenvolvedores se envolverem, então ele poderá ser levado a um produto final que até mesmo usuários tecnicamente analfabetos poderão usar. Agora, usar meu utilitário requer algum conhecimento de programação.

Eu leio livros usando o programa Leitor de IA. Ele tem a capacidade de conectar dicionários externos e, quando você traduz uma palavra, salva a palavra que você pediu para tradução em um arquivo de texto. Resta traduzir essas palavras e criar cartões ANKI.

No começo tentei usar para tradução Traduz Google, API Lingvo etc. Mas as coisas não funcionaram com serviços gratuitos. Esgotei o limite gratuito durante o processo de desenvolvimento, além disso, de acordo com os termos da licença, não tinha direito de armazenar palavras em cache. Em algum momento percebi que precisava traduzir as palavras sozinho. Como resultado, um módulo foi escrito dsl2html ao qual você pode se conectar Dicionários DSL e quem sabe como convertê-los em HTML formatar.

Esta é a aparência de uma entrada de dicionário em *.html, minha opção em comparação com a opção ditado de ouro

Duas histórias de como ANKI pode ajudá-lo a aprender uma língua estrangeira e a se preparar para entrevistas

Antes de procurar uma palavra em dicionários conectados, trago-a para forma de dicionário (lema) usando a biblioteca Stanford Core NLP. Na verdade, por causa dessa biblioteca, comecei a escrever em Java e o plano original era escrever tudo em Java, mas no processo encontrei a biblioteca nó-java com o qual você pode executar código Java com relativa facilidade a partir de nodejs e parte do código é escrito em JavaScript. Se eu tivesse encontrado esta biblioteca antes, nem uma única linha teria sido escrita em Java. Outro projeto paralelo que nasceu no processo é a criação repositório com documentação DSL que foi encontrado na rede no formato *.chm, convertido e trazido à forma divina. Se o autor do arquivo original for um usuário por apelido yozhic Quando ele vê este artigo, agradeço-lhe muito pelo trabalho que realizou; sem a sua documentação, muito provavelmente não teria conseguido.

Então, eu tenho uma palavra em inglês, sua entrada no dicionário no formato *.html, só falta juntar tudo, criar artigos ANKI a partir da lista de palavras e inseri-los no banco de dados ANKI. Para isso foi criado o seguinte projeto dados2anki. Pode pegar uma lista de palavras como entrada, traduzir, criar ANKI *.html artigos e registrá-los no banco de dados ANKI. No final do artigo há instruções de como utilizá-lo. Enquanto isso, a segunda história é onde as repetições espaçadas podem ser úteis.

A segunda história.

Todas as pessoas que procuram uma especialidade mais/menos qualificada, incluindo programadores, deparam-se com a necessidade de se prepararem para uma entrevista. Muitos dos conceitos que são questionados nas entrevistas você não utiliza na prática cotidiana e são esquecidos. Ao me preparar para uma entrevista, folheando anotações, um livro, um livro de referência, me deparei com o fato de que é preciso muito tempo e atenção para peneirar informações que você já conhece, porque nem sempre são óbvias e você tem que leia-o com atenção para entender o que é irrelevante. Quando você chega a um assunto que realmente precisa ser repetido, muitas vezes você já está cansado e a qualidade da sua preparação é prejudicada. Em algum momento pensei, por que não usar cartões ANKI também para isso? Por exemplo, ao fazer anotações sobre um tópico, crie imediatamente uma nota na forma de pergunta e resposta e, ao repeti-la, você saberá imediatamente se sabe a resposta para essa pergunta ou não.

O único problema que surgiu foi que a digitação das perguntas era muito longa e tediosa. Para facilitar o processo, dados2anki projeto eu adicionei funcionalidade de conversão redução texto em cartões ANKI. Tudo que você precisa é escrever um arquivo grande no qual as perguntas e respostas serão marcadas com uma sequência pré-determinada de caracteres, através da qual o analisador entenderá onde está a pergunta e onde está a resposta.

Depois que esse arquivo for criado, você executa o data2anki e ele cria cartões ANKI. O arquivo original é fácil de editar e compartilhar, basta apagar o(s) cartão(ões) correspondente(s) e executar o programa novamente, e uma nova versão será criada.

Instalação e uso

  1. Instalando ANKI + AnkiConnect

    1. Baixe ANKI aqui: https://apps.ankiweb.net/
    2. Instale o plugin AnkiConnect: https://ankiweb.net/shared/info/2055492159

  2. Instalação dados2anki

    1. Baixar dados2anki do repositório github
      git clone https://github.com/anatoly314/data2anki
    2. Instalar dependências
      cd data2anki && npm install
    3. Baixe dependências java https://github.com/anatoly314/data2anki/releases/download/0.1.0/jar-dependencies.zip
    4. Desempacotando jar-dependências.zip e coloque seu conteúdo em dados2anki/java/jars

  3. Use para traduzir palavras:

    1. No arquivo data2anki/config.json:

      • na chave modo insira o valor dsl2anki

      • na chave módulos.dsl.anki.deckName и módulos.dsl.anki.modelName escreva de acordo Nome do Deck и Nome do modelo (já deve ser criado antes de criar os cartões). Atualmente apenas o tipo de modelo é suportado Basico:

        Possui campos Frente e Verso e criará um cartão. O texto inserido na Frente aparecerá na frente do cartão, e o texto inserido no Verso aparecerá no verso do cartão.

        onde está a palavra original? Campo frontal, e a tradução estará em Campo traseiro.

        Não há problema em adicionar suporte Básico (e cartão invertido), onde será criado um cartão reverso para a palavra e tradução, onde com base na tradução você precisará lembrar a palavra original. Tudo que você precisa é de tempo e desejo.

      • na chave módulos.dsl.dictionariesPath registre um array com conectado *.dsl dicionários. Cada dicionário conectado é um diretório no qual os arquivos do dicionário estão localizados de acordo com o formato: Estrutura do dicionário DSL

      • na chave módulos.dsl.wordToTranslatePath insira o caminho para a lista de palavras que deseja traduzir.

    2. Inicie com o aplicativo ANKI em execução
      node data2ankiindex.js
    3. LUCRO !!!

  4. Usos para criar cartões a partir de descontos

    1. No arquivo data2anki/config.json:

      • na chave modo insira o valor markdown2anki
      • na chave módulos.markdown.anki.deckName и módulos.dsl.anki.modelName escreva de acordo Nome do Deck и Nome do modelo (já deve ser criado antes de criar os cartões). Para markdown2anki modo apenas o tipo de modelo é suportado Basico.
      • na chave módulos.markdown.selectors.startQuestionSelectors и módulos.markdown.selectors.startAnswerSelectors você escreve seletores com os quais marca o início da pergunta e da resposta, respectivamente. A linha com o seletor em si não será analisada e não terminará no cartão, o analisador começará a funcionar a partir da próxima linha.

        Por exemplo, este cartão de perguntas/respostas:

        Duas histórias de como ANKI pode ajudá-lo a aprender uma língua estrangeira e a se preparar para entrevistas

        Ficará assim na redução:
        #QUESTION# ## Pergunta 5. Escreva uma função mul que funcionará corretamente quando invocada com a seguinte sintaxe. ```javascript console.log(mul(2)(3)(4)); // saída: 24 console.log(mul(4)(3)(4)); // saída: 48 ``` #RESPOSTA# Abaixo está o código seguido da explicação de como funciona: ```javascript function mul (x) { return function (y) { // função anônima return function (z) { // função anônima return x * y * z; }; }; } ``` Aqui a função `mul` aceita o primeiro argumento e retorna a função anônima que recebe o segundo parâmetro e retorna a função anônima que recebe o terceiro parâmetro e retorna a multiplicação dos argumentos que está sendo passado sucessivamente Na função Javascript definida inside tem acesso à variável de função externa e function é o objeto de primeira classe, portanto também pode ser retornado pela função e passado como argumento em outra função. - Uma função é uma instância do tipo Object - Uma função pode ter propriedades e ter um link para seu método construtor - Uma função pode ser armazenada como variável - Uma função pode ser passada como parâmetro para outra função - Uma função pode ser retornado de outra função
        

        Exemplo retirado daqui: 123-JavaScript-Entrevista-Perguntas

        Também existe um arquivo com exemplos na pasta do projeto examples/markdown2anki-example.md

      • na chave módulos.markdown.pathToFile
        anote o caminho para o arquivo onde *.md arquivo de perguntas/respostas

    2. Inicie com o aplicativo ANKI em execução
      node data2ankiindex.js
    3. LUCRO !!!

Isto é o que parece em um telefone celular:

resultado

Os cartões recebidos na versão desktop do ANKI são sincronizados sem problemas com a nuvem ANKI (gratuito até 100 MB), e então você pode usá-los em qualquer lugar. Existem clientes para Android e iPhone, e você também pode usá-los em um navegador. Como resultado, se você tiver um tempo sem nada para gastar, em vez de navegar sem rumo pelo Facebook ou pelos gatos no Instagram, poderá aprender algo novo.

Epílogo

Como mencionei, este é mais um POC funcional que você pode usar do que um produto acabado. Cerca de 30% do padrão do analisador DSL não está implementado e, portanto, por exemplo, nem todas as entradas de dicionário que estão nos dicionários podem ser encontradas, também existe uma ideia de reescrevê-lo em JavaScript, porque quero “consistência” e, além disso, agora não está escrito de maneira ideal. Agora o analisador está construindo uma árvore, mas na minha opinião isso é desnecessário e não precisa complicar o código. EM markdown2anki modo, as imagens não são analisadas. Vou tentar cortar aos poucos, mas como estou escrevendo para mim, vou antes de tudo resolver os problemas que eu mesmo irei pisar, mas se alguém quiser ajudar, seja bem-vindo. Se você tiver dúvidas sobre o programa, ficarei feliz em ajudar nas questões em aberto nos projetos relevantes. Escreva outras críticas e sugestões aqui. Espero que este projeto seja útil para alguém.

PS Se você notar algum erro (e, infelizmente, há), escreva-me uma mensagem pessoal, corrigirei tudo.

Fonte: habr.com

Adicionar um comentário