Due storie su come ANKI può aiutarti a imparare una lingua straniera e prepararti per un colloquio

Ho sempre pensato che un programmatore pigro sia un buon programmatore. Perché? Perché, se chiedi a un programmatore laborioso di fare qualcosa, andrà e lo farà. Ma un programmatore pigro impiegherà 2-3 volte più tempo per scriverà uno script che lo farà al suo posto. Forse la prima volta richiederà un tempo eccessivo, ma con compiti ripetitivi questo approccio si ripaga molto rapidamente. Mi considero un programmatore pigro. Questa era l'introduzione, ora passiamo al punto.

Storia prima

Qualche anno fa ho pensato a come migliorare il mio inglese. Non mi è venuta in mente niente di meglio che leggere della letteratura. Ho acquistato un e-reader, ho caricato libri e ho iniziato a leggere. Durante la lettura, incontravo continuamente parole sconosciute. Le traducevo immediatamente usando i dizionari integrati nell'e-reader, ma ho notato una particolarità: le parole non volevano rimanere nella mia memoria. Quando, dopo alcune pagine, incontravo di nuovo quella parola, avevo il 90% di probabilità di aver bisogno di una nuova traduzione, e così ogni volta. Si deduceva che non bastava solo tradurre le parole sconosciute durante la lettura, ma bisognava fare qualcos'altro. L'idea perfetta sarebbe stata integrarle nel linguaggio quotidiano e iniziare a usarle, ma non vivo in un paese anglofono e questa è una possibilità remota. Qui mi è tornato in mente che un tempo avevo letto di Ripetizioni intervallate.

Che cos'è e come funziona? In breve, c'è una curva di oblio, successivamente cita Wikipedia:

Già durante la prima ora si dimentica fino al 60% di tutte le informazioni ricevute, dopo 10 ore dalla memorizzazione rimane in memoria il 35% di quanto studiato. Dopo di che, il processo di oblio continua lentamente, e dopo 6 giorni rimane in memoria circa il 20% del numero totale delle sillabe inizialmente memorizzate, la stessa percentuale rimane in memoria dopo un mese.

E la conclusione qui

Le conclusioni che si possono trarre da questa curva sono che per una memorizzazione efficace è necessaria la ripetizione del materiale appreso.

Ecco che siamo giunti all'idea di ripetizione intervallata.

ANKI è un programma assolutamente gratuito e open source che realizza l'idea della ripetizione intervallata. In altre parole, è un sistema di flashcard computerizzate, con la domanda da un lato e la risposta dall'altro. Poiché puoi creare domande/risposte usando semplici html/css/javascript, si può dire che offre possibilità davvero illimitate. Inoltre, è estensibile tramite appositi plugin, e uno di essi ci sarà molto utile in seguito.

Creare le schede manualmente è lungo, noioso, e con una grande probabilità di essere abbandonato nel tempo, quindi a un certo punto mi sono chiesto se fosse possibile automatizzare questo processo. La risposta è sì, è possibile. E l'ho fatto. Dico subito che si tratta più di POC (Proof of concept), ma utilizzabile. Se ci sarà interesse da parte degli utenti e altri sviluppatori si uniranno, potrà essere portato a prodotto completo, fruibile anche da utenti non esperti in tecnologia. Attualmente, l'uso della mia utility richiede alcune conoscenze di programmazione.

Leggo libri utilizzando il programma AIReader. Ha la possibilità di collegare dizionari esterni e, durante la traduzione di una parola, salva la parola da cui hai chiamato la traduzione in un file di testo. Resta solo da tradurre queste parole e creare le schede ANKI.

All'inizio ho cercato di utilizzare per la traduzione Google Translate, Lingvo API ecc. Ma con i servizi gratuiti non ha funzionato. Esaurivo il limite gratuito già durante lo sviluppo, e in più, secondo i termini di licenza, non avevo il diritto di memorizzare le parole. A un certo punto, ho capito che dovevo tradurre le parole da solo. Alla fine, ho scritto un modulo dsl2html al quale è possibile collegare dizionari DSL e che può convertirli in HTML formato.

Ecco come appare un articolo di dizionario in *.html, la mia versione a confronto con quella di GoldenDict

