Lecture de 6 minutes

Introduction

Cette semaine, j'ai participé à mon tout premier hackathon - un événement en ligne de deux jours nommé Développer pour bouleverser qui a attiré environ une centaine d'équipes de 1 à 4 personnes chacune. Après près de vingt heures de codage, beaucoup d'apprentissage et quelques nuits blanches, j'ai construit SurgeLingo, un outil d'apprentissage des langues révolutionnaire - qui m'a valu le prix du "Meilleur projet en solo", des billets pour un sommet technologique canadien, et des écouteurs Beats, entre autres. Voici un compte-rendu de ce que j'ai appris, du produit, et quelques conseils à la fin.

À propos de SurgeLingo

Ceci a été initialement publié sur la page de soumission du hackathon.

Inspiration

Je suis moi-même un apprenant de langues, et quand j'étais aux stades débutant et intermédiaire, j'ai toujours trouvé difficile de trouver du contenu compréhensible et accessible. La plupart des ressources étrangères étaient soit trop longues, difficiles, ou compliquées à obtenir.

J'ai créé SurgeLingo pour résoudre ce problème. Il utilise une base de données de phrases open-source avec des millions de phrases pour fournir un flux personnalisé de phrases basé sur les paramètres choisis par l'utilisateur, tels que la langue, la difficulté et les tags. Ces phrases deviennent progressivement plus difficiles, et peuvent être apprises et stockées en un seul clic.

L'aspect en ligne résout le problème d'accessibilité, la réponse individualisée résout le problème de difficulté, et la limite de 200 caractères rend l'apprentissage avec SurgeLingo un jeu d'enfant, que ce soit en attendant le bus pendant une minute ou en étudiant intensivement à la maison pendant une heure.

Ce qu'il fait

En s'appuyant sur des phrases de Tatoeba, SurgeLingo crée une énorme base de données de phrases étiquetées, ou 'surges' — puisqu'en utilisant la plateforme, les utilisateurs 'surgissent' dans leur apprentissage. Ces phrases sont réduites à leur forme non conjuguée grâce au traitement du langage naturel, et peuvent être comparées aux mots connus d'un utilisateur pour afficher des résultats personnalisés.

Un utilisateur peut télécharger sa propre liste de mots, par exemple à partir d'une liste de fréquence, pour générer ces mots connus. Chaque fois qu'ils consultent une phrase, ils peuvent cliquer sur un mot inconnu en rouge qu'ils viennent d'apprendre pour l'ajouter également à leur base de données — ou simplement marquer toute la phrase comme connue après l'avoir étudiée.

Pour une session plus ciblée, les utilisateurs peuvent modifier la difficulté des phrases retournées (par exemple, de Facile, où 90% du contenu d'une phrase est connu, à Difficile, où ce taux est de 70%). Ils peuvent également rechercher un type spécifique de surge en spécifiant des mots trouvés dans la phrase, une étiquette, un auteur, etc. — parfait pour apprendre du vocabulaire en contexte. Apprendre uniquement à partir de cartes mémoire ne vous aidera pas vraiment à progresser, à moins que vous ne voyiez les nouveaux mots en contexte (comme le propose SurgeLingo), car cela consolidera leur signification et démontrera leur utilisation.

Ci-dessous, vous pouvez voir un exemple de surge. alt

De plus, les utilisateurs contribuent à la communauté en rédigeant et en soumettant leurs propres surges.

Stack

Malgré le court délai, ce fut l'un des projets les plus ambitieux que j'aie jamais entrepris.

Le frontend a été construit avec Nuxt et Vue 2. TailwindCSS a été utilisé pour le style, et les modules nuxt-auth et nuxt-axios ont été utilisées pour une authentification fluide des utilisateurs et des requêtes vers le backend.

Le backend a été construit avec le microframework Python Flask, et utilisait une base de données PostgreSQL pour stocker les informations utilisateur, les phrases ('surges'), et ainsi de suite.

Le nltk Un package Python, une bibliothèque de traitement du langage naturel, a été exploité pour que les phrases de surge et les banques de mots des utilisateurs soient racinisées, un processus qui réduit les mots à leur forme racine. Cela a permis de prendre en charge les langues avec conjugaison. Un certain nombre d'autres packages qui étendent Flask ou permettent la génération de contenu ont également été utilisés.

Défis

Nuxt et Flask sont une combinaison rare, et j'ai donc dû creuser profondément pour résoudre de nombreux problèmes afin de coordonner l'API backend et le frontend.

Le plus évident d'entre eux était l'authentification des utilisateurs — j'ai dû mettre en place un système de rafraîchissement implicite basé sur les cookies, et la bibliothèque que j'utilisais pour l'authentification sur le frontend, nuxt-auth n'était pas conçue en pensant à Flask. J'ai donc dû personnaliser la configuration du module et adopter une approche moins connue pour la transmission des jetons JWT.

Un autre défi, bien sûr, était celui du temps. Travailler en solo et avoir quelques activités le week-end, jongler avec le développement du projet était un challenge. J'ai dû laisser du contenu 'à venir' pour quelques pages qui n'étaient pas prioritaires, comme la page À propos ou les profils utilisateurs.

Ce que j'ai appris

J'ai beaucoup appris sur le traitement des mots, car j'ai dû radicaler tous les mots dans plusieurs langues pour que l'analyse des phrases fonctionne bien.

De même, j'ai exploré certains aspects de la gestion de PostgreSQL via Flask dont je n'étais pas au courant auparavant, tels que BaseQuerys, le filtrage avancé, et plus encore. Ces nouvelles connaissances me seront certainement utiles à l'avenir.

Conseils

Étant nouveau dans les hackathons, beaucoup de choses m'étaient étrangères — voici quelques éléments que j'aurais aimé entendre avant de commencer.

Se concentrer sur les fonctionnalités principales

J'ai passé un temps ridicule (plusieurs heures) à construire la page d'accueil pour les utilisateurs non enregistrés — pour qu'elle ne soit même pas montrée dans la vidéo ou les photos en dehors des 20% supérieurs. Cela a réduit le temps que j'ai passé à développer les fonctionnalités vraiment essentielles de l'application web — et quand j'ai rencontré des difficultés pour construire certaines parties des fonctionnalités centrales, le temps perdu m'a stressé.

Donc, ma première suggestion est de construire à partir de zéro, sans se soucier des fioritures que les juges ne regarderont probablement même pas.

J'ai même laissé quelques pages 404 et des liens vides (comme les paramètres utilisateur) — il est peu probable que quiconque les voie jamais.

Établir un plan d'action

Ceci est valable pour tout projet, pas seulement pour les courts hackathons — il est important de savoir quoi ce que vous construisez et comment vous allez le construire avant de commencer à le faire. J'ai créé une liste de tâches chronologique à mi-chemin du week-end, et avoir des tâches disposées devant moi a accéléré le processus de développement et m'a aidé à identifier les bugs.

Décrire le produit de manière vivante

La plupart des hackathons auront un thème — concentrez-vous sur la façon dont votre soumission aborde ce thème/problème en utilisant des mots aussi accrocheurs et émouvants que possible. Bien sûr, ne mentez pas à propos du produit — mais un peu va loin.

De plus, je pense qu'un formulaire de soumission bien rempli fait aussi des merveilles. J'ai écrit quelques pages — et je pense que la demi-heure passée sur cela était plus précieuse qu'une autre demi-heure à écrire des fonctions.

Ne pas avoir peur de demander de l'aide

Les organisateurs du hackathon étaient incroyablement enthousiastes et serviables — même pour certaines de mes questions évidemment débutantes. Et bien qu'il y ait une atmosphère compétitive, les autres hackers sont généralement aussi heureux d'aider et de répondre à une ou deux questions rapides liées au hackathon.

Garder le temps à l'esprit

Les exigences du calendrier comprennent le remplissage des détails de la soumission, la création d'une vidéo (J'ai vraiment sous-estimé le temps que cela prendrait, construire la présentation, l'enregistrer correctement et la télécharger a pris près de 90 minutes), et regarder la cérémonie d'ouverture — ainsi que dormir, bien sûr.

Ma fin était extrêmement serrée, ce qui a introduit à la fois des bugs et du stress. Je suggérerais de viser à terminer tout le codage au moins deux heures avant la date limite finale - en prenant le reste du temps pour rechercher les bugs qui pourraient apparaître pendant une vidéo, configurer votre logiciel d'enregistrement, prendre des photos, faire un compte-rendu, etc.

Conclusion

Dans l'ensemble, c'était très amusant de construire cela, bien que le délai ait causé un peu de stress - peut-être reflété dans la vidéo de présentation. J'ai beaucoup appris en développant SurgeLingo, et je pense qu'il a un réel potentiel d'avenir - j'envisage sérieusement de continuer à y travailler.

Participer au hackathon était incroyable, et c'était d'autant plus spécial d'apprendre le lendemain matin que j'avais gagné une catégorie - avec quelques prix formidables !

J'espère que la lecture de ceci et l'examen des conseils vous ont aidé.

Laisser un commentaire