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

Uvod

Desilo se da poslednje skoro dve 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 od toga. Ali želja da se ispričaju korisne stvari zainteresiranim ljudima nije nestala.

Moj glavni jezik je Java. Na njemu sam pisao igrice za mobilne telefone, softver za radio komunikacije i razne web servise. I predajem Javu.

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

Sam servis je tu - E-Dobavki.com.

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

Projekat je edukativan i ne sadrži nikakvo oglašavanje. Kako sam shvatio iz ovu publikaciju, možete dati veze do takvih projekata.

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

9 meseci obuke

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

Prvi dio upoznaje studente sa osnovnim pojmovima jezika. Varijable, metode, osnove OOP-a i sve te stvari.

Drugi dio kursa predviđa da student već manje-više razumije kako se piše na Javi, te mu se može dati „odrasli“ tehnološki stog. Sve počinje sa SQL-om, zatim JDBC-om, hibernacijom. Zatim HTTP, servleti. Sljedeće je proljeće, malo o git-u i mavenu. I studenti pišu završne projekte.

Sva obuka je podijeljena u module. Držao sam časove dva puta sedmično. Trajanje jednog časa je dva sata.

Moj pristup učenju

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

Probao sam različite pristupe.

Prva opcija je da se jedan par dodjeljuje za prezentaciju sa teorijom. Drugi par je čista praksa. Ovaj pristup je nekako funkcionisao, ali po mom mišljenju nije bio baš efikasan.

Druga opcija na koju 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 radi bolje.

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

Ne stižu svi do kraja

Za mene je otkriće bila činjenica da cijela grupa ne stiže do kraja kursa.

Prema mojim zapažanjima, samo polovina studenata piše završni projekat. Većina njih se eliminiše tokom prvog dela kursa. A oni koji su stigli do drugog dijela obično ne padaju.

Odlaze iz raznih razloga.

Prvi je složenost. Bez obzira šta kažu, Java nije najjednostavniji jezik. Da biste napisali čak i najjednostavniji program, morate razumjeti koncept klase, metode. I da razumete zašto treba da pišete public static void main(String[] arg) Treba razumjeti još nekoliko koncepata.

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

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

Koliko ja znam, škola će ovaj problem riješiti uvođenjem dodatnog testiranja. Sada ne može svako da proučava Javu. Ovo je još uvijek u fazi koncepta, ali korak je očito pravi.

A drugi razlog je kao na slici ispod:

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

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

Realnost je malo drugačija. Mnogo rutinskog koda, neočiglednih grešaka, stalan proces učenja. Zanimljivo je, ali ne za svakoga.

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

Ideja o usluzi

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

Hteo sam da uradim nešto jednostavno, ali korisno. Moj kriterijum je bio jednostavan – da li to moji prijatelji i ja možemo da iskoristimo. Web servis za traženje aditiva u hrani ispunio je ove zahtjeve.

Ideja je jednostavna. Kada kupite proizvod u prodavnici, vidite neku vrstu E-aditiva u sastavu. Iz kodeksa nije jasno koliko je to 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 aditiva u hrani u Javi i Spring Boot-u, koji su napisali moji studenti

Postoje slični projekti. Također možete jednostavno upisati aditiv u Google, iako ne prikazuje uvijek informacije ispravno.

Ali pošto je projekat edukativan, gore navedene poteškoće nas nisu zaustavile :)

Реализация

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

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

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

Parsing additives

Prva stvar koju je jedan od studenata uradio, pored osnovnog kreiranja okvira oko baze podataka (entiteta, repozitorija, itd.), bila je raščlanjivanje dodataka sa postojeće informativne stranice.

Ovo je bilo neophodno za testiranje preostalih tačaka. Nije potreban dodatni kod za popunjavanje baze podataka. Nakon što smo brzo analizirali nekoliko aditiva, mogli smo dalje testirati korisničko sučelje, sortiranje i filtriranje.

Spring Boot vam omogućava da kreirate više profila. Profil je fajl sa postavkama.

Za razvojno okruženje koristili smo profil sa lokalnim H2 DBMS-om i podrazumevanim HTTP portom (8080). Dakle, svaki put kada je aplikacija pokrenuta, baza podataka je očišćena. Parser je u ovom slučaju bila stvar koja nas je spasila.

Pretraga i filtriranje

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

Stoga, aditivni entitet ima nekoliko polja. Ovo je kod aditiva, alternativni nazivi, opis. Pretraga se vrši upotrebom Like u svim poljima istovremeno. A ako unesete [123] ili [amarant], dobit ćete isti rezultat.

Sve smo to uradili na osnovu Specifikacija. Ovo je dio Spring koji vam omogućava da opišete osnovne uvjete pretraživanja (kao što je neko polje, na primjer), a zatim kombinujete ove uslove (ILI ili I).

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

Što se tiče rada sa Spring bazom podataka, smatram da je to vrlo zgodno. Ovo je posebno istinito kada radite sa složenim upitima. Razumijem da ovo ima svoje troškove i da će ručno napisan i optimiziran SQL upit raditi brže.

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

Sigurnost

To je jednostavno. Postoje korisnici sa ulogom ADMIN - mogu uređivati ​​dodatke, brisati ih i dodavati nove.

A postoje i drugi korisnici (registrovani ili ne). Mogu samo pregledavati listu aditiva i tražiti one koji su im potrebni.

Spring Security je korišten za razdvajanje prava. Korisnički podaci se pohranjuju u bazu podataka.

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

Responzivnost i Bootstrap

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

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

Interfejs ne mogu nazvati idealnim. Glavna stranica je još manje, a stranica za detaljan opis aditiva je uska, na mobilnim telefonima je potrebno proširiti.

Mogu samo reći da sam se trudio da što manje ometam rad. Ovo je još uvijek studentski projekat. I naravno, momci će kasnije moći da isprave takve trenutke.

Minut SEO optimizacije

Budući da sam više od dvije godine usko uključen u web stranice i sve što je vezano za SEO, ne bih mogao izdati projekat bez barem osnovne SEO optimizacije.

U stvari, napravio sam šablon za generisanje naslova i opisa za svaki dodatak. URL je skoro CNC, iako se može skrati.

Dodao sam i brojače prisutnosti. Stranica je dodana Yandex Webmasteru i Google Search Console za praćenje upozorenja sa pretraživača.

Nije dovoljno. Također morate dodati robots.txt i sitemap.xml za potpuno indeksiranje. Ali opet, ovo je studentski projekat. Ja ću im reći šta treba da se uradi, i ako žele, uradiće to.

Morate priložiti SSL certifikat. Besplatni Let's Encrypt će također raditi. Uradio sam ovo za Spring Boot. To nije teško učiniti, a povjerenje PS se povećava.

Šta je sljedeće za projekat?

Onda, zapravo, izbor je na momcima. Prvobitna ideja projekta uključivala je i bazu podataka proizvoda sa linkovima na aditive.

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

Još na početku projekta znao sam da nećemo imati proizvoda :) Stoga smo krenuli samo sa aditivima.

Sada možete dodati proizvode i uvesti dodatne. buns. Ako se radi o opsežnoj bazi podataka, biće korisnika.

Raspoređivanje

Projekat je raspoređen na VPS, Aruba Cloud. Ovo je najjeftiniji VPS koji smo mogli pronaći. Koristim ovog provajdera više od godinu dana za svoje projekte i ugodno sam zadovoljan njime.

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

Projekat je napravljen korišćenjem uobičajenog paketa mvn clean. Rezultat je debela jar - izvršna datoteka sa svim zavisnostima.

Da bih sve ovo malo automatizovao, napisao sam nekoliko bash skripti.

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

Druga skripta pokreće sastavljenu teglu, prenoseći joj naziv potrebnog profila. Ovaj profil sadrži informacije o povezivanju baze podataka.

DB - MySQL na istom VPS-u.

Ukupno ponovno pokretanje projekta uključuje:

  • prijavite se na VPS preko SSH
  • preuzmite najnovije git promjene
  • pokrenite local-jar.sh
  • ubiti pokrenutu aplikaciju
  • pokrenite launch-production.sh

Ova procedura traje tri minuta. Ovo mi se čini kao pametan izbor za tako mali projekat.

Teškoće

Glavne poteškoće u kreiranju projekta bile su organizacione prirode.

Postoji grupa ljudi koji izgleda znaju da programiraju, ali ne baš dobro. Oni nešto znaju, ali još uvijek ne mogu to stvarno primijeniti. A sada treba da završe projekat za mesec dana.

Identifikovao sam uslovnog vođu tima u ovoj grupi. Vodio je Google Doc sa listom zadataka, distribuirao zadatke i kontrolirao njihovo prihvatanje. Također je prihvatio zahtjeve za povlačenjem.

Također sam zamolio studente da svako veče napišu kratak izvještaj o radu koji su radili na projektu. Ako ništa niste uradili, u redu, samo napišite „ništa niste uradili“. Ovo je odlična vježba i malo vas napete. Nažalost, nisu svi poštovali ovo pravilo.

Svrha svih ovih pokreta bila je jednostavna. Formirajte tim, makar i na kratko, da radite zajedno.

Želeo sam da momci osete da je njihov rad važan. Shvatite da oni ne pišu sferni kod u vakuumu. A ono što rade zajedno je projekat koji će ljudi onda koristiti.

Prve sedmice ili dvije bilo je nagomilavanje. Entiteti i mala obvezivanja vršena su sporo. Malo po malo sam ih uzburkao i rad je postao zabavniji. Komunikacija u chatu je postala življa, studenti su ponudili svoje dodatke.

Vjerujem da je cilj postignut. Projekat je gotov, momci su stekli malo iskustva rada u timu. Postoji vidljiv, opipljiv rezultat koji se može pokazati prijateljima i dalje razvijati.

nalazi

Učenje je zanimljivo.

Nakon svakog časa vraćala sam se emotivno uzbuđena. Trudim se da svaki par bude jedinstven i da prenesem što više znanja.

Lijepo je kada grupa kojoj predajem dođe do finala. Posebno je cool kada momci napišu „Zaposlio sam se, sve je u redu, hvala“. Čak i ako je junior, čak i ako u početku nije najveći novac. Ali najvažnije je da su napravili korak ka svojim željama i u tome su uspjeli.

Iako se pokazalo da je članak prilično obiman, sigurno nije bilo moguće pokriti sve tačke. Stoga, napišite svoja pitanja u komentarima.

izvor: www.habr.com

Dodajte komentar