Due storie su come ANKI può aiutarti a imparare una lingua straniera e prepararti per un colloquio

Prima di cercare una parola nei dizionari collegati, la riporto alla forma lessicale (lemma) con l'aiuto della libreria Stanford CoreNLP. In realtà, è stata proprio questa libreria a farmi iniziare a programmare in Java, e il piano iniziale era di scrivere tutto in Java, ma durante il processo ho trovato la libreria node-java con cui è possibile eseguire relativamente facilmente codice Java da nodejs e parte del codice è scritta in JavaScript. Se avessi trovato questa libreria prima, non avrei scritto nemmeno una riga in Java. Un altro progetto secondario nato nel processo è questa creazione di un repository con documentazione DSL che è stata trovata in rete in formato *.chm, convertita e messa in forma accettabile. Se l'autore del file originale, un utente con il soprannome yozhic vede questo articolo, grazie mille per il lavoro svolto; senza la sua documentazione, probabilmente non sarei riuscito a fare nulla.

Quindi, ho una parola in inglese, il suo articolo del dizionario in formato *.html, resta da mettere tutto insieme, creare articoli ANKI da un elenco di parole e importarli nel database ANKI. A questo scopo è stato creato il seguente progetto data2anki. È in grado di prendere in input un elenco di parole, tradurle, creare articoli ANKI *.html e registrarli nel database ANKI. Alla fine dell'articolo c'è una spiegazione su come utilizzarlo. Tuttavia, ecco la seconda storia in cui le ripetizioni distribuite possono essere utili.

Seconda storia.

Tutte le persone in cerca di una specializzazione più o meno qualificata, inclusi i programmatori, si trovano ad affrontare la necessità di prepararsi per i colloqui. Molti concetti che vengono richiesti durante i colloqui non vengono utilizzati nella pratica quotidiana e vengono dimenticati. Durante la preparazione per un colloquio, sfogliando un appunto, un libro, un manuale, mi sono imbattuto nel fatto che richiede molto tempo e attenzione per filtrare le informazioni che già conosci, poiché non è sempre evidente e bisogna leggere attentamente per capire che non è rilevante. Quando ti avvicini a un argomento che devi davvero ripetere, molto spesso ti accorgi di essere già stanco e la qualità della preparazione ne risente. A un certo punto ho pensato, perché non utilizzare le schede ANKI anche per questo? Ad esempio, durante la creazione di un appunto su un argomento, creare subito un appunto in forma di domanda - risposta, e poi, durante la ripetizione, saprai immediatamente se conosci o meno la risposta a quella domanda.

Il problema è sorto solo nel fatto che digitare domande è molto lungo e noioso. Per semplificare il processo, ho data2anki aggiunto la funzionalità di convertire markdown testo nella scheda ANKI. Tutto ciò che devi fare è scrivere un grande file in cui le domande e le risposte saranno contrassegnate da una sequenza di caratteri concordata in anticipo, che il parser utilizzerà per capire dove sono le domande e dove sono le risposte.

Dopo che questo file sarà stato creato, avvii data2anki e questo crea le schede ANKI. Il file originale può essere facilmente modificato e condiviso, basta eliminare la scheda corrispondente e riavviare il programma, e verrà creato un nuovo file.

Installazione e utilizzo

  1. Installazione di ANKI + AnkiConnect

    1. Scarica ANKI da qui: https://apps.ankiweb.net/
    2. Installa il plugin AnkiConnect: https://ankiweb.net/shared/info/2055492159

  2. Installazione data2anki

    1. Scarica data2anki dal repository github
      git clone https://github.com/anatoly314/data2anki
    2. Installa le dipendenze
      cd data2anki && npm install
    3. Scarica le dipendenze java https://github.com/anatoly314/data2anki/releases/download/0.1.0/jar-dependencies.zip
    4. Estrai jar-dependencies.zip e metti il suo contenuto in data2anki/java/jars

  3. Uso per la traduzione di parole:

    1. Nel file data2anki/config.json:

      • nel campo modalità inserisci il valore dsl2anki

      • nel campo modules.dsl.anki.deckName e modules.dsl.anki.modelName inserisci, rispettivamente, Nome Del Mazzo e Nome Del Modello (dovrebbero già essere stati creati prima di creare le schede). Attualmente supporta solo modelli di tipo Base:

        Ha campi Fronte e Retro, e creerà una scheda. Il testo che inserisci nel Fronte apparirà sul fronte della scheda, e il testo che inserisci nel Retro apparirà sul retro della scheda.

        dove la parola originale è Campo Fronte, mentre la traduzione sarà nel Campo Retro.

        Non c'è alcun problema ad aggiungere supporto per Base (e scheda inversa), dove per la parola e la traduzione sarà creata anche la scheda inversa, in cui dovrai ricordare la parola originale per la traduzione. Serve solo tempo e volontà.

      • nel campo modules.dsl.dictionariesPath inserisci un array con i dizionari *.dsl collegati. Ogni dizionario collegato è una directory in cui si trovano i file del dizionario secondo il formato: Struttura del dizionario DSL

      • nel campo modules.dsl.wordToTranslatePath inserisci il percorso per l'elenco delle parole che desideri tradurre.

    2. Avvia l'app ANKI in funzione
      node data2ankiindex.js
    3. PROFIT!!!

  4. Utilizzo per creare schede da markdown

    1. Nel file data2anki/config.json:

      • nel campo modalità inserisci il valore markdown2anki
      • nel campo modules.markdown.anki.deckName e modules.dsl.anki.modelName inserisci, rispettivamente, Nome Del Mazzo e Nome Del Modello (dovrebbero già essere stati creati prima di creare le schede). Per markdown2anki modalità è supportato solo il modello di tipo Base.
      • nel campo modules.markdown.selectors.startQuestionSelectors e modules.markdown.selectors.startAnswerSelectors inserisci i selettori con cui contrassegni l'inizio della domanda e della risposta, rispettivamente. La riga stessa con il selettore non sarà analizzata e non entrerà nella scheda, il parser inizierà a lavorare dalla riga successiva.

        Ad esempio, questa scheda domanda/riposta:

        Due storie su come ANKI può aiutarti a imparare una lingua straniera e prepararti per un colloquio

        Apparirà in markdown nel seguente modo:
        #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
        

        Esempio tratto da qui: 123-Domande di colloqui su JavaScript

        C'è anche un file di esempi nella cartella del progetto examples/markdown2anki-example.md

      • nel campo modules.markdown.pathToFile
        specifica il percorso del file dove si trova *.md file con domande/risposte

    2. Avvia l'app ANKI in funzione
      node data2ankiindex.js
    3. PROFIT!!!

Ecco come appare su un telefono cellulare:

Guarda il video

Risultato

Le schede ANKI ottenute dalla versione desktop si sincronizzano senza problemi con il cloud ANKI (gratuitamente fino a 100mb), e dopo puoi utilizzarle ovunque. Ci sono client per Android e iPhone, e puoi usarle anche nel browser. Pertanto, se hai del tempo da perdere, invece di scorazzare senza meta su Facebook o guardare gattini su Instagram, puoi imparare qualcosa di nuovo.

Epilogo

Come ho già detto, è più un POC operativo da usare che un prodotto finito. Circa il 30% dello standard del parser DSL non è implementato, e quindi, ad esempio, non tutti gli articoli lessicali presenti nei dizionari possono essere trovati, c'è anche l'idea di riscriverlo in JavaScript, poiché desidero la «consistenza», inoltre, attualmente non è scritto in modo molto ottimale. Attualmente, il parser costruisce un albero, e questo mi sembra superfluo e complica il codice. In markdown2anki modalità immagine non vengono analizzati. Cercherò di lavorare lentamente, ma, dato che lo scrivo per me stesso, risolverò prima di tutto quegli ostacoli su cui inciampo, ma se qualcuno vuole aiutare, è il benvenuto. Se ci sono domande sul programma, sarò felice di aiutare tramite issues aperti nei progetti pertinenti. Per altre critiche e suggerimenti, scrivete qui. Spero che questo progetto possa risultare utile a qualcuno.

P.S. Se noti errori (e purtroppo ce ne sono), scrivimi in privato, sistemerò tutto.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster