E-Dobavki - web servis za pretraživanje prehrambenih aditiva u Javi i Spring Bootu, koji su napisali moji studenti

Uvod

Tako se dogodilo da zadnje gotovo dvije godine predajem programiranje u jednoj od IT škola u Kijevu. Počeo sam ovo raditi samo iz zabave. Jednom sam napisao blog o programiranju, a onda sam odustao. Ali želja da zainteresiranima ispriča korisne stvari nije nestala.

Moj glavni jezik je Java. Na njoj sam pisao igrice za mobitele, softver za radio komunikacije, razne web servise. I predajem Javu.

Ovdje želim ispričati priču o treningu moje posljednje grupe. Kako su prošli put od početka obuke do pisanja web usluge koja radi. Koristan web servis za pronalaženje dodataka prehrani. Besplatno, bez oglašavanja, registracije i SMS-a.

Sama usluga je ovdje - E-Dobavki.com.

E-Dobavki - web servis za pretraživanje prehrambenih aditiva u Javi i Spring Bootu, koji su napisali moji studenti

Projekt je edukativnog karaktera i ne sadrži reklame. Kako sam shvatio iz ova publikacija, možete dati poveznice na takve projekte.

Prije nego što opišem sam projekt, reći ću vam nešto o procesu učenja grupe; bez toga slika će biti nepotpuna.

9 mjeseci obuke

U školi u kojoj predajem tečaj Java je podijeljen u 2 dijela. Ukupno, tečaj traje oko 9 mjeseci, sa svim pauzama (novogodišnji praznici, vrijeme za pisanje srednjih projekata).

Prvi dio upoznaje učenike s osnovnim pojmovima jezika. Varijable, metode, osnove OOP-a i sve te stvari.

Drugi dio tečaja predviđa da student već više-manje razumije kako pisati u Javi, te mu se može dati "odrasli" tehnološki skup. Sve počinje sa SQL, zatim JDBC, Hibernate. Zatim HTTP, servleti. Slijedi Spring, malo o git i maven. A studenti pišu završne projekte.

Sva obuka je podijeljena u module. Nastavu sam držao dva puta tjedno. Trajanje jedne lekcije je dva sata.

Moj pristup učenju

Pustio sam 5 grupa. Čini se puno za dvije godine, ali gotovo uvijek sam vodio 2 grupe paralelno.

Isprobao sam različite pristupe.

Prva opcija je da se jedan par dodjeljuje za izlaganje s teorijom. Drugi par je čista praksa. Ovaj je pristup nekako uspio, ali po mom mišljenju nije bio baš učinkovit.

Druga opcija do koje sam došao i na kojoj sada radim je da ne posvetim cijeli par teoriji. Umjesto toga, miješam kratke dijelove teorije 5-10 minuta i odmah ih pojačavam praktičnim primjerima. Ovaj pristup bolje funkcionira.

Ako ima dovoljno vremena, pozovem studente kod sebe, sjednem ih za laptop i oni sami rade praktične primjere. Radi odlično, ali nažalost oduzima puno vremena.

Ne stignu svi do kraja

Za mene je otkriće bila činjenica da ne dolazi cijela grupa do kraja tečaja.

Prema mojim zapažanjima, samo polovica studenata radi završni rad. Većina ih se eliminira tijekom prvog dijela tečaja. A oni koji su došli do drugog dijela obično ne otpadaju.

Odlaze iz raznih razloga.

Prvi je složenost. Što god govorili, Java nije najjednostavniji jezik. Da biste napisali čak i najjednostavniji program, morate razumjeti koncept klase, metode. I da shvatite zašto morate pisati public static void main(String[] arg) Postoji još nekoliko pojmova koje treba razumjeti.

Usporedite ovo s Turbo Pascalom, s kojim su mnogi ljudi počeli, uključujući i mene:

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

Koliko znam, škola će taj problem riješiti uvođenjem dodatnog testiranja. Sada ne može svatko proučavati Javu. Ovo je još u fazi koncepta, ali korak je očito ispravan.

A drugi razlog je kao na slici ispod:

E-Dobavki - web servis za pretraživanje prehrambenih aditiva u Javi i Spring Bootu, koji su napisali moji studenti

Ljudi često misle da je programiranje upisivanje puno teksta i dobivanje puno novca za to. Kao copywriter, samo više novca.

Stvarnost je malo drugačija. Puno rutinskog koda, neočiti bugovi, stalni proces učenja. Zanimljivo je, ali nije za svakoga.

Ovo je statistika. U početku me to uznemirilo, pomislio sam da možda radim nešto krivo. Sada razumijem da je statistika približno ista za većinu tečajeva. Sada se ne brinem o tome, nego podučavam one ljude koje to zanima.

Ideja za uslugu

Nakon što su studenti završili cijeli tečaj, došlo je vrijeme za pisanje završnog projekta. Bilo je različitih ideja. Nudili su ToDo listove, projekte upravljanja projektima i još ponešto.

