E-Dobavkiは、学生が作成したJavaおよびSpring Bootの食品サプリメント検索サービスです。

はじめに



過去2年近く、私はキエフのIT学校の1つでプログラミングを教えてきました。 私は楽しみのためにこれをやった。 プログラミングに関するブログを書いていたが、その後放棄された。 しかし、関心のある人々に有用なことを伝えたいという欲求は消えていません。







私の主な言語はJavaです。 モバイルゲーム、無線通信用ソフトウェア、およびさまざまなWebサービスについて書いた。 そして、私は特にJavaを教えています。







ここで、最後のグループのトレーニングの話をしたいと思います。 学習から実用的なWebサービスの作成に至るまでの経緯。 栄養補助食品を見つけるための便利なWebサービス。 無料、広告、登録、SMSなし。







サービス自体はここにあります-E-Dobavki.com













このプロジェクトは教育的なものであり、広告は含まれていません。 この出版物から理解できるように、そのようなプロジェクトへのリンクを提供できます。







プロジェクト自体を説明する前に、グループトレーニングのプロセスについて少し説明してください。これがないと、写真は不完全になります。







勉強の9ヶ月



私が教えている学校では、Javaコースは2つのパートに分かれています。 合計で、コースは約9か月かかり、すべての中断(年末年始、中間プロジェクトの作成時間)があります。







最初の部分では、生徒にYPの基本概念を紹介します。 変数、メソッド、OOPの基本、これらすべて。







コースの2番目の部分では、学生はJavaでの記述方法を多少なりとも理解しており、「大人」の技術スタックが与えられると規定しています。 すべてSQLで始まり、JDBC、Hibernateで始まります。 次に、HTTP、サーブレット。 さらに春、gitとmavenについて少し。 そして、学生は最終プロジェクトを書きます。







すべてのトレーニングはモジュールに分かれています。 週に2回クラスを実施しました。 1レッスンの期間は2時間です。







私の学習アプローチ



5つのグループをリリースしました。 2年間は大変に思えますが、私はほとんど常に2つのグループを並行して率いていました。







さまざまなアプローチを試しました。







最初のオプションは、1つのペアが理論を備えたプレゼンテーションで際立っていることです。 2番目のペアは純粋な練習です。 このアプローチは何とか機能しましたが、私にとっては効率はあまり良くありませんでした。







私が今まで取り組んでいる2番目の選択肢は、理論全体をペアに捧げることではありません。 代わりに、理論の短いセクションを5〜10分間混合し、すぐに実用的な例を使用して修正します。 このアプローチはより効果的です。







十分な時間があれば、学生を私の場所に呼び、ラップトップに座って、彼ら自身が実際的な例を作ります。 クールに動作しますが、残念ながら時間がかかります。







すべてが終わりに達するわけではない



私にとっての発見は、グループ全体がコースの終わりに達していないという事実でした。







私の観察によれば、最終ドラフトを書く学生は半数にすぎません。 ほとんどはコースの最初の部分で除去されます。 そして、2番目の部分に達した人は、通常落ちません。







彼らはさまざまな理由で去ります。







1つ目は複雑さです。 彼らが何と言っても、Javaは最も簡単な言語ではありません。 最も単純なプログラムでさえ書くには、クラス、メソッドの概念を理解する必要があります。 また、なぜpublic static void main(String [] arg)を記述する必要があるのか​​を理解するには、さらにいくつかの概念を理解する必要があります。







これを、私を含む多くの人から始めたTurbo Pascalと比較してください。







begin writeln(" "); end.
      
      





私の知る限り、この問題を解決するために、学校は追加のテストを導入します。 今では誰もがJavaを学ぶことができるわけではありません。 これは構想段階ですが、ステップは明らかに正しいものです。







2番目の理由は、次の図のようなものです。













多くの人は、プログラミングは多くのテキストを印刷し、そのために多くのお金を得るときだと考えます。 コピーライターとして、より多くのお金だけ。







現実は少し異なります。 多くのルーチンコード、明白でないバグ、継続的な学習プロセス。 これは興味深いですが、誰にとってもそうではありません。







そのような統計。 最初は気分を害しました。何か間違ったことをしているのではないかと思いました。 今、私はほとんどのコースで同じ統計について理解しています。 今はこれについて心配していませんが、興味のある人たちに教えています。







サービスアイデア



学生がフルコースを修了したら、最終プロジェクトを作成します。 さまざまなアイデアがありました。 提供されたToDoリスト、プロジェクト管理プロジェクト、その他。







シンプルで便利なものにしたかった。 私の基準は簡単でした-私と私の友人はそれを使用できます。 これらの要件の下で、食品添加物を見つけるためのWebサービスが提供されました。







アイデアはシンプルです。 店で製品を購入すると、E-shnuyuサプリメントが表示されます。 コードによれば、それがどれほど危険かは明らかではありません(多くの国で禁止されている危険な添加物があります)。







サイトを開き、サプリメントの名前(代替名の1つである番号)を入力して、サプリメントの概要を取得します。













同様のプロジェクトがあります。 情報を常に正しく表示するとは限りませんが、添加物をGoogleに取り込むこともできます。







しかし、プロジェクトは教育的なものであるため、上記の困難は私たちを止めませんでした:)







実装



誰もがGithubのプロジェクトのソースコードであるJavaで書きました。







私を含めて7人でした。 誰もがプルリクエストを行い、私またはグループの別の人がこのプルリクエストを受け入れました。







プロジェクトの実装には約1か月かかりました。アイデアの発言から現在の状態までです。







添加物の解析



データベース(エンティティ、リポジトリなど)の周りのバインディングの基本的な作成とは別に、学生の1人が最初に行ったのは、既存の情報サイトからの添加物の解析です。







これは、残りのポイントをテストするために必要でした。 データベースにデータを入力するために追加のコードは必要ありません。 いくつかの添加物をすばやくスパーリングすることにより、UI、ソート、フィルタリングをさらにテストすることができました。







Spring Bootでは、複数のプロファイルを作成できます。 プロファイルは設定ファイルです。







開発環境では、ローカルH2 DBMSとデフォルトのHTTPポート(8080)を持つプロファイルを使用しました。 したがって、アプリケーションが起動されるたびに、データベースがクリアされました。 この場合のパーサーは、私たちを救ったものです。







検索とフィルター



重要なポイントは、検索とフィルタリングです。 店の人は、サプリメントコードまたは名前の一部をすばやく突き、結果を取得する必要があります。







したがって、Additiveエンティティにはいくつかのフィールドがあります。 これは、追加コード、代替名、説明です。 検索は、すべてのフィールドに対して「いいね」を一度に続けます。 [123]または[amaranth]を入力すると、同じ結果が得られます。







これらはすべて仕様に基づいて行いました。 これはSpringの一部です。これにより、基本的な検索条件(たとえば、一部のフィールドなど)を記述し、これらの条件(ORまたはAND)を組み合わせることができます。







多数の仕様を記述することにより、「説明に[赤]という単語が含まれるすべての危険な染料添加剤」などの複雑なクエリを要求できます。







Springデータベースを操作するという点では、非常に便利なようです。 これは、複雑なクエリを処理する場合に特に当てはまります。 これによりオーバーヘッドが発生し、手動で記述および最適化されたSQLクエリが高速になることを理解しています。







しかし、すべてを事前に最適化する必要はないという見方もしています。 最初のバージョンが起動して動作し、個々の部品を交換できるようにする必要があります。 そして、負荷がかかった場合-書き換える必要がある個別の部分です。







セキュリティ



すべてがシンプルです。 ADMINロールを持つユーザーがいます。ユーザーは添加物を編集、削除、新しい添加物を追加できます。







また、他のユーザー(登録済みまたは未登録)がいます。 サプリメントのリストを表示し、適切なサプリメントを検索することしかできません。







権利を分離するために、Spring Securityが使用されました。 ユーザーデータはデータベースに保存されます。







ユーザーは登録できます。 今では何も提供しません。 学生がサービスの開発を続け、パーソナライズされた機能を導入する場合、登録は便利です。







適応性とブートストラップ



次のポイントは適応性です。 私たちのサービスの場合(少なくとも私たちが見たように)、ほとんどのユーザーは携帯電話を使います。 また、モバイルからは、サプリメントをすばやく表示する必要があります。







CSSに悩まされないように、Bootstrapを使用しました。 安くて、陽気で、まともです。







完璧なインターフェースとは言えません。 メインページはさらに小さく、添加剤の詳細な説明のページは狭く、携帯電話では幅を広げる必要があります。







私は最低限、仕事に干渉しようとしたとしか言えません。 これはまだ学生プロジェクトです。 そしてもちろん、彼らはそのような瞬間を後で修正することができるでしょう。







ミニッツSEO最適化



2年以上の間、ウェブサイトやSEOに関連するすべてのことで忙しかったため、少なくとも基本的なSEOの最適化がなければプロジェクトを立ち上げることができませんでした。







実際、各サプリメントのテンプレート生成のタイトルと説明を作成しました。 URLはほとんどCNCですが、短くすることもできます。







出席カウンターも追加しました。 検索エンジンからのアラートを追跡するサイトをYandex WebmasterおよびGoogle Search Consoleに追加しました。







これでは十分ではありません。 また、完全なインデックス作成のためにrobots.txtとsitemap.xmlを追加する必要があります。 しかし、これも学生プロジェクトです。 私は彼らに何をする必要があるかを伝え、彼らが望むなら彼らはそうするでしょう。







SSL証明書を添付する必要があります。 無料のLet's Encryptも同様です。 Spring Bootでこれを行いました。 難しいことではなく、PSの信頼が高まっています。







プロジェクトの次のステップ



さらに実際には、選択は人次第です。 プロジェクトの最初のアイデアには、添加物へのリンクを含む製品データベースも含まれていました。







「スニッカー」と入力して、含まれている栄養補助食品の種類を確認します。







プロジェクトの開始時でさえ、私たちには製品がないことを知っていました:)したがって、私たちは添加物から始めました。







これで、製品を固定し、追加を導入できます。 パン。 大規模なデータベースの場合、ユーザーが見つかります。







展開



このプロジェクトは、Aruba CloudのVPSにデプロイされました。 これは、私たちが見つけることができる最も安いVPSです。 私は自分のプロジェクトでこのプロバイダーを1年以上使用していますが、嬉しく思います。







VPSの仕様:1 GB RAM、1 CPU(周波数はわかりません)、20 GB SSD。 私たちのプロジェクトでは、これで十分です。







プロジェクトは通常のmvn cleanパッケージに移行します。 fat jarは、すべての依存関係を持つ実行可能ファイルであることがわかります。







これを少し自動化するために、bashスクリプトをいくつか書きました。







最初のスクリプトは古いjarファイルを削除し、新しいjarファイルを収集します。







2番目のスクリプトは、組み立てられたjarを開始し、必要なプロファイルの名前を渡します。 このプロファイルには、データベース接続情報が含まれています。







DB-同じVPS上のMySQL。







プロジェクトの完全な再起動は次のとおりです。









この手順には3分かかります。 私には、このような小さなプロジェクトには合理的な選択のようです。







難しさ



プロジェクトを作成する際の主な困難は、本質的に組織化でした。







プログラミングできるように見えるが実際にはそうではない人々のグループがあります。 彼らは何かを知っていますが、それを実際に適用することはできません。 そして、彼らは1ヶ月でプロジェクトを行う必要があります。







このグループの条件付きチームリーダーを強調しました。 彼は、タスクのリストでGoogleドキュメントをリードし、タスクを配布し、採用を制御しました。 彼はプルリクエストも受け入れました。







また、私は学生にプロジェクトで行われた作業について毎晩短いレポートを書くように頼みました。 何もしませんでした-わかりましたので、「何もしなかった」と書いてください。 これは、少し緊張させる素晴らしい練習です。 残念ながら、全員がこのルールに従ったわけではありません。







このすべての運動の目標は単純でした。 チームを結成しますが、少しの間ですが、一緒に働きます。







私は彼らに彼らの仕事の重要性を感じてもらいたいと思いました。 彼らは真空で球状のコードを書かないことを理解してください。 そして、人々が使用するプロジェクトを一緒に何をしますか。







最初の1週間か2週間は積み上げでした。 ゆっくりと作成されたエンティティ、小さなコミット。 少しずつ、私はそれらをかき立て、仕事はさらに楽しくなりました。 チャットは活発になり、生徒は追加を提案しました。







目標は達成されたと思います。 プロジェクトは完了し、チームで少し経験を積むことができました。 友達に見せることができる目に見える具体的な結果があり、さらに発展させることができます。







結論



学習は面白いです。







各ペアの後、私は感情的に動揺しました。 各ペアをユニークにし、最大限の知識を伝えようとしています。







私がトレーニングしているグループが決勝に到達するのは素晴らしいことです。 特にクールなのは、「私は仕事を得た、すべてのルール、ありがとう」と書いているときです。 最初は最大のお金ではないにしても、それを後輩にしましょう。 しかし、最も重要なことは、彼らは彼らの欲求に向かって一歩を踏み出し、彼らは成功しました。







記事は非常に膨大であることが判明しましたが、もちろん、すべてのポイントを明らかにすることはできませんでした。 したがって、コメントに質問を書いてください。








All Articles