6 minutos de lectura

Introducción

Esta semana, participé en mi primer hackathon — uno en línea de dos días llamado Desarrollar para Disrumpir que atrajo a cerca de cien equipos de 1 a 4 personas cada uno. Después de casi veinte horas de programación, mucho aprendizaje y un par de noches sin dormir, construí SurgeLingo, una herramienta disruptiva de aprendizaje de idiomas — que me hizo ganar 'Mejor Hack en Solitario', entradas a una cumbre tecnológica canadiense y auriculares Beats, entre otros. Aquí hay un resumen de lo que aprendí, sobre el producto y algunos consejos al final.

Acerca de SurgeLingo

Esto fue publicado originalmente en la página de presentación del hackathon.

Inspiración

Yo mismo soy un estudiante de idiomas, y cuando estaba en las etapas de principiante e intermedio, siempre me resultaba difícil encontrar contenido comprensible y accesible. La mayoría de los recursos extranjeros eran demasiado largos, difíciles o complicados de obtener.

Creé SurgeLingo para resolver esto. Utiliza una base de datos de oraciones de código abierto con millones de oraciones para proporcionar un feed personalizado de frases basado en configuraciones elegidas por el usuario, como idioma, dificultad y etiquetas. Estas oraciones se vuelven gradualmente más difíciles y se pueden aprender y almacenar con solo un clic.

El aspecto en línea resuelve el problema de accesibilidad, la respuesta individualizada resuelve el problema de dificultad, y el límite de 200 caracteres hace que sea muy fácil aprender con SurgeLingo, ya sea sentado en una parada de autobús por un minuto o estudiando intensivamente en casa durante una hora.

Qué hace

Basándose en oraciones de Tatoeba, SurgeLingo crea una base de datos masiva de oraciones etiquetadas, o 'surges' — ya que al usar la plataforma, los usuarios 'surgen' adelante en su aprendizaje. Estas oraciones se reducen a su forma no conjugada mediante procesamiento del lenguaje natural, y se pueden comparar con las palabras conocidas por el usuario para mostrar resultados personalizados.

Un usuario puede cargar su propia lista de palabras, por ejemplo de una lista de frecuencia, para generar estas palabras conocidas. Siempre que vean una oración, pueden hacer clic en una palabra desconocida en rojo que ahora han aprendido para agregarla también a su base de datos, o simplemente marcar toda la oración como conocida después de haberla estudiado.

Para una sesión más enfocada, los usuarios pueden cambiar la dificultad de las oraciones devueltas (por ejemplo, de Fácil, donde el 90% del contenido de una oración es conocido, a Difícil, donde es el 70%). También pueden buscar un tipo específico de surge especificando palabras encontradas dentro de la oración, una etiqueta, un autor, etc. — perfecto para aprender vocabulario en contexto. Simplemente aprender de tarjetas de memoria realmente no te ayudará a crecer a menos que veas las nuevas palabras en contexto (como proporciona SurgeLingo), ya que eso solidificará su significado y demostrará su uso.

A continuación puedes ver un ejemplo de un surge. alt

Además, los usuarios contribuyen a la comunidad escribiendo y enviando sus propios surges.

Tecnología utilizada

A pesar del corto plazo, este fue uno de los proyectos más ambiciosos que he emprendido.

El frontend fue construido con Nuxt y Vue 2. TailwindCSS se utilizó para el diseño, y los módulos nuxt-auth y nuxt-axios se utilizaron para una autenticación de usuario fluida y solicitudes al backend.

El backend se construyó con el microframework Python Flask y utilizó una base de datos PostgreSQL para almacenar información de usuarios, oraciones ('surges') y demás.

El nltk paquete de Python, una biblioteca de procesamiento de lenguaje natural, se aprovechó para que las oraciones surge y los bancos de palabras de los usuarios fueran stemmed, un proceso que reduce las palabras en su interior a su forma raíz. Esto permitió el soporte de idiomas que tienen conjugación. También se utilizaron una serie de otros paquetes que amplían Flask o permiten la generación de contenido.

Desafíos

Nuxt y Flask es una combinación poco común, por lo que tuve que profundizar en varios problemas para coordinar la API del backend y el frontend.

El más evidente de estos fue la autenticación de usuarios: tuve que configurar un sistema implícito de actualización basado en cookies, y la biblioteca que estaba utilizando para la autenticación en el frontend, nuxt-auth no estaba diseñada teniendo en cuenta Flask. Así que tuve que personalizar la configuración del módulo y adoptar un enfoque menos conocido para la transmisión de tokens JWT.

Otro desafío, por supuesto, fue el del tiempo. Trabajar solo y tener algunas actividades durante el fin de semana, compaginar el desarrollo del proyecto fue un reto. Tuve que dejar contenido 'próximamente' para algunas páginas que no eran prioritarias, como Acerca de Nosotros o los perfiles de usuario.

Lo que aprendí

Aprendí mucho sobre procesamiento de palabras, ya que tuve que derivar todas las palabras en varios idiomas para que el análisis de oraciones funcionara bien.

Igualmente, exploré algunos aspectos de la gestión de PostgreSQL a través de Flask que desconocía antes, como BaseQuerys, filtrado avanzado y más. Este nuevo conocimiento definitivamente será útil en el futuro.

Consejos

Siendo nuevo en los hackathons, mucho me resultaba desconocido — aquí hay algunas cosas que me hubiera gustado escuchar antes de empezar.

Enfocarse en la Funcionalidad Principal

Pasé una cantidad ridícula de tiempo (varias horas) construyendo la página de inicio para usuarios no registrados — solo para que ni siquiera se mostrara en el video o las fotos fuera del 20% superior. Esto restó tiempo que podría haber dedicado a desarrollar las características realmente centrales de la aplicación web — y cuando encontré algunas dificultades al construir partes de la funcionalidad principal, el tiempo que perdí me hizo estresarme.

Así que, mi primera sugerencia es construir desde cero, sin tener en cuenta los adornos que es poco probable que los jueces siquiera miren.

Incluso dejé algunas páginas 404 y enlaces vacíos (como la configuración del usuario) — es poco probable que alguien los vea siquiera.

Formar un Plan de Acción

Esto es evidente para cualquier proyecto, no solo para los cortos de hackathones — es importante saber qué lo que estás construyendo y cómo lo vas a construir antes de empezar a hacerlo. Creé una lista de tareas cronológica a mitad del fin de semana, y tener las tareas presentadas frente a mí aceleró el proceso de desarrollo y me ayudó a identificar errores.

Describir el Producto Vívidamente

La mayoría de los hackathones tendrán un tema: enfócate en cómo tu presentación aborda ese tema/problema usando palabras lo más llamativas y emotivas posible. Por supuesto, no mientas sobre el producto, pero un poco es suficiente.

Además, creo que un formulario de presentación bien completado hace maravillas también. Escribí un par de páginas, y creo que la media hora dedicada a esto fue más valiosa que otra media hora escribiendo algunas funciones.

No Tener Miedo de Pedir Ayuda

Los líderes del hackathon fueron increíblemente entusiastas y serviciales, incluso con algunas de mis preguntas obviamente de principiante. Y aunque hay un ambiente competitivo, los demás hackers también suelen estar dispuestos a ayudar y responder una o dos preguntas rápidas relacionadas con el hackathon.

Tener en Cuenta el Tiempo

Los requisitos del plazo incluyen completar los detalles de la presentación, crear un video (Realmente subestimé cuánto tiempo tomaría esto, construir la presentación, grabarla bien y subirla tomó casi 90 minutos), y ver la ceremonia de apertura, además de dormir, por supuesto.

Mi finalización fue extremadamente ajustada, y esto introdujo tanto errores como estrés. Sugeriría tratar de terminar con toda la codificación al menos dos horas antes de la fecha límite final — tomando el resto del tiempo para buscar errores que puedan surgir durante un video, configurar tu software de grabación, tomar fotos, hacer un resumen, etc.

Conclusión

En general, fue muy divertido construir esto, aunque el plazo causó un poco de estrés — quizás reflejado en el video de presentación. Aprendí mucho desarrollando SurgeLingo, y creo que tiene un verdadero potencial futuro — estoy considerando seriamente continuar trabajando en ello.

Participar en el hackathon fue increíble, y fue aún más especial al descubrir a la mañana siguiente que había ganado una categoría — ¡junto con algunos premios increíbles!

Espero que leer sobre esto y revisar los consejos te haya ayudado.

Deja un comentario