Htio sam učiniti nešto jednostavno, ali korisno. Moj kriterij je bio jednostavan - možemo li moji prijatelji i ja to koristiti. Web servis za traženje prehrambenih aditiva ispunio je te uvjete.

Ideja je jednostavna. Kada kupite proizvod u trgovini, vidite neku vrstu E-aditiva u sastavu. Iz kodeksa se ne vidi koliko je opasno ili ne (a postoje i opasni aditivi koji su zabranjeni u mnogim zemljama).

Otvorite web stranicu, unesete naziv dodatka (broj, jedan od alternativnih naziva) i dobijete sažetak dodatka:

E-Dobavki - web servis za pretraživanje prehrambenih aditiva u Javi i Spring Bootu, koji su napisali moji studenti

Ima sličnih projekata. Također možete jednostavno upisati aditiv u Google, iako on ne prikazuje uvijek informacije točne.

Ali budući da je projekt edukativan, gore navedene poteškoće nas nisu zaustavile :)

Provedba

Svi su pisali na Javi, izvorni kod projekta na Githubu.

Bilo nas je 7, uključujući i mene. Svi su napravili zahtjev za povlačenjem, a ja, ili neka druga osoba iz grupe, prihvatili smo ovaj zahtjev za povlačenjem.

Provedba projekta trajala je oko mjesec dana - od iznošenja ideje do stanja koje sada vidite.

Dodaci za raščlanjivanje

Prvo što je jedan od studenata napravio, osim osnovne izrade okvira oko baze podataka (entiteti, repozitoriji itd.), bilo je parsiranje dodataka s postojeće informacijske stranice.

To je bilo potrebno za testiranje preostalih točaka. Nije potreban dodatni kod za popunjavanje baze podataka. Nakon što smo brzo raščlanili nekoliko dodataka, mogli smo dodatno testirati korisničko sučelje, sortiranje i filtriranje.

Spring Boot vam omogućuje stvaranje više profila. Profil je datoteka s postavkama.

Za razvojno okruženje koristili smo profil s lokalnim H2 DBMS-om i zadanim HTTP priključkom (8080). Dakle, svaki put kada je aplikacija pokrenuta, baza podataka je izbrisana. Parser je u ovom slučaju bio stvar koja nas je spasila.

Pretraživanje i filtriranje

Važna točka je pretraživanje i filtriranje. Osoba u trgovini mora brzo kliknuti na šifru dodatka ili jedno od imena i dobiti rezultat.

Stoga entitet Additive ima nekoliko polja. Ovo je šifra aditiva, alternativni nazivi, opis. Pretraživanje se provodi korištenjem Like u svim poljima istovremeno. A ako unesete [123] ili [amarant], dobit ćete isti rezultat.

Sve smo to napravili na temelju specifikacija. Ovo je dio Springa koji vam omogućuje da opišete osnovne uvjete pretraživanja (kao što je neko polje, na primjer), a zatim kombinirate te uvjete (ILI ili I).

Nakon što ste napisali desetak specifikacija, možete postavljati složene upite poput "svi opasni aditivi za bojenje koji u opisu imaju riječ [crveno]".

Što se tiče rada s bazom podataka Spring, smatram je vrlo zgodnom. To je osobito istinito kada radite sa složenim upitima. Razumijem da to ima svoje vlastite troškove i da će se ručno napisani i optimizirani SQL upit izvoditi brže.

Ali također se pridržavam stajališta da nema potrebe optimizirati sve unaprijed. Prva verzija se mora pokrenuti, raditi i omogućiti zamjenu pojedinih dijelova. A ako postoji opterećenje, te pojedinačne dijelove treba prepisati.

Sigurnost

Jednostavno je. Postoje korisnici s ADMIN ulogom - oni mogu uređivati ​​dodatke, brisati ih i dodavati nove.

A ima i drugih korisnika (registriranih ili ne). Mogu samo pregledavati popis aditiva i tražiti one koji im trebaju.

Spring Security korišten je za odvajanje prava. Podaci o korisniku pohranjuju se u bazu podataka.

Korisnici se mogu registrirati. Sada ne daje ništa. Ako studenti nastave razvijati uslugu i uvode neke personalizirane funkcije, registracija će im dobro doći.

Responzivnost i Bootstrap

Sljedeća točka je prilagodljivost. U slučaju naše usluge (barem kako smo mi to vidjeli), većina korisnika će biti s mobilnim telefonima. I trebate brzo pregledati dodatak sa svog mobilnog telefona.

Kako se ne bismo mučili s CSS-om, uzeli smo Bootstrap. Jeftino, veselo i pristojno izgleda.

Sučelje ne mogu nazvati idealnim. Glavna stranica još manje, a stranica za detaljan opis aditiva je uska, na mobitelima ju treba proširiti.

Mogu samo reći da sam se trudio što manje ometati posao. Ovo je još uvijek studentski projekt. I naravno, dečki će kasnije moći ispraviti takve trenutke.

Minuta SEO optimizacije

Budući da se više od dvije godine bavim web stranicama i svime vezanim uz SEO, nisam mogao izbaciti projekt bez barem osnovne SEO optimizacije.

Zapravo, napravio sam generiranje predloška naslova i opisa za svaki dodatak. URL je gotovo CNC, iako se može skratiti.

Dodao sam i brojače prisutnosti. Stranica je dodana na Yandex Webmaster i Google Search Console za praćenje upozorenja tražilica.

Nije dovoljno. Također morate dodati robots.txt i sitemap.xml za potpuno indeksiranje. Ali opet, ovo je studentski projekt. Ja ću im reći što treba učiniti, i ako žele, oni će to učiniti.

Morate priložiti SSL certifikat. Radit će i besplatni Let's Encrypt. Napravio sam ovo za Spring Boot. Nije teško, a povjerenje PS-a raste.

Što je sljedeće za projekt?

Onda je, zapravo, izbor na dečkima. Izvorna ideja projekta također je uključivala bazu podataka proizvoda s poveznicama na aditive.

Unesite "Snickers" i pogledajte koje prehrambene aditive sadrži.

Već na početku projekta znala sam da nećemo imati proizvoda :) Stoga smo krenuli samo s aditivima.

Sada možete dodati proizvode i predstaviti dodatne. lepinje. Ako je opsežna baza podataka, bit će i korisnika.

Raspoređivanje

Projekt je implementiran na VPS, Aruba Cloud. Ovo je najjeftiniji VPS koji smo mogli naći. Koristim ovog pružatelja više od godinu dana za svoje projekte i ugodno sam njime zadovoljan.

Karakteristike VPS-a: 1 GB RAM-a, 1 CPU (ne znam za frekvenciju), 20 GB SSD. Za naš projekt ovo je dovoljno.

Projekt je izgrađen korištenjem uobičajenog mvn clean paketa. Rezultat je masna staklenka - izvršna datoteka sa svim ovisnostima.

Kako bih sve ovo malo automatizirao, napisao sam nekoliko bash skripti.

Prva skripta briše staru jar datoteku i gradi novu.

Druga skripta pokreće sastavljenu staklenku, prosljeđujući joj naziv traženog profila. Ovaj profil sadrži informacije o vezi s bazom podataka.

DB - MySQL na istom VPS-u.

Ukupno ponovno pokretanje projekta uključuje:

  • prijavite se na VPS putem SSH-a
  • preuzmite najnovije git promjene
  • pokrenite local-jar.sh
  • ubij pokrenutu aplikaciju
  • pokrenuti launch-production.sh

Ovaj postupak traje tri minute. Ovo mi se čini kao pametan izbor za tako mali projekt.

složenost

Glavne poteškoće u izradi projekta bile su organizacijske prirode.

Postoji skupina ljudi koji izgleda znaju programirati, ali ne baš dobro. Oni nešto znaju, ali još uvijek to ne mogu stvarno primijeniti. I sada trebaju završiti projekt za mjesec dana.

Identificirao sam uvjetnog vođu tima u ovoj grupi. Vodio je Google Doc s popisom zadataka, raspoređivao zadatke i kontrolirao njihovo prihvaćanje. Također je prihvaćao zahtjeve za povlačenjem.

Također sam zamolio studente da svaku večer napišu kratko izvješće o radu koji su obavili na projektu. Ako niste učinili ništa, u redu, samo napišite "niste učinili ništa." Ovo je izvrsna praksa i čini vas malo napetima. Nisu svi slijedili ovo pravilo, nažalost.

Svrha cijelog ovog pokreta bila je jednostavna. Oformite tim, makar i nakratko, za zajednički rad.

Želio sam da dečki osjete da je njihov posao važan. Shvatite da oni ne pišu sferni kod u vakuumu. A ovo što zajedno rade je projekt koji će ljudi onda koristiti.

Prvih tjedan ili dva bilo je nagomilavanje. Entiteti i mali komiti su napravljeni tromo. Malo-pomalo sam ih pokrenuo i rad je postao zabavniji. Komunikacija u chatu postala je življa, studenti su ponudili svoje dodatke.

Vjerujem da je cilj postignut. Projekt je gotov, dečki su stekli malo iskustva u timskom radu. Postoji vidljiv, opipljiv rezultat koji se može pokazati prijateljima i dalje razvijati.

Zaključci

Učenje je zanimljivo.

Nakon svakog sata vraćao sam se emocionalno uzbuđen. Svaki par nastojim učiniti jedinstvenim i prenijeti što više znanja.

Lijepo je kad grupa kojoj predajem dođe do finala. Posebno je cool kad dečki napišu "dobio sam posao, sve je u redu, hvala." Čak i ako je junior, čak i ako to nije najveći novac na prvu. Ali najvažnije je da su zakoračili prema svojim željama i u tome su uspjeli.

Iako je članak ispao prilično opsežan, svakako nije bilo moguće obuhvatiti sve točke. Stoga napišite svoja pitanja u komentarima.

Izvor: www.habr.com

Dodajte komentar