Dos historias sobre cómo ANKI puede ayudarte a aprender un idioma extranjero y prepararte para una entrevista

Siempre he creído que un programador perezoso es un buen programador. ¿Por qué? Porque si le pides a un programador trabajador que haga algo, simplemente lo hará. Pero un programador perezoso gastará de 2 a 3 veces más tiempo, pero escribirá un script que hará esto por él. Puede que la primera vez le cueste injustificadamente mucho tiempo, pero en tareas repetitivas este enfoque se amortiza muy rápidamente. Me considero un programador perezoso. Esa fue la introducción, ahora pasemos al grano.

Historia primera

Hace unos años, me pregunté cómo podría mejorar mi inglés. No se me ocurrió nada mejor que leer literatura. Compré un lector de libros electrónicos, descargué libros y comencé a leer. Durante la lectura, constantemente me encontraba con palabras desconocidas. Las traducía al instante usando los diccionarios integrados en el lector, pero noté una particularidad: las palabras no parecían quedarme grabadas. Cuando encontraba la misma palabra unas páginas después, con un 90% de probabilidad necesitaba traducirla de nuevo, y así cada vez. La conclusión era clara: no es suficiente con solo traducir palabras desconocidas durante la lectura, hay que hacer algo más. Lo ideal sería incorporarlas en el uso diario y comenzar a utilizarlas, pero como no vivo en un país de habla inglesa, eso es poco probable. Entonces recordé que alguna vez leí sobre Repetición espaciada.

¿Qué es y para qué se usa? En breve, hay una curva del olvido, a continuación una cita de Wikipedia:

En la primera hora se olvida hasta un 60% de toda la información recibida, a las 10 horas después de aprender, permanece en la memoria un 35% de lo estudiado. Luego el proceso de olvido progresa lentamente, y después de 6 días queda alrededor del 20% del número total de sílabas originalmente aprendidas, la misma cantidad permanece en la memoria después de un mes.

Y la conclusión es clara

Las conclusiones que se pueden extraer de esta curva son que para un recuerdo efectivo es necesario repetir el material aprendido.

Así que llegamos a la idea de repetición espaciada.

ANHKI es un programa completamente gratuito y de código abierto que implementa la idea de repetición espaciada. En otras palabras, son tarjetas de memoria digitalizadas, con una pregunta en un lado y la respuesta en el otro. Como puedes crear preguntas/respuestas utilizando el común html/css/javascript, se puede decir que tiene verdaderamente posibilidades ilimitadas. Además, es extensible con plugins especiales plugins, y uno de ellos será muy útil más adelante.

Crear tarjetas manualmente es lento, tedioso y hay una gran probabilidad de que con el tiempo te desanimes y dejes de hacerlo, así que en algún momento me pregunté si se podía automatizar esta tarea. La respuesta es sí, se puede. Y lo hice. Te diré que esto es más POC (Prueba de concepto), pero que ya se puede usar. Si hay interés por parte de los usuarios y otros desarrolladores se involucran, se puede llevar a un producto terminado que incluso usuarios sin conocimientos técnicos puedan utilizar. Sin embargo, en este momento el uso de mi herramienta supone ciertos conocimientos en programación.

Leo libros usando el programa AIReader. Tiene la capacidad de conectar diccionarios externos y, además, al traducir una palabra, guarda la palabra para la cual activaste la traducción en un archivo de texto. Solo queda traducir esas palabras y crear tarjetas ANKI.

Primero intenté usar para traducción Google Translate, Lingvo API etc. Pero con los servicios gratuitos no funcionó. Excedí el límite gratuito aún durante el desarrollo, además, por las condiciones de la licencia, no tenía derecho a almacenar en caché las palabras. En algún momento comprendí que necesitaba traducir las palabras por mí mismo. Al final, se escribió un módulo dsl2html al que se pueden conectar diccionarios DSL que pueden convertirlos a HTML formato.

Así es como se ve un artículo de diccionario en *.html, mi versión en comparación con la versión de GoldenDict

Dos historias sobre cómo ANKI puede ayudarte a aprender un idioma extranjero y prepararte para una entrevista

Antes de buscar una palabra en los diccionarios conectados, la traigo a su forma de diccionario ( lema ) usando la biblioteca Stanford CoreNLP. De hecho, debido a esta biblioteca comencé a programar en Java y el plan inicial era escribir todo en Java, pero en el proceso encontré la biblioteca node-java con la cual se puede ejecutar código Java desde nodejs de forma relativamente sencilla y parte del código está escrito en JavaScript. Si hubiera encontrado esta biblioteca antes, no habría escrito ni una línea en Java. Otro proyecto secundario que nació en el proceso es la creación de un repositorio con documentación DSL que se encontró en línea en formato *.chm, que fue convertida y presentada de manera legible. Si el autor del archivo original, el usuario conocido como yozhic ve este artículo, le agradezco mucho por el trabajo realizado; sin su documentación, probablemente no habría logrado nada.

Entonces, tengo una palabra en inglés, su entrada de diccionario en formato *.html, solo queda unificar todo, crear artículos ANKI de la lista de palabras y añadirlos a la base de datos ANKI. Para este propósito se creó el siguiente proyecto data2anki. Puede recibir una lista de palabras, traducirlas, crear artículos ANKI *.html y registrarlos en la base de datos ANKI. Al final del artículo hay una instrucción sobre cómo utilizarlos. Hasta ahora, esta es la segunda historia donde las repeticiones espaciadas pueden ser útiles.

La segunda historia.

Todas las personas en busca de una especialidad más o menos calificada, incluidos los programadores, se enfrentan a la necesidad de prepararse para entrevistas. Muchos conceptos que se preguntan en entrevistas no se utilizan en la práctica diaria y se olvidan. En la preparación para una entrevista, al revisar apuntes, libros o manuales, me di cuenta de que se requiere mucho tiempo y atención para filtrar la información que ya conoces, porque no siempre es obvio y a veces hay que leer con atención para comprender que no es relevante. Cuando llegas al tema que realmente necesitas repasar, a menudo sucede que ya estás cansado y la calidad de la preparación se ve afectada. En un momento pensé, ¿por qué no utilizar tarjetas ANKI para esto? Por ejemplo, al tomar apuntes sobre un tema, crear de inmediato un resumen en forma de pregunta-respuesta, y luego al repasar, sabrás inmediatamente si conoces o no la respuesta a esa pregunta.

El único problema surgió en que escribir las preguntas es muy lento y tedioso. Para facilitar el proceso, en data2anki el proyecto añadí funcionalidad para convertir markdown Texto en la tarjeta ANKI. Todo lo que necesita hacer es escribir un solo archivo grande en el que las preguntas y respuestas estén marcadas con una secuencia de caracteres acordada de antemano, que permitirá al parser entender dónde está la pregunta y dónde la respuesta.

Después de que se haya creado este archivo, ejecuta data2anki y él creará las tarjetas ANKI. El archivo original es fácil de modificar y compartir, solo tienes que borrar la tarjeta(s) correspondiente(s) y ejecutar el programa nuevamente, y se generará una nueva versión.

Instalación y uso

  1. Instalación de ANKI + AnkiConnect

    1. Descargas ANKI desde aquí: https://apps.ankiweb.net/
    2. Instalas el plugin AnkiConnect: https://ankiweb.net/shared/info/2055492159

  2. Instalación data2anki

    1. Descargas data2anki del repositorio de github
      git clone https://github.com/anatoly314/data2anki
    2. Instalas las dependencias
      cd data2anki && npm install
    3. Descargas las dependencias de java https://github.com/anatoly314/data2anki/releases/download/0.1.0/jar-dependencies.zip
    4. Descomprimis jar-dependencies.zip y colocas su contenido en data2anki/java/jars

  3. Uso para la traducción de palabras:

    1. En el archivo data2anki/config.json:

      • en la clave modo escribes el valor dsl2anki

      • en la clave modules.dsl.anki.deckName y modules.dsl.anki.modelName escribes, respectivamente, Deck Name y Model Name (deben estar creados antes de crear las tarjetas). Actualmente solo se admite el modelo tipo Basic:

        tiene campos Front y Back, y creará una tarjeta. El texto que ingreses en Front aparecerá en el frente de la tarjeta, y el texto que ingreses en Back aparecerá en la parte posterior de la tarjeta.

        donde la palabra original es Front field, y la traducción estará en Back field.

        No hay ningún problema en añadir soporte para Basic (y tarjeta invertida), donde se creará una tarjeta inversa para la palabra y la traducción, en la que deberás recordar la palabra original a partir de la traducción. Solo se requiere tener tiempo y ganas.

      • en la clave modules.dsl.dictionariesPath escribes un array con los diccionarios *.dsl conectados. Cada diccionario conectado es un directorio donde se encuentran los archivos del diccionario de acuerdo con el formato: Estructura del diccionario DSL

      • en la clave modules.dsl.wordToTranslatePath escribes la ruta a la lista de palabras que deseas traducir.

    2. Ejecutas con la aplicación ANKI funcionando
      node data2ankiindex.js
    3. ¡GANANCIA!!!

  4. Uso para crear tarjetas a partir de markdown

    1. En el archivo data2anki/config.json:

      • en la clave modo escribes el valor markdown2anki
      • en la clave modules.markdown.anki.deckName y modules.dsl.anki.modelName escribes, respectivamente, Deck Name y Model Name (deben estar creados antes de crear las tarjetas). Para markdown2anki mode solo se admite el modelo tipo Basic.
      • en la clave modules.markdown.selectors.startQuestionSelectors y modules.markdown.selectors.startAnswerSelectors escribes los selectores que usas para marcar el inicio de las preguntas y respuestas respectivamente. La línea con el selector no será analizada y no aparecerá en la tarjeta, el parser comenzará a trabajar a partir de la siguiente línea.

        Por ejemplo, esta tarjeta pregunta/respuesta:

        Dos historias sobre cómo ANKI puede ayudarte a aprender un idioma extranjero y prepararte para una entrevista

        Se verá en markdown de la siguiente manera:
        #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
        

        Ejemplo tomado de aquí: 123-Preguntas de entrevista de JavaScript

        También hay un archivo con ejemplos en la carpeta del proyecto examples/markdown2anki-example.md

      • en la clave modules.markdown.pathToFile
        especifica la ruta al archivo donde se encuentra *.md archivo con preguntas/respuestas

    2. Ejecutas con la aplicación ANKI funcionando
      node data2ankiindex.js
    3. ¡GANANCIA!!!

Así es como se ve en un teléfono móvil:

Reproducir video

Resultado

Las tarjetas de ANKI obtenidas en la versión de escritorio se sincronizan sin problemas con la nube de ANKI (gratis hasta 100mb), y después puedes usarlas en cualquier lugar. Hay clientes para Android e iPhone, y también se puede usar en el navegador. Por lo tanto, si tienes tiempo que no sabes cómo aprovechar, en lugar de perderte mirando Facebook o gatos en Instagram, puedes aprender algo nuevo.

Epílogo

Como mencioné antes, esto es más un POC funcional que un producto terminado. Alrededor del 30% del estándar del analizador DSL no está implementado, por lo que por ejemplo, no se pueden encontrar todos los artículos léxicos que existen en los diccionarios, además hay una idea de reescribirlo en JavaScript, ya que se busca la «consistencia», además de que actualmente está escrito de manera no muy óptima. Ahora, el analizador construye un árbol, lo que creo que es innecesario y complica el código. En markdown2anki el modo imagen no se analizan. Trataré de trabajar poco a poco, pero, como actualmente escribo para mí mismo, primero resolveré los problemas que yo mismo encuentre, pero si alguien quiere ayudar, será bienvenido. Si hay preguntas sobre el programa, estaré encantado de ayudar a través de issues abiertos en los proyectos correspondientes. Para cualquier otra crítica y sugerencias, escríbanme aquí. Espero que este proyecto sea útil para alguien.

P.D. Si encuentras errores (que, desafortunadamente, existen), escríbeme en privado, los corregiré.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster