ホームページ > バックエンド開発 > Golang > Golang ハッカソン用のミニ言語を構築した理由

Golang ハッカソン用のミニ言語を構築した理由

Mary-Kate Olsen
リリース: 2024-11-30 20:48:22
オリジナル
261 人が閲覧しました

またハッカソン?

現時点で、私は 9 回のハッカソンに参加しており、そのうち 1 回は国際的なもので、そのうち 4 回 で優勝しました。またしても、私の後輩の Dhruv と Tushar が Golang 固有のハッカソンについて教えてくれたとき、私は Harsh を連れて行きました。そして、Harsh だけでなく、私たちのチーム Point Blank からも 40 人を引き連れたので、最終的にはハッカソンを私たち独自の社内コンテストにすることになりました (笑)。

私たちのチーム GoGoingGone (爆笑) は全員、Golang を使用した経験が豊富でしたが、単に別のツールを構築する以上のことをしたいと考えていました。私たちは革新したかったのです。そのとき、動的な構成可能なデータ パイプラインを定義するために、ミニ言語を構築してみようというアイデアが浮かびました。

導入

私はアカシュ シンです。工学部 3 年生で、バンガロール出身のオープンソース コントリビューターです。
これが私の LinkedIn、GitHub、Twitter です

Why we Built a Mini-Language for a Golang Hackathon

オンラインでは SkySingh04 という名前で活動しています。

フラクタル の紹介

Fractal は、レガシー システム (SQL データベースや CSV ファイルなど) から MongoDBAWS S3 などの最新のプラットフォームにシームレスに移行するためのデータ処理ツールとして始まりました。しかし、私たちが望んでいたのは単なる ETL ツールではありませんでした。このアイデアは、非常に柔軟でユーザーフレンドリーにし、ユーザーがシンプルな宣言構文、つまりミニ言語で検証変換ルールを定義できるようにするというものでした。ツール内。

なぜミニ言語なのか?

データ パイプライン領域のほとんどのツールが厳格な構成またはカスタム スクリプトに依存していることがわかりました。このアプローチには多くの場合、高度なプログラミングの専門知識が必要となるため、開発者以外のアクセシビリティが制限されます。宣言型ミニ言語は以下を提供します:

  1. シンプルさ: ユーザーは直感的で人間が読める形式でルールを定義します。
  2. 柔軟性: 基本的な検証から複雑な変換まで、幅広いユースケースに対応します。
  3. スケーラビリティ: ミニ言語は、新しい要件の発生に応じて進化できます。

このミニ言語は車輪の再発明に関するものではなく、データ変換と検証を合理化するための抽象化を提供するものでした。

これを単純な yaml ファイル構成と組み合わせることで、あるソースから別のソースに大規模にデータを処理できる、簡単に構成できるデータ パイプラインを作成できると考えました。

Why we Built a Mini-Language for a Golang Hackathon

コア: 検証と変換の構文

次の 2 つの主要な操作に重点を置き、シンプルでありながら表現力豊かになるように構文を設計しました。

  1. 検証ルール これらにより、受信データがさらに処理される前に特定の品質基準を満たしていることが保証されます。例えば:
   FIELD("age") TYPE(INT) RANGE(18, 65)
   FIELD("email") MATCHES(EMAIL_REGEX)
   FIELD("status") IN ("active", "inactive")
ログイン後にコピー
  1. 変換ルール これらにより、データの強化や再構築が可能になります。例えば:
   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)
ログイン後にコピー

この抽象化により、ユーザーは最小限の労力で多様なデータセットを処理できるようになり、生産性が向上し、複雑さが軽減されました。

この言語のレクサーとパーサーを作成する方法を考えている最中に、GoFr.dev のチームは私たち全員を 2 階のストレス解消セッションに連れて行ってくれました。それは深夜のシャライとジャム セッションでいっぱいでした。

ハッカソンでフラクタルを構築する

ハッカソンはミニ言語を作成するだけではありませんでした。また、Fractal が次の状態になるように、周囲のインフラストラクチャも構築する必要がありました。

  1. 拡張可能: JSON、CSV、SQL データベース、メッセージ キューなどの複数の入出力形式をサポートします。
  2. 構成可能: パイプライン ワークフローを定義するための YAML ベースの構成。ミニ言語をシームレスに統合します。
  3. 堅牢: LOG_AND_CONTINUE や STOP などのオプションを使用してエラーを適切に処理します。

作業を 4 つのモジュールに分割しました:

  • ミニ言語実装: カスタム構文を解釈するレクサーとパーサーを設計します。
  • データ統合: 一般的なデータ ソースと宛先のサポートを追加します。
  • パイプライン エンジン: 検証、変換、エラー処理を調整します。
  • CLI インターフェイス: パイプラインを定義および実行するためのシンプルなインターフェイスを提供します。

私たちが直面した課題

  1. 構文の設計 シンプルさと柔軟性のバランスを取るのが課題でした。構文を完成させるために何度も繰り返しました。
  2. パーサーの構築 Golang でカスタム レクサーとパーサーを実装するのは時間はかかりましたが、やりがいがありました。
  3. リアルタイムフィードバック ミニ言語でユーザーをガイドするための意味のあるエラー メッセージが提供されるようにすることは、使いやすさにとって重要でした。
  4. 時間制限 ハッカソン環境でこの規模のツールを構築するには、正確な計画とシームレスな調整が必要でした。

その後、何が起こったのでしょうか?

GO for GOFR ハカソンでは好成績を収めたにもかかわらず、最終評価では重大な課題に直面しました。審査員は録画したデモに加えてライブ デモンストレーションを要求しましたが、残念ながらライブ実行中にパーサー ロジックで予期しないバグが発生しました。わずか 24 時間以内に堅牢なカスタム パーサーを構築するという複雑さを考えると、これは野心的な開発機能であり、録画されたデモでその機能が紹介されましたが、時間の制約の下で 100% の精度を達成するのは難しいことが判明しました。この問題により、最終的に最優秀賞を逃してしまいました。しかし、それでも私たちの努力は高く評価され、私たちのチームの明確なビジョンと説得力のある成果により、私たちの可能性と創意工夫を強調する「ベストピッチ」の栄誉を獲得しました。

それでハッカソンか?

ハッカソンは、多くの場合、限界を押し広げ、未知の領域を探索することを目的としています。 Fractal は、データ処理ツールをアクセスしやすく、モジュール式で開発者にとって使いやすいものにすることで、データ処理ツールの動作方法を再定義するという私たちの試みでした。

これ以上に同じ志を持った人々が私と一緒にこの仕事に取り組んでくれることを望むことはできませんでした。間違いなく最高で勤勉なチームメイトです。次のハッカソン、あえて言えば、RUST ベースのハッカソンに参加するきっかけを楽しみにしています。 xD

GitHub で Fractal をチェックしてください

Why we Built a Mini-Language for a Golang Hackathon スカイシン04 / フラクタル

柔軟で構成可能なデータ処理ツール

フラクタル

Fractal は、GoFrGolang で構築された柔軟で構成可能なデータ処理ツールです。 Fractal は、複数のソースからのデータの取り込みを処理し、強力な変換と検証を適用して、幅広い宛先に出力を配信するように設計されています。 Fractal を使用すると、低レベルの詳細を管理する必要なく、複雑なデータ ワークフローを自動化できます。 プロジェクトで新しい統合を設定するためのドキュメントは次のとおりです:

検証および変換ルールのカスタム構文ドキュメント

1.概要

カスタム構文を使用すると、ユーザーは次のことが可能になります。

  1. 受信データを検証して、事前定義された条件を満たしていることを確認します。
  2. 目的の形式、構造、要件に合わせてデータ フィールドを変換します。
  3. データ処理パイプラインの柔軟なエラー処理戦略を定義します。

ルールは、JSONYAMLCSVSQL データベース、メッセージ ブローカー、または クラウドサービス.


2.検証ルール

検証ルールにより、データが特定の品質と整合性の要件を満たしていることが保証されます。

GitHub で表示


ピッチデッキ: ドライブリンク

または、ご自身で試してみて、ご意見をお聞かせください!

Why we Built a Mini-Language for a Golang Hackathon

以上がGolang ハッカソン用のミニ言語を構築した理由の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート