E-Dobavki - een webservice voor het zoeken naar levensmiddelenadditieven in Java en Spring Boot, geschreven door mijn studenten

Introductie

Het gebeurde zo dat ik de afgelopen bijna twee jaar programmeerles heb gegeven op een van de IT-scholen in Kiev. Ik begon dit gewoon voor de lol te doen. Ik heb ooit een programmeerblog geschreven, maar daar ben ik mee gestopt. Maar de wens om nuttige dingen aan geïnteresseerde mensen te vertellen is niet verdwenen.

Mijn hoofdtaal is Java. Ik schreef er games voor mobiele telefoons, software voor radiocommunicatie en verschillende webservices op. En ik geef Java-les.

Hier wil ik het verhaal vertellen van de training van mijn laatste groep. Hoe ze van het starten van een training naar het schrijven van een werkende webservice zijn gegaan. Een handige webservice voor het vinden van voedingssupplementen. Gratis, geen reclame, registratie en sms.

De service zelf is hier - E-Dobavki.com.

E-Dobavki - een webservice voor het zoeken naar levensmiddelenadditieven in Java en Spring Boot, geschreven door mijn studenten

Het project is educatief en bevat geen reclame. Zoals ik begrijp van deze publicatie, kunt u links naar dergelijke projecten verstrekken.

Voordat ik het project zelf beschrijf, zal ik u iets vertellen over het leerproces van de groep; zonder dit zal het beeld onvolledig zijn.

9 maanden opleiding

Op de school waar ik les geef, is de Java-cursus opgedeeld in 2 delen. In totaal duurt de cursus ongeveer 9 maanden, met alle pauzes (nieuwjaarsvakantie, tijd om tussenprojecten te schrijven).

In het eerste deel maken leerlingen kennis met de basisbegrippen van taal. Variabelen, methoden, OOP-basisprincipes en al dat soort dingen.

Het tweede deel van de cursus zorgt ervoor dat de student al min of meer begrijpt hoe hij in Java moet schrijven, en dat hij een “volwassen” technologiestapel kan krijgen. Het begint allemaal met SQL, vervolgens JDBC en Hibernate. Dan HTTP, servlets. Het volgende is Spring, een beetje over git en maven. En studenten schrijven eindprojecten.

Alle trainingen zijn opgedeeld in modules. Ik gaf twee keer per week les. De duur van één les bedraagt ​​twee uur.

Mijn aanpak van leren

Ik heb 5 groepen vrijgelaten. Het lijkt veel voor twee jaar, maar ik leidde vrijwel altijd 2 groepen parallel.

Ik heb verschillende benaderingen geprobeerd.

De eerste optie is dat één koppel wordt toegewezen voor een presentatie met theorie. Het tweede paar is pure oefening. Deze aanpak werkte op de een of andere manier, maar was naar mijn mening niet erg effectief.

De tweede optie waar ik op uitkwam en waar ik nu aan werk, is om niet een heel paar aan de theorie te wijden. In plaats daarvan mix ik gedurende 5-10 minuten korte theoriegedeelten en versterk ze onmiddellijk met praktijkvoorbeelden. Deze aanpak werkt beter.

Als er voldoende tijd is, roep ik de studenten bij mij thuis, zet ze achter mijn laptop en doen ze zelf praktijkvoorbeelden. Het werkt prima, maar kost helaas veel tijd.

Niet iedereen haalt het einde

Een openbaring voor mij was dat niet de hele groep het einde van de cursus haalt.

Volgens mijn observaties schrijft slechts de helft van de studenten het eindproject. De meeste worden tijdens het eerste deel van de cursus geëlimineerd. En degenen die het tweede deel hebben bereikt, vallen er meestal niet af.

Ze vertrekken om verschillende redenen.

De eerste is complexiteit. Wat ze ook zeggen, Java is niet de eenvoudigste taal. Om zelfs het eenvoudigste programma te schrijven, moet je het concept van een klasse, een methode, begrijpen. En om te begrijpen waarom je moet schrijven openbare statische leegte main(String[] arg) Er zijn nog een paar concepten die u moet begrijpen.

Vergelijk dit met Turbo Pascal, waar veel mensen mee begonnen, inclusief ik:

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

Voor zover ik weet zal de school dit probleem oplossen door aanvullende toetsen in te voeren. Nu kan niet iedereen Java studeren. Dit bevindt zich nog in de conceptfase, maar de stap is duidelijk de juiste.

En de tweede reden is zoals op de onderstaande afbeelding:

E-Dobavki - een webservice voor het zoeken naar levensmiddelenadditieven in Java en Spring Boot, geschreven door mijn studenten

Mensen denken vaak dat programmeren draait om het typen van veel tekst en het krijgen van veel geld daarvoor. Net als een copywriter, alleen meer geld.

De realiteit is een beetje anders. Veel routinecode, niet voor de hand liggende bugs, een constant leerproces. Het is interessant, maar niet voor iedereen.

Dit zijn de statistieken. In eerste instantie maakte het me van streek, ik dacht dat ik misschien iets verkeerd deed. Nu begrijp ik dat de statistieken voor de meeste cursussen ongeveer hetzelfde zijn. Nu maak ik me er geen zorgen over, maar leer het de mensen die erin geïnteresseerd zijn.

Dienst idee

Nadat de studenten de hele cursus hadden afgerond, was het tijd om het eindproject te schrijven. Er waren verschillende ideeën. Ze boden ToDo-bladen, projectmanagementprojecten en nog iets anders aan.

Ik wilde iets eenvoudigs maar nuttigs doen. Mijn criterium was simpel: of mijn vrienden en ik het konden gebruiken. Een webservice voor het zoeken naar levensmiddelenadditieven voldeed aan deze eisen.

Het idee is eenvoudig. Wanneer je een product in een winkel koopt, zie je een soort E-additief in de samenstelling. Uit de code wordt niet duidelijk hoe gevaarlijk het is of niet (en er zijn ook gevaarlijke additieven die in veel landen verboden zijn).

U opent de website, voert de naam van het supplement in (nummer, een van de alternatieve namen) en krijgt een samenvatting van het supplement:

E-Dobavki - een webservice voor het zoeken naar levensmiddelenadditieven in Java en Spring Boot, geschreven door mijn studenten

Er zijn soortgelijke projecten. Je kunt het additief ook gewoon in Google typen, al geeft deze de informatie niet altijd correct weer.

Maar aangezien het project educatief is, hebben de bovenstaande moeilijkheden ons niet tegengehouden :)

uitvoering

Iedereen schreef op Java, broncode van het project op Github.

Er waren 7 van ons, inclusief ik. Iedereen heeft een pull-verzoek ingediend en ik, of een andere persoon uit de groep, heb dit pull-verzoek geaccepteerd.

De implementatie van het project duurde ongeveer een maand - vanaf het uiten van het idee tot de staat die je nu ziet.

Additieven parseren

Het eerste dat een van de studenten deed, naast het creëren van een raamwerk rond de database (entiteiten, repositories, etc.), was het ontleden van add-ons van een bestaande informatiesite.

Dit was nodig om de overige punten te testen. Er is geen extra code nodig om de database te vullen. Nadat we snel verschillende additieven hadden ontleed, konden we de gebruikersinterface, het sorteren en filteren verder testen.

Met Spring Boot kunt u meerdere profielen maken. Een profiel is een bestand met instellingen.

Voor de ontwikkelomgeving hebben we een profiel gebruikt met een lokaal H2 DBMS en de standaard HTTP-poort (8080). Elke keer dat de applicatie werd gestart, werd de database dus gewist. In dit geval was de parser hetgene dat ons heeft gered.

Zoeken en filteren

Een belangrijk punt is zoeken en filteren. Een persoon in een winkel moet snel op de code van het supplement, of op een van de namen, klikken en het resultaat krijgen.

Daarom heeft de entiteit Additief verschillende velden. Dit is de additieve code, alternatieve namen, beschrijving. Er wordt gezocht met Like in alle velden tegelijk. En als u [123] of [amaranth] invoert, krijgt u hetzelfde resultaat.

Dit alles hebben wij gedaan op basis van Specificaties. Dit is een onderdeel van Spring waarmee u basiszoekvoorwaarden (zoals bijvoorbeeld een bepaald veld) kunt beschrijven en deze voorwaarden vervolgens kunt combineren (OR of AND).

Nadat u een tiental specificaties heeft geschreven, kunt u complexe vragen stellen, zoals “alle gevaarlijke kleuradditieven met het woord [rood] in de beschrijving.”

Wat het werken met de Spring-database betreft, vind ik het erg handig. Dit geldt vooral als u met complexe query's werkt. Ik begrijp dat dit zijn eigen overhead heeft en dat een handmatig geschreven en geoptimaliseerde SQL-query sneller zal werken.

Maar ik blijf ook bij het standpunt dat het niet nodig is om alles vooraf te optimaliseren. De eerste versie moet starten, werken en de vervanging van afzonderlijke onderdelen mogelijk maken. En als er sprake is van belasting, moeten deze afzonderlijke delen herschreven worden.

Security

Het is makkelijk. Er zijn gebruikers met de ADMIN-rol: zij kunnen toevoegingen bewerken, verwijderen en nieuwe toevoegen.

En er zijn andere gebruikers (geregistreerd of niet). Ze kunnen alleen door de lijst met additieven bladeren en zoeken naar de additieven die ze nodig hebben.

Spring Security werd gebruikt om rechten te scheiden. Gebruikersgegevens worden opgeslagen in een database.

Gebruikers kunnen zich registreren. Nu levert het niets op. Als studenten de dienst blijven ontwikkelen en enkele gepersonaliseerde functies introduceren, kan registratie handig zijn.

Responsiviteit en bootstrap

Het volgende punt is aanpassingsvermogen. In het geval van onze dienst (althans zoals wij het zagen) zal de meerderheid van de gebruikers mobiele telefoons gebruiken. En u moet het supplement snel vanaf uw mobiele telefoon bekijken.

Om geen last te hebben van CSS, hebben we Bootstrap genomen. Goedkoop, vrolijk en ziet er degelijk uit.

Ideaal kan ik de interface niet noemen. De hoofdpagina is dat nog minder, en de pagina voor een gedetailleerde beschrijving van het additief is smal; op mobiele telefoons moet deze breder worden gemaakt.

Ik kan alleen maar zeggen dat ik probeerde me zo min mogelijk met het werk te bemoeien. Het is nog steeds een studentenproject. En natuurlijk kunnen de jongens zulke momenten later corrigeren.

Een minuut SEO-optimalisatie

Omdat ik al meer dan twee jaar nauw betrokken ben bij websites en alles wat met SEO te maken heeft, kon ik geen project uitbrengen zonder tenminste een basis SEO-optimalisatie.

In feite heb ik voor elke add-on een sjabloongeneratie van Titel en Beschrijving gemaakt. De URL is bijna CNC, maar kan korter gemaakt worden.

Ik heb ook aanwezigheidstellers toegevoegd. De site toegevoegd aan Yandex Webmaster en Google Search Console om waarschuwingen van zoekmachines te monitoren.

Het is niet genoeg. U moet ook robots.txt en sitemap.xml toevoegen voor volledige indexering. Maar nogmaals, dit is een studentenproject. Ik zal ze vertellen wat er moet gebeuren, en als ze dat willen, zullen ze het doen.

U moet een SSL-certificaat bijvoegen. Het gratis Let's Encrypt werkt ook. Ik deed dit voor Spring Boot. Het is niet moeilijk om te doen, en het vertrouwen van de PS neemt toe.

Wat is de volgende stap voor het project?

Dan is de keuze eigenlijk aan de jongens. Het oorspronkelijke idee van het project omvatte ook een database met producten met links naar additieven.

Voer "Snickers" in en kijk welke voedingsadditieven het bevat.

Zelfs aan het begin van het project wist ik dat we geen producten zouden hebben :) Daarom zijn we alleen begonnen met additieven.

Nu kunt u producten toevoegen en extra producten introduceren. broodjes. Als het een uitgebreide database is, zullen er gebruikers zijn.

Inzet

Het project werd ingezet op VPS, Aruba Cloud. Dit is de goedkoopste VPS die we konden vinden. Ik gebruik deze aanbieder al ruim een ​​jaar voor mijn projecten en ben er zeer tevreden over.

VPS-kenmerken: 1 GB RAM, 1 CPU (de frequentie weet ik niet), 20 GB SSD. Voor ons project is dit voldoende.

Het project is gebouwd met behulp van het gebruikelijke mvn clean-pakket. Het resultaat is een fat jar: een uitvoerbaar bestand met alle afhankelijkheden.

Om dit allemaal een beetje te automatiseren, heb ik een paar bash-scripts geschreven.

Het eerste script verwijdert het oude jar-bestand en bouwt een nieuw bestand.

Het tweede script start de samengestelde pot en geeft deze de naam van het vereiste profiel door. Dit profiel bevat informatie over de databaseverbinding.

DB - MySQL op dezelfde VPS.

De totale herstart van het project omvat:

  • log in op VPS via SSH
  • download de nieuwste git-wijzigingen
  • voer local-jar.sh uit
  • actieve applicatie doden
  • voer launch-production.sh uit

Deze procedure duurt drie minuten. Dit lijkt mij een slimme keuze voor zo'n klein project.

ingewikkeldheid

De belangrijkste moeilijkheden bij het creëren van het project waren van organisatorische aard.

Er is een groep mensen die lijkt te kunnen programmeren, maar niet zo goed. Ze weten iets, maar kunnen het nog steeds niet echt toepassen. En nu moeten ze het project binnen een maand voltooien.

Ik heb in deze groep een voorwaardelijke teamleider geïdentificeerd. Hij hield een Google-document bij met een lijst met taken, verdeelde taken en controleerde de acceptatie ervan. Hij accepteerde ook pull-verzoeken.

Ik vroeg de studenten ook om elke avond een kort verslag te schrijven over het werk dat ze aan het project hadden gedaan. Als je niets hebt gedaan, schrijf dan gewoon 'niets gedaan'. Dit is een geweldige oefening en zorgt ervoor dat je een beetje gespannen raakt. Helaas volgde niet iedereen deze regel.

Het doel van al deze bewegingen was eenvoudig. Vorm een ​​team, ook al is het maar voor een korte tijd, om samen te werken.

Ik wilde dat de jongens het gevoel kregen dat hun werk belangrijk was. Begrijp dat ze geen sferische code in een vacuüm schrijven. En wat ze samen doen is een project waar mensen vervolgens gebruik van zullen maken.

De eerste week of twee was een opbouw. Entiteiten en kleine commits werden traag uitgevoerd. Beetje bij beetje roerde ik ze, en het werk werd leuker. De communicatie in de chat werd levendiger, studenten boden hun aanvullingen aan.

Ik geloof dat het doel is bereikt. Het project is voltooid, de jongens hebben wat ervaring opgedaan met het werken in een team. Er is een zichtbaar, tastbaar resultaat dat aan vrienden kan worden getoond en verder kan worden ontwikkeld.

Bevindingen

Leren is interessant.

Na elke les kwam ik emotioneel opgewonden terug. Ik probeer elk paar uniek te maken en zoveel mogelijk kennis over te brengen.

Het is leuk als de groep waar ik les aan geef de finale haalt. Het is vooral cool als jongens schrijven: "Ik heb een baan, alles is in orde, dank je." Zelfs als het een junior is, ook al is het in eerste instantie niet het grootste geld. Maar het belangrijkste is dat ze een stap in de richting van hun verlangens hebben gezet, en dat ze daarin zijn geslaagd.

Hoewel het artikel behoorlijk omvangrijk bleek te zijn, was het zeker niet mogelijk om alle punten te behandelen. Schrijf daarom uw vragen in de reacties.

Bron: www.habr.com

Voeg een reactie