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 .
Che cos'è e come funziona? In breve, c'è una , 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 .
è 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 , 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 , 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 . 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 , 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 al quale è possibile collegare e che può convertirli in HTML formato.
Ecco come appare un articolo di dizionario in *.html, la mia versione a confronto con quella di

Prima di cercare una parola nei dizionari collegati, la riporto alla con l'aiuto della libreria . 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 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 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 . È 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 aggiunto la funzionalità di convertire 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
Installazione di ANKI + AnkiConnect
- Scarica ANKI da qui:
- Installa il plugin AnkiConnect:
Installazione
- Scarica dal repository github
git clone https://github.com/anatoly314/data2anki - Installa le dipendenze
cd data2anki && npm install - Scarica le dipendenze java
- Estrai jar-dependencies.zip e metti il suo contenuto in data2anki/java/jars
- Scarica dal repository github
Uso per la traduzione di parole:
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, e (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:
nel campo modules.dsl.wordToTranslatePath inserisci il percorso per l'elenco delle parole che desideri tradurre.
- Avvia l'app ANKI in funzione
node data2ankiindex.js - PROFIT!!!
Utilizzo per creare schede da markdown
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, e (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:

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 functionEsempio tratto da qui:
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
- Avvia l'app ANKI in funzione
node data2ankiindex.js - PROFIT!!!
Ecco come appare su un telefono cellulare:

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, , 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

