Duas histórias de como o ANKI pode ajudá-lo a aprender um idioma estrangeiro e se preparar para entrevistas

Sempre acreditei que um programador preguiçoso é um bom programador. Por quê? Porque se você pede a um trabalhador esforçado para fazer algo, ele vai e faz. Mas um programador preguiçoso vai gastar 2 a 3 vezes mais tempo, mas vai escrever um script que fará isso por ele. Pode ser que, na primeira vez, isso consuma um tempo injustificadamente grande, mas, considerando tarefas repetitivas, essa abordagem logo compensa. Eu me considero um programador preguiçoso. Essa foi uma introdução, agora vamos ao ponto.

Primeira história

Alguns anos atrás, comecei a pensar em como melhorar meu inglês. Não me ocorreu nada melhor do que a leitura de literatura. Comprei um leitor de e-books, baixei livros e comecei a ler. Durante a leitura, frequentemente encontrava palavras desconhecidas. Eu as traduzia imediatamente com os dicionários embutidos no leitor, mas notei uma particularidade: as palavras não queriam ser lembradas. Quando eu encontrava essa palavra novamente algumas páginas depois, havia 90% de probabilidade de que eu precisasse traduzir novamente, e assim por diante a cada vez. A conclusão que se impunha era que não bastava apenas traduzir as palavras desconhecidas durante a leitura; era preciso fazer algo mais. A solução ideal seria incorporá-las no dia a dia e começar a usá-las, mas eu não vivo em um país de língua inglesa, o que torna isso pouco provável. Então, lembrei-me que um dia li sobre Repetição espaçada.

O que é isso e para que serve? Em resumo, existe uma curva do esquecimento, a seguir uma citação da Wikipédia:

Já na primeira hora, até 60% de toda informação recebida é esquecida; após 10 horas de memorização, 35% do que foi estudado permanece na memória. Depois, o processo de esquecimento ocorre lentamente, e após 6 dias, cerca de 20% do total de sílabas inicialmente aprendidas permanece na memória; a mesma quantidade permanece na memória após um mês.

E a conclusão aqui

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

Chegamos então à ideia de repetição espaçada.

ANKI este é um programa absolutamente gratuito e de código aberto que implementa a ideia de repetição espaçada. Em termos simples, são cartões de flash computadorizados, de um lado uma pergunta, do outro a resposta. Como você pode fazer perguntas/respostas usando apenas html/css/javascript, pode-se dizer que ele possui verdadeiramente possibilidades ilimitadas. Além disso, é extensível com plugins específicos plugins, e um deles será muito útil para nós mais adiante.

Criar cartões manualmente é demorado, tedioso, e com uma grande probabilidade de que, após um tempo, você desista — por isso, em algum momento me perguntei se seria possível automatizar esse processo. A resposta é sim, é possível. E eu fiz isso. Direi de imediato, é mais POC (Proof of concept), mas que pode ser usado. Se houver interesse por parte dos usuários e outros desenvolvedores se juntarem, isso pode ser transformado em um produto acabado, que até usuários tecnicamente leigos poderão utilizar. No entanto, a utilização da minha ferramenta requer certo conhecimento em programação.

Eu leio livros com a ajuda do programa AIReader. Ele tem a possibilidade de conectar dicionários externos e, ao traduzir uma palavra, salva a palavra que você chamou para tradução em um arquivo de texto. Agora, resta apenas traduzir essas palavras e criar cartões ANKI.

Inicialmente, tentei usar para tradução Google Translate, Lingvo API etc. Mas os serviços gratuitos não deram certo. Eu esgotei o limite gratuito ainda durante o processo de desenvolvimento e, além disso, de acordo com os termos da licença, não tinha permissão para armazenar palavras. Em algum momento, percebi que precisava traduzir as palavras por conta própria. No final, um módulo foi escrito dsl2html que pode conectar dicionários DSL e que sabe como convertê-los em HTML formato.

Aqui está como um artigo de dicionário aparece em *.html, minha versão em comparação com a versão GoldenDict

Duas histórias de como o ANKI pode ajudá-lo a aprender um idioma estrangeiro e se preparar para entrevistas

Antes de procurar a palavra nos dicionários conectados, eu a levo à forma de dicionário (lemática) usando a biblioteca Stanford CoreNLP. Na verdade, foi por causa dessa biblioteca que comecei a programar em Java e o plano inicial era escrever tudo em Java, mas durante o processo encontrei a biblioteca node-java com a qual é relativamente simples executar código Java a partir do nodejs, e parte do código está escrita em JavaScript. Se eu tivesse encontrado esta biblioteca antes, não teria escrito uma única linha em Java. Outro projeto secundário que surgiu durante o processo foi a criação de um repositório com a documentação DSL que foi encontrada na internet no formato *.chm, convertida e apresentada de forma legível. Se o autor do arquivo original, conhecido pelo apelido yozhic estiver vendo este artigo, um grande obrigado pelo trabalho realizado; sem sua documentação, provavelmente, nada teria funcionado.

Então, eu tenho uma palavra em inglês, seu artigo de dicionário no formato *.html, é necessário consolidar 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 data2anki. Ele é capaz de receber uma lista de palavras como entrada, traduzir, criar artigos ANKI *.html e gravá-los no banco de dados ANKI. No final do artigo, há instruções sobre como usá-lo. Por enquanto, aqui está a segunda história onde repetições espaçadas podem ser úteis.

História dois.

Todas as pessoas em busca de uma especialidade mais ou menos qualificada, incluindo programadores, enfrentam a necessidade de se preparar para entrevistas. Muitos conceitos que perguntam nas entrevistas você não utiliza na prática diária e acabam sendo esquecidos. Ao me preparar para mais uma entrevista, folheando anotações, livros e guias, percebi que muito tempo e atenção eram gastos filtrando informações que já conhecia, pois nem sempre é óbvio, e é necessário ler atentamente para entender o que é irrelevante. Quando você chega ao tópico que realmente precisa revisar, muitas vezes já está cansado e a qualidade da preparação sofre. Em algum momento pensei, por que não usar cartões ANKI para isso? Por exemplo, ao fazer anotações sobre um determinado tema, criar imediatamente um resumo no formato de pergunta-resposta, e então, na revisão, você saberá imediatamente se conhece ou não a resposta para aquela pergunta.

O problema surgiu apenas na questão de que digitar perguntas é muito demorado e tedioso. Para facilitar o processo, eu data2anki adicionei ao projeto a funcionalidade de converter markdown Texto no cartão ANKI. Tudo o que você precisa fazer é escrever um único arquivo grande, no qual perguntas e respostas serão marcadas com uma sequência de símbolos previamente acordada, de modo que o parser entenda onde está a pergunta e onde está a resposta.

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

Instalação e uso

  1. Instalação do ANKI + AnkiConnect

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

  2. Instalação data2anki

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

  3. Uso para tradução de palavras:

    1. No arquivo data2anki/config.json:

      • na chave modo escreva o valor dsl2anki

      • na chave modules.dsl.anki.deckName e modules.dsl.anki.modelName escreva, respectivamente, Deck Name e Model Name (já devem estar criados antes de criar os cartões). Atualmente, apenas o modelo do tipo Basic:

        Possui campos Front e Back, e criará um cartão. O texto que você inserir no Front aparecerá na frente do cartão, e o texto que você inserir no Back aparecerá na parte de trás do cartão.

        onde a palavra original é Front field, e a tradução estará em Back field.

        Não há nenhum problema em adicionar suporte Basic (e cartão reverso), onde tanto a palavra quanto a tradução terão um cartão reverso, onde pela tradução será necessário lembrar a palavra original. Só é necessário ter tempo e vontade.

      • na chave modules.dsl.dictionariesPath escreva um array com os *.dsl dicionários conectados. Cada dicionário conectado é um diretório contendo os arquivos do dicionário de acordo com o formato: Estrutura do dicionário DSL

      • na chave modules.dsl.wordToTranslatePath escreva o caminho para a lista de palavras que você deseja traduzir.

    2. Execute com o aplicativo ANKI em funcionamento
      node data2ankiindex.js
    3. PROFIT!!!

  4. Uso para criação de cartões a partir de markdown

    1. No arquivo data2anki/config.json:

      • na chave modo escreva o valor markdown2anki
      • na chave modules.markdown.anki.deckName e modules.dsl.anki.modelName escreva, respectivamente, Deck Name e Model Name (já devem estar criados antes de criar os cartões). Para markdown2anki modo, apenas o modelo do tipo é suportado Basic.
      • na chave modules.markdown.selectors.startQuestionSelectors e modules.markdown.selectors.startAnswerSelectors escreva os seletores que você usa para marcar o início da pergunta e resposta, respectivamente. A própria linha com o seletor não será analisada e não aparecerá no cartão; o parser começará a trabalhar na próxima linha.

        Por exemplo, este cartão pergunta/resposta:

        Duas histórias de como o ANKI pode ajudá-lo a aprender um idioma estrangeiro e se preparar para entrevistas

        Aparecerá no markdown da seguinte forma:
        #QUESTION#
        ## Question 5. Write a mul function which will work properly when invoked with following syntax.
        
        ```javascript
        console.log(mul(2)(3)(4)); // output : 24
        console.log(mul(4)(3)(4)); // output : 48
        ```
        #ANSWER#
        Below is the code followed by the explanation of how it works:
        
        ```javascript
        function mul (x) {
          return function (y) { // anonymous function
            return function (z) { // anonymous function
              return x * y * z;
            };
          };
        }
        ```
        
        Here the `mul` function accepts the first argument and returns the anonymous function which takes the second parameter and returns the anonymous function which takes the third parameter and returns the multiplication of arguments which is being passed in successive
        
        In Javascript function defined inside has access to outer function variable and function is the first class object so it can be returned by the function as well and passed as an argument in another function.
        - A function is an instance of the Object type
        - A function can have properties and has a link back to its constructor method
        - A function can be stored as variable
        - A function can be pass as a parameter to another function
        - A function can be returned from another function
        

        Exemplo retirado de aqui: 123-Perguntas-de-Entrevista-JavaScript

        Ainda há um arquivo com exemplos na pasta do projeto examples/markdown2anki-example.md

      • na chave modules.markdown.pathToFile
        insira o caminho para o arquivo onde está *.md arquivo com perguntas/respostas

    2. Execute com o aplicativo ANKI em funcionamento
      node data2ankiindex.js
    3. PROFIT!!!

Assim é como aparece no celular:

Por que no hosting comum a administração do PrestaShop é lenta, e no seu não é?

Resultado

Os cartões ANKI gerados na versão desktop sincronizam perfeitamente com a nuvem ANKI (gratuito até 100mb), depois disso, você pode usá-los em qualquer lugar. Existem clientes para Android e iPhone, além de poder acessá-los no navegador. Portanto, se você tem tempo livre, em vez de rolar sem destino no Facebook ou ver gatos no Instagram, pode aprender algo novo.

Epílogo

Como já mencionei, isso é mais um POC funcional do que um produto finalizado. Aproximadamente 30% do padrão do parser DSL não está implementado, e portanto, por exemplo, nem todos os artigos de dicionário disponíveis podem ser encontrados, também há a ideia de reescrevê-lo em JavaScript, pois busco 'consistência', e além disso, atualmente está escrito de forma não otimizada. O parser agora constrói uma árvore, o que parece desnecessário e complica o código. No markdown2anki modo de imagem, não são analisados. Vou tentar ir desenvolvendo aos poucos, mas como estou escrevendo para mim mesmo, vou priorizar resolver as coisas que achar problemáticas, mas se alguém quiser ajudar, fica à vontade. Se houver perguntas sobre o programa, ficarei feliz em ajudar através de questões abertas nos projetos correspondentes. Outras críticas e sugestões podem ser deixadas aqui. Espero que este projeto seja útil para alguém.

P.S. Se notar erros (que, infelizmente, existem), entre em contato, eu corrigirei tudo.

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster