E-Dobavki – ein Webdienst zur Suche nach Lebensmittelzusatzstoffen in Java und Spring Boot, geschrieben von meinen Studenten

Einführung

Zufälligerweise unterrichte ich seit fast zwei Jahren Programmieren an einer der IT-Schulen in Kiew. Ich habe damit angefangen, nur zum Spaß. Ich habe einmal einen Programmierblog geschrieben, dann habe ich ihn aufgegeben. Doch der Wunsch, Interessierten Nützliches zu erzählen, ist nicht verschwunden.

Meine Hauptsprache ist Java. Ich habe darauf Spiele für Mobiltelefone, Software für die Funkkommunikation und verschiedene Webdienste geschrieben. Und ich unterrichte Java.

Hier möchte ich die Geschichte der Ausbildung meiner letzten Gruppe erzählen. Wie sie vom Beginn der Schulung zum Schreiben eines funktionierenden Webdienstes gelangten. Ein nützlicher Webdienst zum Auffinden von Nahrungsergänzungsmitteln. Kostenlos, keine Werbung, Registrierung und SMS.

Der Service selbst ist hier - E-Dobavki.com.

E-Dobavki – ein Webdienst zur Suche nach Lebensmittelzusatzstoffen in Java und Spring Boot, geschrieben von meinen Studenten

Das Projekt hat pädagogischen Charakter und enthält keine Werbung. So wie ich es verstehe dieser Veröffentlichungkönnen Sie Links zu solchen Projekten bereitstellen.

Bevor ich das Projekt selbst beschreibe, erzähle ich Ihnen ein wenig über den Lernprozess der Gruppe; ohne dies wäre das Bild unvollständig.

9 Monate Ausbildung

An der Schule, an der ich unterrichte, ist der Java-Kurs in 2 Teile gegliedert. Insgesamt dauert der Kurs ca. 9 Monate, inklusive aller Pausen (Neujahrsferien, Zeit zum Verfassen von Zwischenprojekten).

Der erste Teil führt die Studierenden in die Grundkonzepte der Sprache ein. Variablen, Methoden, OOP-Grundlagen und all das Zeug.

Der zweite Teil des Kurses sieht vor, dass der Student bereits mehr oder weniger weiß, wie man in Java schreibt, und ihm einen „erwachsenen“ Technologie-Stack geben kann. Alles beginnt mit SQL, dann JDBC, Hibernate. Dann HTTP, Servlets. Als nächstes kommt der Frühling, ein wenig über Git und Maven. Und die Studierenden schreiben Abschlussarbeiten.

Alle Schulungen sind in Module unterteilt. Ich habe zweimal pro Woche Unterricht gegeben. Die Dauer einer Unterrichtsstunde beträgt zwei Stunden.

Mein Ansatz zum Lernen

Ich habe 5 Gruppen veröffentlicht. Für zwei Jahre scheint das viel zu sein, aber ich habe fast immer 2 Gruppen parallel geleitet.

Ich habe verschiedene Ansätze ausprobiert.

Die erste Möglichkeit besteht darin, dass ein Paar für eine Präsentation mit einer Theorie reserviert wird. Das zweite Paar ist reine Übung. Dieser Ansatz hat irgendwie funktioniert, war aber meiner Meinung nach nicht sehr effektiv.

Die zweite Option, zu der ich gekommen bin und an der ich jetzt arbeite, besteht darin, nicht ein ganzes Paar der Theorie zu widmen. Stattdessen mische ich kurze Theorieabschnitte für 5-10 Minuten und untermauere sie sofort mit praktischen Beispielen. Dieser Ansatz funktioniert besser.

Wenn die Zeit reicht, rufe ich die Studierenden zu mir, setze sie an meinen Laptop und sie machen selbst praktische Beispiele. Es funktioniert super, kostet aber leider viel Zeit.

Nicht jeder schafft es bis zum Ende

Eine Offenbarung für mich war die Tatsache, dass nicht die gesamte Gruppe das Ende des Kurses erreicht.

Nach meinen Beobachtungen schreibt nur die Hälfte der Studierenden die Abschlussarbeit. Die meisten davon werden im ersten Teil des Kurses beseitigt. Und wer den zweiten Teil erreicht hat, stürzt meist nicht ab.

Sie gehen aus verschiedenen Gründen.

Der erste ist die Komplexität. Egal was sie sagen, Java ist nicht die einfachste Sprache. Um selbst das einfachste Programm zu schreiben, müssen Sie das Konzept einer Klasse, einer Methode, verstehen. Und um zu verstehen, warum Sie schreiben müssen public static void main(String[] arg) Es gibt noch ein paar weitere Konzepte, die es zu verstehen gilt.

Vergleichen Sie dies mit Turbo Pascal, mit dem viele Leute angefangen haben, mich eingeschlossen:

begin
    writeln("Первая программа");
end.

Soweit ich weiß, wird die Schule dieses Problem durch die Einführung zusätzlicher Tests lösen. Jetzt kann nicht jeder Java lernen. Dies ist zwar noch im Konzeptstadium, aber der Schritt ist eindeutig der richtige.

Und der zweite Grund ist wie im Bild unten:

E-Dobavki – ein Webdienst zur Suche nach Lebensmittelzusatzstoffen in Java und Spring Boot, geschrieben von meinen Studenten

Die Leute denken oft, dass es beim Programmieren darum geht, viel Text zu tippen und viel Geld dafür zu bekommen. Wie ein Texter, nur mehr Geld.

Die Realität sieht etwas anders aus. Viel Routinecode, nicht offensichtliche Fehler, ein ständiger Lernprozess. Es ist interessant, aber nicht für jeden.

Das sind die Statistiken. Zuerst hat es mich verärgert, ich dachte, dass ich vielleicht etwas falsch gemacht habe. Jetzt verstehe ich, dass die Statistiken für die meisten Kurse ungefähr gleich sind. Jetzt mache ich mir darüber keine Sorgen mehr, sondern unterrichte die Menschen, die daran interessiert sind.

Die Idee des Dienstes

Nachdem die Studierenden den gesamten Kurs abgeschlossen hatten, war es Zeit, das Abschlussprojekt zu schreiben. Es gab verschiedene Ideen. Sie boten ToDo-Blätter, Projektmanagementprojekte und noch etwas anderes an.

Ich wollte etwas Einfaches, aber Nützliches tun. Mein Kriterium war einfach: ob meine Freunde und ich es nutzen könnten. Ein Webservice zur Suche nach Lebensmittelzusatzstoffen erfüllte diese Anforderungen.

Die Idee ist einfach. Wenn Sie ein Produkt in einem Geschäft kaufen, sehen Sie in der Zusammensetzung eine Art E-Zusatzstoff. Aus dem Code geht nicht klar hervor, wie gefährlich es ist oder nicht (und es gibt auch gefährliche Zusatzstoffe, die in vielen Ländern verboten sind).

Sie öffnen die Website, geben den Namen der Ergänzung ein (Nummer, einer der alternativen Namen) und erhalten eine Zusammenfassung der Ergänzung:

E-Dobavki – ein Webdienst zur Suche nach Lebensmittelzusatzstoffen in Java und Spring Boot, geschrieben von meinen Studenten

Es gibt ähnliche Projekte. Sie können den Zusatz auch einfach in Google eingeben, allerdings werden die Informationen nicht immer korrekt angezeigt.

Aber da das Projekt lehrreich ist, haben uns die oben genannten Schwierigkeiten nicht aufgehalten :)

Implementierung

Alle haben in Java geschrieben, Quellcode des Projekts auf Github.

Wir waren zu siebent, mich eingeschlossen. Jeder hat eine Pull-Anfrage gestellt und ich oder eine andere Person aus der Gruppe hat diese Pull-Anfrage angenommen.

Die Umsetzung des Projekts dauerte etwa einen Monat – von der Äußerung der Idee bis zum Zustand, den Sie jetzt sehen.

Parsing-Zusätze

Das erste, was einer der Studenten neben der grundlegenden Erstellung eines Frameworks rund um die Datenbank (Entitäten, Repositorys usw.) tat, war das Parsen von Add-ons einer vorhandenen Informationsseite.

Dies war notwendig, um die restlichen Punkte zu testen. Zum Füllen der Datenbank ist kein zusätzlicher Code erforderlich. Nachdem wir schnell mehrere Additive analysiert hatten, konnten wir die Benutzeroberfläche, Sortierung und Filterung weiter testen.

Mit Spring Boot können Sie mehrere Profile erstellen. Ein Profil ist eine Datei mit Einstellungen.

Für die Entwicklungsumgebung haben wir ein Profil mit einem lokalen H2-DBMS und dem Standard-HTTP-Port (8080) verwendet. Daher wurde die Datenbank bei jedem Start der Anwendung gelöscht. Der Parser hat uns in diesem Fall gerettet.

Suchen und filtern

Ein wichtiger Punkt ist das Suchen und Filtern. Eine Person in einem Geschäft muss schnell auf den Code der Ergänzung oder einen der Namen klicken und erhält das Ergebnis.

Daher verfügt die Additiv-Entität über mehrere Felder. Dies ist der additive Code, alternative Namen, Beschreibung. Die Suche erfolgt mit „Gefällt mir“ in allen Feldern gleichzeitig. Und wenn Sie [123] oder [Amaranth] eingeben, erhalten Sie das gleiche Ergebnis.

Wir haben das alles auf der Grundlage von Spezifikationen gemacht. Dies ist ein Teil von Spring, der es Ihnen ermöglicht, grundlegende Suchbedingungen (z. B. ein Feld) zu beschreiben und diese Bedingungen dann zu kombinieren (ODER oder UND).

Nachdem Sie ein Dutzend Spezifikationen geschrieben haben, können Sie komplexe Fragen stellen wie „alle gefährlichen Farbzusätze, die das Wort [rot] in der Beschreibung haben“.

Was die Arbeit mit der Spring-Datenbank angeht, finde ich sie sehr praktisch. Dies gilt insbesondere bei der Arbeit mit komplexen Abfragen. Ich verstehe, dass dies einen eigenen Mehraufwand mit sich bringt und eine manuell geschriebene und optimierte SQL-Abfrage schneller ausgeführt wird.

Ich vertrete aber auch den Standpunkt, dass man nicht alles im Vorfeld optimieren muss. Die erste Version sollte starten, funktionieren und den Austausch einzelner Teile ermöglichen. Und wenn es zu einer Belastung kommt, müssen diese einzelnen Teile neu geschrieben werden.

Sicherheit

Es ist einfach. Es gibt Benutzer mit der Rolle ADMIN – sie können Ergänzungen bearbeiten, löschen und neue hinzufügen.

Und es gibt noch andere Benutzer (registriert oder nicht). Sie können nur die Liste der Zusatzstoffe durchsuchen und nach den benötigten Zusatzstoffen suchen.

Zur Rechtetrennung wurde Spring Security verwendet. Benutzerdaten werden in einer Datenbank gespeichert.

Benutzer können sich registrieren. Jetzt bringt es nichts mehr. Wenn Studierende den Dienst weiterentwickeln und einige personalisierte Funktionen einführen, wird sich die Registrierung als nützlich erweisen.

Reaktionsfähigkeit und Bootstrap

Der nächste Punkt ist die Anpassungsfähigkeit. Bei unserem Dienst wird (zumindest so wie wir es gesehen haben) die Mehrheit der Nutzer mit Mobiltelefonen unterwegs sein. Und Sie müssen die Ergänzung schnell von Ihrem Mobiltelefon aus anzeigen können.

Um nicht unter CSS zu leiden, haben wir Bootstrap verwendet. Günstig, fröhlich und sieht anständig aus.

Ich kann die Schnittstelle nicht als ideal bezeichnen. Die Hauptseite ist noch kleiner und die Seite für eine detaillierte Beschreibung des Additivs ist schmal; bei Mobiltelefonen muss sie breiter gemacht werden.

Ich kann nur sagen, dass ich versucht habe, mich so wenig wie möglich in die Arbeit einzumischen. Dies ist noch ein Studentenprojekt. Und natürlich können die Jungs solche Momente später korrigieren.

Eine Minute SEO-Optimierung

Da ich mich seit mehr als zwei Jahren intensiv mit Websites und allem rund um SEO beschäftige, könnte ich kein Projekt ohne zumindest grundlegende SEO-Optimierung veröffentlichen.

Tatsächlich habe ich für jedes Add-on eine Vorlagengenerierung für Titel und Beschreibung erstellt. Die URL ist fast CNC, obwohl sie kürzer gemacht werden kann.

Ich habe auch Anwesenheitszähler hinzugefügt. Die Website wurde zu Yandex Webmaster und der Google Search Console hinzugefügt, um Warnungen von Suchmaschinen zu überwachen.

Das ist wenig. Für eine vollständige Indizierung müssen Sie außerdem robots.txt und sitemap.xml hinzufügen. Aber auch hier handelt es sich um ein Studentenprojekt. Ich werde ihnen sagen, was zu tun ist, und wenn sie wollen, werden sie es tun.

Sie müssen ein SSL-Zertifikat anhängen. Das kostenlose Let's Encrypt wird auch funktionieren. Ich habe das für Spring Boot gemacht. Das ist nicht schwer und das Vertrauen der PS steigt.

Wie geht es mit dem Projekt weiter?

Dann liegt die Wahl tatsächlich bei den Jungs. Zur ursprünglichen Idee des Projekts gehörte auch eine Produktdatenbank mit Links zu Zusatzstoffen.

Geben Sie „Snickers“ ein und sehen Sie, welche Nährstoffzusätze es enthält.

Schon zu Beginn des Projekts wusste ich, dass wir keine Produkte haben würden :) Deshalb haben wir nur mit Zusatzstoffen begonnen.

Jetzt können Sie Produkte hinzufügen und weitere vorstellen. Gebäck. Wenn es sich um eine umfangreiche Datenbank handelt, wird es Benutzer geben.

Einsatz

Das Projekt wurde auf VPS, Aruba Cloud, bereitgestellt. Dies ist der günstigste VPS, den wir finden konnten. Ich nutze diesen Anbieter seit mehr als einem Jahr für meine Projekte und bin sehr zufrieden damit.

VPS-Eigenschaften: 1 GB RAM, 1 CPU (die Frequenz weiß ich nicht), 20 GB SSD. Für unser Projekt reicht das.

Das Projekt wird mit dem üblichen MVN-Clean-Paket erstellt. Das Ergebnis ist ein Fat Jar – eine ausführbare Datei mit allen Abhängigkeiten.

Um das alles ein wenig zu automatisieren, habe ich ein paar Bash-Skripte geschrieben.

Das erste Skript löscht die alte JAR-Datei und erstellt eine neue.

Das zweite Skript startet das zusammengestellte JAR und übergibt ihm den Namen des erforderlichen Profils. Dieses Profil enthält Datenbankverbindungsinformationen.

DB – MySQL auf demselben VPS.

Der gesamte Neustart des Projekts umfasst:

  • Melden Sie sich über SSH bei VPS an
  • Laden Sie die neuesten Git-Änderungen herunter
  • Führen Sie local-jar.sh aus
  • Beenden Sie die laufende Anwendung
  • Führen Sie launch-produktion.sh aus

Dieser Vorgang dauert drei Minuten. Das scheint mir für ein so kleines Projekt eine kluge Wahl zu sein.

Schwierigkeiten

Die Hauptschwierigkeiten bei der Erstellung des Projekts waren organisatorischer Natur.

Es gibt eine Gruppe von Leuten, die scheinbar programmieren können, aber nicht sehr gut. Sie wissen etwas, können es aber trotzdem nicht wirklich anwenden. Und jetzt müssen sie das Projekt in einem Monat abschließen.

Ich habe in dieser Gruppe einen bedingten Teamleiter identifiziert. Er führte ein Google Doc mit einer Aufgabenliste, verteilte Aufgaben und kontrollierte deren Annahme. Er akzeptierte auch Pull-Requests.

Ich habe die Schüler außerdem gebeten, jeden Abend einen kurzen Bericht über die Arbeit zu schreiben, die sie an dem Projekt geleistet haben. Wenn Sie nichts getan haben, schreiben Sie einfach „nichts getan“. Das ist eine tolle Übung und macht dich ein wenig angespannt. Leider haben sich nicht alle an diese Regel gehalten.

Der Zweck dieser ganzen Bewegung war einfach. Bilden Sie ein Team, auch wenn es nur für kurze Zeit ist, um zusammenzuarbeiten.

Ich wollte, dass die Jungs das Gefühl haben, dass ihre Arbeit wichtig ist. Verstehen Sie, dass sie keinen sphärischen Code im luftleeren Raum schreiben. Und was sie gemeinsam machen, ist ein Projekt, das die Leute dann nutzen werden.

Die ersten ein bis zwei Wochen waren Aufbauphase. Entitäten und kleine Commits wurden schleppend durchgeführt. Nach und nach stachelte ich sie an und die Arbeit machte mehr Spaß. Die Kommunikation im Chat wurde lebendiger, die Studierenden boten ihre Ergänzungen an.

Ich glaube, dass das Ziel erreicht wurde. Das Projekt ist abgeschlossen, die Jungs haben ein wenig Erfahrung in der Teamarbeit. Es entsteht ein sichtbares, greifbares Ergebnis, das Freunden gezeigt und weiterentwickelt werden kann.

Befund

Lernen ist interessant.

Nach jedem Unterricht kam ich emotional aufgeregt zurück. Ich versuche, jedes Paar einzigartig zu machen und so viel Wissen wie möglich zu vermitteln.

Es ist schön, wenn die Gruppe, die ich unterrichte, das Finale erreicht. Besonders cool ist es, wenn Jungs schreiben: „Ich habe einen Job, alles ist gut, danke.“ Auch wenn es ein Junior ist, auch wenn es zunächst nicht das größte Geld ist. Aber das Wichtigste ist, dass sie ihren Wünschen einen Schritt näher gekommen sind und es ihnen gelungen ist.

Obwohl der Artikel recht umfangreich ausfiel, war es sicherlich nicht möglich, alle Punkte abzudecken. Schreiben Sie daher Ihre Fragen in die Kommentare.

Source: habr.com

Kommentar hinzufügen