


Pourquoi nous avons créé un mini-langage pour un hackathon Golang
Nov 30, 2024 pm 08:48 PMEncore un hackathon ?
à ce stade, j'ai participé à 9 hackathons, l'un d'eux étant international, gagnant même à 4 d'entre eux. Là encore, lorsque mes juniors Dhruv et Tushar m'ont parlé d'un hackathon spécifique à Golang, j'ai entra?né Harsh avec nous parce que pourquoi pas. Et pas seulement Harsh, j'ai entra?né 40 personnes de notre équipe Point Blank, ce qui a fini par faire du hackathon notre propre compétition interne haha.
Nous tous dans notre équipe GoGoingGone (lmao) avons eu une bonne expérience de travail avec Golang, mais nous voulions faire plus que simplement créer un autre outil. Nous voulions innover. C'est à ce moment-là que l'idée est venue : créons un mini-langage pour définir des pipelines de données dynamiques et configurables.
Introduction
Je m'appelle Akash Singh, étudiant en troisième année d'ingénierie et contributeur Open Source de Bangalore.
Voici mon LinkedIn, GitHub et Twitter
Je m'appelle SkySingh04 en ligne.
Présentation de Fractale
Fractal a commencé comme un outil de traitement de données permettant une migration transparente des systèmes existants (comme les bases de données SQL et les fichiers CSV) vers des plates-formes modernes telles que MongoDB ou AWS S3. Mais nous voulions plus qu’un simple outil ETL. L'idée était de le rendre très flexible et convivial, permettant aux utilisateurs de définir des validation et des règles de transformation avec une syntaxe simple et déclarative : un mini-langage dans l'outil.
Pourquoi un mini-langage ?
Nous avons observé que la plupart des outils dans le domaine des pipelines de données reposent sur des configurations rigides ou des scripts personnalisés. Cette approche nécessite souvent une expertise importante en programmation, ce qui limite l'accessibilité pour les non-développeurs. Un mini-langage déclaratif fournit?:
- Simplicité?: les utilisateurs définissent les règles dans un format intuitif et lisible par l'homme.
- Flexibilité?: Il s'adapte à un large éventail de cas d'utilisation, des validations de base aux transformations complexes.
- évolutivité?: Le mini-langage peut évoluer en fonction de nouveaux besoins.
Ce mini-langage ne visait pas à réinventer la roue, mais à fournir une abstraction pour rationaliser les transformations et les validations des données.
Lorsque cela est combiné avec une simple configuration de fichier yaml, nous avons pensé avoir atteint le but de créer un pipeline de données facile à configurer, capable de traiter les données d'une source à une autre à grande échelle.
Le noyau?: syntaxe de validation et de transformation
Nous avons con?u la syntaxe pour qu'elle soit simple mais expressive, en nous concentrant sur deux opérations principales?:
- Règles de validation Ceux-ci garantissent que les données entrantes répondent à des normes de qualité spécifiques avant leur traitement ultérieur. Par exemple:
FIELD("age") TYPE(INT) RANGE(18, 65) FIELD("email") MATCHES(EMAIL_REGEX) FIELD("status") IN ("active", "inactive")
- Règles de transformation Ceux-ci permettent un enrichissement ou une restructuration des données. Par exemple:
RENAME("old_field", "new_field") MAP("status", {"0": "inactive", "1": "active"}) ADD_FIELD("processed_at", CURRENT_TIME()) IF FIELD("age") > 50 THEN ADD_FIELD("senior_discount", TRUE)
Cette abstraction a permis aux utilisateurs de traiter divers ensembles de données avec un minimum d'effort, améliorant ainsi la productivité et réduisant la complexité.
En train de déterminer comment créer le lexer et l'analyseur de ce langage, l'équipe de GoFr.dev nous a tous emmenés à l'étage pour une séance de lutte contre le stress, pleine de sharayis et de jam sessions de fin de soirée?!
Construire Fractal au Hackathon
Le hackathon ne consistait pas seulement à créer le mini-langage. Nous avons également d? construire l'infrastructure environnante, en veillant à ce que Fractal soit?:
- Extensible?: prise en charge de plusieurs formats d'entrée/sortie tels que JSON, CSV, bases de données SQL et files d'attente de messages.
- Configurable?: configuration basée sur YAML pour définir des workflows de pipeline, intégrant le mini-langage de manière transparente.
- Robuste?: Gérez les erreurs avec élégance avec des options telles que LOG_AND_CONTINUE ou STOP.
Nous avons divisé le travail en quatre modules?:
- Implémentation d'un mini-langage?: Conception du lexer et de l'analyseur pour interpréter la syntaxe personnalisée.
- Intégrations de données?: ajout de la prise en charge des sources et destinations de données communes.
- Pipeline Engine?: orchestration de la validation, de la transformation et de la gestion des erreurs.
- Interface CLI?: fournit une interface simple pour définir et exécuter des pipelines.
Les défis auxquels nous avons été confrontés
- Concevoir la syntaxe Trouver un équilibre entre simplicité et flexibilité était un défi. Nous avons itéré plusieurs fois pour finaliser la syntaxe.
- Construire l'analyseur La mise en ?uvre d'un lexer et d'un analyseur personnalisés dans Golang prenait du temps mais était gratifiante.
- Commentaires en temps réel S'assurer que le mini-langage fournisse des messages d'erreur significatifs pour guider les utilisateurs était essentiel pour la convivialité.
- Contraintes de temps Construire un outil de cette envergure dans le cadre d’un hackathon nécessitait une planification précise et une coordination transparente.
Et que s’est-il passé après ?a ?
Malgré notre solide performance au hackathon GO for GOFR, nous avons été confrontés à un défi critique lors de l'évaluation finale. Les juges ont demandé une démonstration en direct en plus de notre démo enregistrée, et malheureusement, nous avons rencontré un bug inattendu dans la logique de notre analyseur pendant l'exécution en direct. Compte tenu de la complexité de la création d'un analyseur personnalisé robuste en seulement 24 heures, il s'agissait d'une fonctionnalité ambitieuse à développer, et même si notre démo enregistrée a présenté ses fonctionnalités, atteindre une précision de 100?% dans des contraintes de temps s'est avéré difficile. Ce contretemps nous a finalement co?té le premier prix. Cependant, nos efforts étaient toujours très appréciés, et la vision claire et la prestation convaincante de notre équipe nous ont valu l'honneur du ? Meilleur pitch ?, soulignant notre potentiel et notre ingéniosité.
Alors les Hackathons, hein ?
Les hackathons consistent souvent à repousser les limites et à explorer des territoires inexplorés. Fractal était notre tentative de redéfinir le fonctionnement des outils de traitement de données, en les rendant accessibles, modulaires et conviviaux pour les développeurs.
Je n'aurais pas pu demander à un groupe de personnes partageant les mêmes idées de travailler avec moi sur ce projet, des coéquipiers absolument meilleurs et travailleurs, sans l'ombre d'un doute. Dans l'attente de ce qui m'amène à mon prochain hackathon, oserais-je dire, un hackathon basé sur RUST?? xD
Découvrez Fractal sur GitHub
CielSingh04
/
fractale
Un outil de traitement de données flexible et paramétrable
Fractale
Fractal est un outil de traitement de données flexible et configurable construit avec GoFr et Golang. Fractal est con?u pour gérer l'ingestion de données provenant de plusieurs sources, appliquer des transformations et des validations puissantes et fournir des résultats vers un large éventail de destinations. Avec Fractal, vous pouvez automatiser des flux de données complexes sans avoir à gérer des détails de bas niveau Voici la documentation pour mettre en place une nouvelle intégration dans votre projet?:
Documentation de syntaxe personnalisée pour les règles de validation et de transformation
1. Aper?u
La syntaxe personnalisée permet aux utilisateurs de?:
- Validez les données entrantes pour vous assurer qu'elles répondent aux conditions prédéfinies.
- Transformez les champs de données pour les adapter aux formats, structures ou exigences souhaités.
- Définissez des stratégies flexibles de gestion des erreurs pour les pipelines de traitement de données.
Les règles peuvent être écrites pour n'importe quelle source ou destination de données, telles que JSON, YAML, CSV, Bases de données SQL, Courtiers de messages, ou Cloud Prestations.
2. Règles de validation
Les règles de validation garantissent que les données répondent à des exigences spécifiques en matière de qualité et d'intégrité.
Pitch Deck?: Lien vers le lecteur
Ou essayez-le vous-même et dites-nous ce que vous en pensez?!
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

GO compile le programme dans un binaire autonome par défaut, la raison principale est la liaison statique. 1. Déploiement plus simple: aucune installation supplémentaire de bibliothèques de dépendances, ne peut être exécutée directement sur les distributions Linux; 2. 3. Prévisibilité et sécurité plus élevées: éviter les risques provoqués par les changements dans les versions externes de la bibliothèque et améliorer la stabilité; 4. Flexibilité de fonctionnement limitée: Impossible de mise à jour à chaud des bibliothèques partagées, et se recompiler et le déploiement sont nécessaires pour corriger les vulnérabilités de dépendance. Ces fonctionnalités sont adaptées aux outils CLI, aux microservices et à d'autres scénarios, mais des compromis sont nécessaires dans les environnements où le stockage est restreint ou repose sur une gestion centralisée.

GoEnsuresMemorySafetywithoutmanual Management ThroughhroughAutomaticGarBageCollection, nopointeraRITHMetic, SafeConcurrency, AndruntimeCkecks.first, Go’sgarBageColEctorAutomAccilmatmestsunusedMemory, empêchant le sanddanglingpoiners.

Pour créer un canal tampon dans GO, spécifiez simplement les paramètres de capacité dans la fonction de faire. Le canal tampon permet à l'opération d'envoi de stocker temporairement les données en cas de récepteur, tant que la capacité spécifiée n'est pas dépassée. Par exemple, Ch: = Make (Chanint, 10) crée un canal tampon qui peut stocker jusqu'à 10 valeurs entières; Contrairement aux canaux non frappés, les données ne seront pas bloquées immédiatement lors de l'envoi, mais les données seront temporairement stockées dans le tampon jusqu'à ce qu'elles soient enlevées par le récepteur; Lorsque vous l'utilisez, veuillez noter: 1. Le réglage de la capacité doit être raisonnable pour éviter les déchets de mémoire ou le blocage fréquent; 2. Le tampon doit empêcher l'accumulation de problèmes de mémoire indéfiniment dans le tampon; 3. Le signal peut être passé par le type de chantruct {} pour enregistrer les ressources; Les scénarios courants incluent le contr?le du nombre de modèles de concurrence et de consommation producteur et de différenciation

GO est idéal pour la programmation système car il combine les performances des langages compilés tels que C avec la facilité d'utilisation et la sécurité des langages modernes. 1. En termes d'opérations de fichiers et de répertoires, le package OS de GO prend en charge la création, la suppression, le renommage et la vérification si les fichiers et les répertoires existent. Utilisez OS.Readfile pour lire l'intégralité du fichier dans une ligne de code, qui convient à l'écriture de scripts de sauvegarde ou d'outils de traitement de journal; 2. 3. En termes de réseau et de concurrence, le package net prend en charge la programmation TCP / UDP, la requête DNS et les ensembles originaux.

Dans le langage GO, l'appel d'une méthode de structure nécessite d'abord de définir la structure et la méthode qui lie le récepteur et l'accès à l'aide d'un numéro de point. Après avoir défini le rectangle de structure, la méthode peut être déclarée via le récepteur de valeur ou le récepteur de pointeur; 1. Utilisez le récepteur de valeur tel que Func (Rrectangle) Area () Int et appelez directement-le via rect.area (); 2. Si vous avez besoin de modifier la structure, utilisez le récepteur de pointeur tel que SetWidth (R * rectangle) de Func (R * R * 3. Lors de l'intégration de la structure, la méthode de structure intégrée sera améliorée et peut être appelée directement par la structure extérieure; 4. GO n'a pas besoin de forcer l'utilisation de Getter / Setter,

Dans GO, une interface est un type qui définit le comportement sans spécifier l'implémentation. Une interface se compose de signatures de méthode, et tout type qui implémente ces méthodes satisfait automatiquement l'interface. Par exemple, si vous définissez une interface de haut-parleur contenant la méthode Speak (), tous les types qui implémentent la méthode peuvent être considérés comme haut-parleur. Les interfaces conviennent à la rédaction de fonctions communes, aux détails de l'implémentation abstrait et à l'utilisation d'objets simulés dans les tests. La définition d'une interface utilise le mot-clé d'interface et répertorie les signatures de la méthode, sans déclarer explicitement le type pour implémenter l'interface. Les cas d'utilisation courants incluent les journaux, le formatage, les abstractions de différentes bases de données ou services et des systèmes de notification. Par exemple, les types de chiens et de robots peuvent implémenter des méthodes Speak et les transmettre à la même Anno

Dans le langage GO, les opérations de cha?ne sont principalement implémentées via le package des cha?nes et les fonctions intégrées. 1.Strings.Contains () est utilisé pour déterminer si une cha?ne contient une sous-cha?ne et renvoie une valeur booléenne; 2.Strings.Index () peut trouver l'emplacement où la sous-cha?ne appara?t pour la première fois, et s'il n'existe pas, il renvoie -1; 3.Strings.ReplaceALL () peut remplacer toutes les sous-cha?nes correspondantes et peut également contr?ler le nombre de remplacements via des cha?nes.replace (); 4.Len () La fonction est utilisée pour obtenir la longueur des octets de la cha?ne, mais lors du traitement de l'Unicode, vous devez prêter attention à la différence entre les caractères et les octets. Ces fonctions sont souvent utilisées dans des scénarios tels que le filtrage des données, l'analyse de texte et le traitement des cha?nes.

ThegoiopackageProvidesInterfacesLikeReaderAndWritertoHandlei / Ooperations UniformlyAcrossources.1.io.Reader'sreadMethoDenablesReadingFromvariousSourcesuchasFilesorHttpResponsses.2.Io.writer'swritethodfacilita
