初めてのハッカソンで優勝 — 製品と学んだ教訓
はじめに
今週、私は初めてハッカソンに参加しました — 2日間のオンラインイベントで、名前は 破壊的イノベーションのための開発 約100チーム(各1〜4人)が参加しました。20時間近くのコーディング、多くの学び、そして数夜の不眠の後、私は SurgeLingoを構築しました。これは革新的な言語学習ツールで、「ベストソロハック」賞、カナダのテックサミットのチケット、Beatsヘッドフォンなどを獲得しました。ここでは、学んだこと、製品について、そして最後にいくつかのヒントを紹介します。
SurgeLingoについて
これは元々 ハッカソン提出ページに投稿されました.
インスピレーション
私自身も言語学習者で、初心者や中級者の段階では、理解しやすくアクセスしやすいコンテンツを見つけるのがいつも難しいと感じていました。ほとんどの外国語リソースは長すぎたり、難しすぎたり、入手が困難だったりしました。
私はこの問題を解決するためにSurgeLingoを作りました。何百万もの文章を含むオープンソースの文章データベースを使用して、言語、難易度、タグなどユーザーが選択した設定に基づいてパーソナライズされた文章のフィードを提供します。これらの文章は徐々に難しくなり、クリック一つで学習して保存することができます。
オンライン形式であることでアクセシビリティの問題を解決し、個別化された応答で難易度の問題を解決し、200文字の制限により、バス停で1分待つ間や自宅で集中的に1時間勉強する際も、SurgeLingoで簡単に学習できます。
何をするのか
以下から文章を抽出し Tatoeba、SurgeLingoは膨大なタグ付き文章、つまり「サージ」のデータベースを作成します。このプラットフォームを使用することで、ユーザーは学習を「急上昇(サージ)」させるからです。これらの文章は自然言語処理によって活用されていない形に変換され、ユーザーの既知の単語と比較して、パーソナライズされた結果を表示することができます。
ユーザーは、例えば頻度リストから、自分の単語リストをアップロードして、これらの既知の単語を生成することができます。文を表示するたびに、新しく学んだ赤い未知の単語をクリックしてデータベースに追加することもできますし、文を学習した後に単純に文全体を既知としてマークすることもできます。
より集中したセッションのために、ユーザーは返される文の難易度を変更することができます(例えば、文の内容の90%が既知のEasyから、70%が既知のDifficultまで)。また、文内の特定の単語、タグ、著者などを指定することで、特定のタイプのsurgeを検索することもできます — 語彙学習に最適です 文脈の中で. フラッシュカードだけで学習しても、SurgeLingoが提供するように新しい単語を文脈の中で見ない限り、本当の成長にはつながりません。文脈の中で見ることで、その意味が固まり、使い方が示されるからです。
以下にsurgeの例を示します。
さらに、ユーザーは自分で書いたsurgeを投稿することでコミュニティに貢献しています。
スタック
短い期間にもかかわらず、これは私が取り組んだ中で最も野心的なプロジェクトの1つでした。
この SurgeLingoの文の例 はNuxtとVue 2で構築されました。スタイリングにはTailwindCSSが使用され、モジュールは nuxt-auth
と nuxt-axios
スムーズなユーザー認証とバックエンドへのリクエストに使用されました。
この フロントエンド FlaskというPythonのマイクロフレームワークで構築され、PostgreSQLデータベースを使用してユーザー情報、文章(「サージ」)などを保存していました。
この nltk
Pythonパッケージである自然言語処理ライブラリが活用され、サージ文とユーザーの単語帳が ステム化され、つまり単語を語根の形に還元するプロセスを経ることができました。これにより、活用のある言語のサポートが可能になりました。Flaskを拡張したり、コンテンツ生成を可能にする他の多くのパッケージも使用されました。
チャレンジ
NuxtとFlaskの組み合わせは珍しく、バックエンドAPIとフロントエンドを調整するために多くの問題について深く掘り下げる必要がありました。
これらの中で最も明白だったのはユーザー認証でした。クッキーベースの暗黙的なリフレッシュシステムを設定する必要があり、フロントエンドでの認証に使用していたライブラリは nuxt-auth
Flaskを念頭に置いて作られていませんでした。そのため、モジュールの設定をカスタマイズし、JWTトークンの受け渡しに対してあまり知られていないアプローチを取る必要がありました。
もちろん、時間の問題もありました。一人で作業し、週末にいくつかの活動もあったため、プロジェクトの開発をやりくりするのは難しかったです。優先度の低い「About Us」やユーザープロファイルなどのページには「近日公開」のコンテンツを残さざるを得ませんでした。
学んだこと
文章分析がうまく機能するように、複数の言語でのすべての単語の語幹処理を行う必要があったため、ワードプロセッシングについて多くのことを学びました。
同様に、Flaskを通じてPostgreSQLの管理について、以前は知らなかったいくつかの側面を探求しました。例えば BaseQuery
s、高度なフィルタリングなどです。この新たに得た知識は、将来的に間違いなく役立つでしょう。
さらなるリンク
ヒント
ハッカソンは初めてだったので、多くのことが新鮮でした — 以下は、始める前に聞いておきたかったことです。
コア機能に集中する
未登録ユーザー向けのホームページの構築に馬鹿げた時間(数時間)を費やしました — それが動画や写真の上位20%以外では表示されないのに。これにより、ウェブアプリの本当に重要な機能の開発に費やす時間が削られてしまいました — そして、コア機能の一部を構築する際に困難に直面したとき、失った時間がストレスの原因となりました。
したがって、私の最初の提案は、審査員が見る可能性の低い装飾品を考慮せずに、基礎から構築することです。
404ページや空のリンク(ユーザー設定など)をいくつか残したままにしました — 誰かがそれらを見る可能性はほとんどないでしょう。
行動計画を立てる
これは短期のハッカソンだけでなく、どんなプロジェクトにも当てはまります — 重要なのは知ることです 何 何を構築し、どのように構築するかを、実際に構築を始める前に把握することです。週末の半ばごろに時系列のTODOリストを作成しましたが、目の前にタスクが並べられていることで開発プロセスが加速し、バグの特定にも役立ちました。
製品を生き生きと描写する
ほとんどのハッカソンにはテーマがあります — あなたの提出物がそのテーマ/問題にどのように取り組んでいるかを、できるだけ目を引くような感情的な言葉を使って強調してください。もちろん、 嘘をつかないでください 製品について — でも、ほんの少しで十分です。
さらに、充実した提出フォームも素晴らしい効果があると思います。私は数ページ分を書きましたが、これに費やした30分は、関数を書くのにさらに30分費やすよりも価値があったと思います。
助けを求めることを恐れない
ハッカソンのリーダーたちは非常に熱心で親切でした — 明らかに初心者の質問に対しても。そして、競争的な雰囲気はありますが、他のハッカーたちも通常、助けを提供したり、ハッカソンに関連した簡単な質問に答えたりすることを喜んでいます。
時間を意識する
タイムフレームの要件には、提出詳細の記入、 ビデオの作成 (これにかかる時間を本当に過小評価していました。プレゼンテーションの作成、適切な録画、アップロードに約90分かかりました)、オープニングセレモニーの視聴 — そしてもちろん、睡眠も含まれます。
私の完成は非常にギリギリで、これがバグとストレスの両方を引き起こしました。最終締め切りの少なくとも2時間前にはすべてのコーディングを終えることを目指すことをお勧めします — 残りの時間は、ビデオ中に発生する可能性のあるバグを探したり、録画ソフトウェアをセットアップしたり、写真を撮ったり、文章をまとめたりするのに使ってください。
結論
全体的に、これを構築するのはとても楽しかったですが、時間的制約によってややストレスがありました — ビデオエントリーにそれが反映されているかもしれません。SurgeLingoの開発を通じて多くのことを学び、将来的な可能性があると考えています — 引き続き取り組むことを真剣に検討しています。
ハッカソンへの参加は素晴らしく、翌朝、カテゴリーで優勝したこと — そして素晴らしい賞品をいただいたことを知って、さらに特別なものになりました!
これについて読んでヒントを見ていただくことで、お役に立てたことを願っています。
コメントを残す