E-Dobavki - un serviciu web pentru căutarea aditivilor alimentari în Java și Spring Boot, scris de studenții mei

Introducere

S-a întâmplat că în ultimii aproape doi ani predau programare la una dintre școlile de IT din Kiev. Am început să fac asta doar pentru distracție. Am scris odată un blog de programare, apoi am renunțat la el. Dar dorința de a spune lucruri utile oamenilor interesați nu a dispărut.

Limba mea principală este Java. Am scris jocuri pentru mobil, software radio și diverse servicii web pe el. Și predau Java.

Aici vreau să spun povestea antrenamentului ultimului meu grup. Cum au trecut de la începerea instruirii la scrierea unui serviciu web funcțional. Un serviciu web util pentru găsirea de suplimente nutritive. Gratuit, fără publicitate, înregistrare și SMS.

Serviciul în sine este aici - E-Dobavki.com.

E-Dobavki - un serviciu web pentru căutarea aditivilor alimentari în Java și Spring Boot, scris de studenții mei

Proiectul este educativ și nu conține niciun fel de publicitate. După cum am înțeles din această publicație, puteți furniza link-uri către astfel de proiecte.

Înainte de a descrie proiectul în sine, vă voi spune puțin despre procesul de învățare al grupului fără aceasta, imaginea va fi incompletă.

9 luni antrenament

La școala unde predau, cursul de Java este împărțit în 2 părți. În total, cursul durează aproximativ 9 luni, cu toate pauzele (sărbători de Anul Nou, timp pentru scrierea proiectelor intermediare).

Prima parte prezintă elevii conceptele de bază ale limbii. Variabile, metode, elemente de bază OOP și toate chestiile astea.

A doua parte a cursului prevede că studentul înțelege deja mai mult sau mai puțin cum să scrie în Java și i se poate oferi o stivă de tehnologie „adultă”. Totul începe cu SQL, apoi JDBC, Hibernate. Apoi HTTP, servlet-uri. Urmează primăvara, puțin despre git și maven. Și studenții scriu proiecte finale.

Toată formarea este împărțită în module. Am ținut cursuri de două ori pe săptămână. Durata unei lecții este de două ore.

Abordarea mea de a învăța

Am eliberat 5 grupuri. Pare mult timp de doi ani, dar aproape întotdeauna am condus 2 grupe în paralel.

Am încercat abordări diferite.

Prima opțiune este că o pereche este alocată pentru o prezentare cu o teorie. A doua pereche este pură practică. Această abordare a funcționat cumva, dar nu a fost foarte eficientă, după părerea mea.

A doua variantă la care am ajuns și la care lucrez acum este să nu dedic un cuplu întreg teoriei. În schimb, amestec secțiuni scurte de teorie timp de 5-10 minute și le întăresc imediat cu exemple practice. Această abordare funcționează mai bine.

Dacă este suficient timp, îi chem pe studenți la mine, îi așez la laptop și ei fac ei înșiși exemple practice. Funcționează excelent, dar, din păcate, durează mult.

Nu toată lumea ajunge până la capăt

O revelație pentru mine a fost faptul că nu întregul grup ajunge la finalul cursului.

Conform observațiilor mele, doar jumătate dintre elevi scriu proiectul final. Cele mai multe dintre ele sunt eliminate în prima parte a cursului. Și cei care au ajuns la a doua parte, de obicei, nu cad.

Ei pleacă din diverse motive.

Prima este complexitatea. Indiferent ce spun ei, Java nu este cel mai simplu limbaj. Pentru a scrie chiar și cel mai simplu program, trebuie să înțelegeți conceptul de clasă, o metodă. Și să înțelegi de ce trebuie să scrii public static void main(String[] arg) Mai sunt câteva concepte de înțeles.

Comparați asta cu Turbo Pascal, care este ceea ce au început mulți oameni, inclusiv eu:

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

Din câte știu, școala va rezolva această problemă prin introducerea unor teste suplimentare. Acum nu toată lumea poate studia Java. Acesta este încă în stadiul de concept, dar pasul este în mod clar cel corect.

Și al doilea motiv este ca în imaginea de mai jos:

E-Dobavki - un serviciu web pentru căutarea aditivilor alimentari în Java și Spring Boot, scris de studenții mei

Oamenii cred adesea că programarea înseamnă să tastezi mult text și să obții mulți bani pentru asta. Ca un copywriter, doar mai mulți bani.

Realitatea este puțin diferită. O mulțime de cod de rutină, erori neevidente, un proces de învățare constant. Este interesant, dar nu pentru toată lumea.

Acestea sunt statisticile. La început m-a supărat, m-am gândit că poate făceam ceva greșit. Acum înțeleg că statisticile sunt aproximativ aceleași pentru majoritatea cursurilor. Acum nu-mi fac griji, ci îi învăț pe acei oameni care sunt interesați de asta.

Idee de serviciu

Odată ce studenții au terminat întregul curs, a venit timpul să scrieți proiectul final. Au fost idei diferite. Au oferit foi de ToDo, proiecte de management de proiect și altceva.

Am vrut să fac ceva simplu, dar util. Criteriul meu a fost simplu - dacă eu și prietenii mei îl putem folosi. Un serviciu web pentru căutarea aditivilor alimentari a îndeplinit aceste cerințe.

Ideea este simplă. Când cumpărați un produs dintr-un magazin, vedeți un fel de E-aditiv în compoziție. Nu este clar din cod cât de periculos este sau nu (și există și aditivi periculoși care sunt interziși în multe țări).

Deschideți site-ul web, introduceți numele suplimentului (număr, unul dintre denumirile alternative) și obțineți un rezumat al suplimentului:

E-Dobavki - un serviciu web pentru căutarea aditivilor alimentari în Java și Spring Boot, scris de studenții mei

Sunt proiecte similare. De asemenea, puteți introduce pur și simplu aditivul în Google, deși nu afișează întotdeauna informațiile corect.

Dar din moment ce proiectul este educativ, dificultățile de mai sus nu ne-au oprit :)

punerea în aplicare

Toată lumea a scris în Java, codul sursă al proiectului pe Github.

Eram 7, inclusiv eu. Toată lumea a făcut o cerere de extragere, iar eu, sau o altă persoană din grup, am acceptat această solicitare de extragere.

Implementarea proiectului a durat aproximativ o lună - de la exprimarea ideii până la starea pe care o vedeți acum.

Aditivi de analiză

Primul lucru pe care l-a făcut unul dintre studenți, pe lângă crearea de bază a unui cadru în jurul bazei de date (entități, depozite etc.), a fost analizarea suplimentelor dintr-un site de informații existent.

Acest lucru a fost necesar pentru a testa punctele rămase. Nu este necesar niciun cod suplimentar pentru a popula baza de date. După ce am analizat rapid mai mulți aditivi, am putut testa în continuare interfața de utilizare, sortarea și filtrarea.

Spring Boot vă permite să creați mai multe profiluri. Un profil este un fișier cu setări.

Pentru mediul de dezvoltare, am folosit un profil cu un SGBD H2 local și portul HTTP implicit (8080). Astfel, de fiecare dată când a fost lansată aplicația, baza de date a fost șters. Analizatorul în acest caz a fost lucrul care ne-a salvat.

Căutare și filtrare

Un punct important este căutarea și filtrarea. O persoană dintr-un magazin trebuie să facă clic rapid pe codul suplimentului sau pe unul dintre nume și să obțină rezultatul.

Prin urmare, entitatea Aditiv are mai multe câmpuri. Acesta este codul aditiv, nume alternative, descriere. Căutarea se efectuează folosind Like în toate câmpurile în același timp. Și dacă introduceți [123] sau [amarant], veți obține același rezultat.

Am făcut toate acestea pe baza specificațiilor. Aceasta este o parte a Spring care vă permite să descrieți condițiile de căutare de bază (cum ar fi un câmp, de exemplu) și apoi să combinați aceste condiții (SAU sau ȘI).

După ce ați scris o duzină de specificații, puteți adresa întrebări complexe precum „toți aditivii de colorare periculoși care au cuvântul [roșu] în descriere”.

În ceea ce privește lucrul cu baza de date Spring, mi se pare foarte convenabil. Acest lucru este valabil mai ales atunci când lucrați cu interogări complexe. Înțeleg că aceasta are propria sa suprasarcină, iar o interogare SQL scrisă manual și optimizată va rula mai rapid.

Dar ader și la punctul de vedere că nu este nevoie să optimizezi totul în avans. Prima versiune trebuie să înceapă, să funcționeze și să permită înlocuirea pieselor individuale. Și dacă există o sarcină, aceste părți individuale trebuie rescrise.

Securitate

E simplu. Există utilizatori cu rol de ADMIN - aceștia pot edita completări, le pot șterge și pot adăuga altele noi.

Și mai sunt și alți utilizatori (înregistrați sau nu). Ei pot doar să răsfoiască lista de aditivi și să-i caute pe cei de care au nevoie.

Spring Security a fost folosit pentru a separa drepturile. Datele utilizatorului sunt stocate într-o bază de date.

Utilizatorii se pot înregistra. Acum nu mai da nimic. Dacă studenții continuă să dezvolte serviciul și să introducă câteva funcții personalizate, atunci înregistrarea va fi utilă.

Reactivitate și Bootstrap

Următorul punct este adaptabilitatea. În cazul serviciului nostru (cel puțin așa cum l-am văzut noi), majoritatea utilizatorilor vor fi cu telefoane mobile. Și trebuie să vizualizați rapid suplimentul de pe telefonul mobil.

Pentru a nu suferi cu CSS, am luat Bootstrap. Ieftin, vesel și arată decent.

Nu pot numi interfața ideală. Pagina principală este și mai puțin, iar pagina pentru o descriere detaliată a aditivului este îngustă pe telefoanele mobile;

Pot spune doar că am încercat să interferez cât mai puțin cu munca. Acesta este încă un proiect studentesc. Și, desigur, băieții vor putea corecta astfel de momente mai târziu.

Un minut de optimizare SEO

Deoarece sunt implicat îndeaproape în site-uri web și în tot ceea ce ține de SEO de mai bine de doi ani, nu aș putea lansa un proiect fără o optimizare SEO măcar de bază.

De fapt, am generat un șablon de titlu și descriere pentru fiecare supliment. URL-ul este aproape CNC, deși poate fi scurtat.

Am adăugat și contoare de prezență. S-a adăugat site-ul la Yandex Webmaster și Google Search Console pentru a monitoriza avertismentele de la motoarele de căutare.

Nu este de ajuns. De asemenea, trebuie să adăugați robots.txt și sitemap.xml pentru indexarea completă. Dar din nou, acesta este un proiect studentesc. Le voi spune ce trebuie făcut, iar dacă vor, o vor face.

Trebuie să atașați un certificat SSL. De asemenea, gratuit Let's Encrypt va funcționa. Am făcut asta pentru Spring Boot. Nu este greu de făcut, iar încrederea PS crește.

Ce urmează pentru proiect?

Apoi, de fapt, alegerea este la latitudinea băieților. Ideea originală a proiectului a inclus și o bază de date de produse cu link-uri către aditivi.

Introduceți „Snickers” și vedeți ce aditivi nutriționali conține.

Chiar la începutul proiectului, știam că nu vom avea niciun produs :) Prin urmare, am început doar cu aditivi.

Acum puteți adăuga produse și introduce altele suplimentare. chifle. Dacă este o bază de date extinsă, vor exista utilizatori.

Implementare

Proiectul a fost implementat pe VPS, Aruba Cloud. Acesta este cel mai ieftin VPS pe care l-am putut găsi. Folosesc acest furnizor de mai bine de un an pentru proiectele mele și sunt plăcut mulțumit de el.

Caracteristici VPS: 1 GB RAM, 1 CPU (nu știu de frecvență), 20 GB SSD. Pentru proiectul nostru este suficient.

Proiectul este construit folosind pachetul obișnuit mvn clean. Rezultatul este un borcan gras - un fișier executabil cu toate dependențele.

Pentru a automatiza puțin toate acestea, am scris câteva scripturi bash.

Primul script șterge vechiul fișier jar și construiește unul nou.

Al doilea script lansează borcanul asamblat, trecându-i numele profilului necesar. Acest profil conține informații despre conexiunea la baza de date.

Baza de date este MySQL pe același VPS.

Repornirea totală a proiectului include:

  • conectați-vă la VPS prin SSH
  • descărcați cele mai recente modificări git
  • rulați local-jar.sh
  • ucideți aplicația care rulează
  • rulați launch-production.sh

Această procedură durează trei minute. Aceasta mi se pare o alegere inteligentă pentru un proiect atât de mic.

complexitate

Principalele dificultăți în realizarea proiectului au fost de natură organizatorică.

Există un grup de oameni care par să știe să programeze, dar nu foarte bine. Ei știu ceva, dar încă nu îl pot aplica cu adevărat. Și acum trebuie să finalizeze proiectul într-o lună.

Am identificat un lider de echipă condiționat în acest grup. El a păstrat un document Google cu o listă de sarcini, a distribuit sarcini și a controlat acceptarea acestora. El a acceptat și cererile de retragere.

De asemenea, le-am cerut elevilor să scrie un scurt raport în fiecare seară despre munca pe care au făcut-o la proiect. Dacă nu ai făcut nimic, bine, scrie doar „n-ai făcut nimic”. Aceasta este o practică grozavă și te încordează puțin. Nu toată lumea a respectat această regulă, din păcate.

Scopul acestei mișcări a fost simplu. Formați o echipă, chiar dacă doar pentru o perioadă scurtă de timp, pentru a lucra împreună.

Am vrut ca băieții să simtă că munca lor este importantă. Înțelegeți că ei nu scriu cod sferic în vid. Și ceea ce fac împreună este un proiect pe care oamenii îl vor folosi apoi.

Prima săptămână sau două a fost o acumulare. Entitățile și micile comisioane au fost făcute încet. Încetul cu încetul i-am agitat, iar munca a devenit mai distractivă. Comunicarea în chat a devenit mai animată, studenții și-au oferit completările.

Cred că scopul a fost atins. Proiectul este gata, băieții au puțină experiență de lucru în echipă. Există un rezultat vizibil, tangibil, care poate fi arătat prietenilor și dezvoltat în continuare.

Constatări

Învățarea este interesantă.

Dupa fiecare curs am revenit agitat emotional. Încerc să fac fiecare pereche unică și să transmit cât mai multe cunoștințe.

E frumos când grupa pe care o predau ajunge în finală. Este deosebit de grozav când băieții scriu „Am o slujbă, totul este bine, mulțumesc”. Chiar dacă este un junior, chiar dacă nu sunt cei mai mari bani la început. Dar cel mai important este că au făcut un pas spre dorințele lor și au reușit.

Deși articolul s-a dovedit a fi destul de voluminos, cu siguranță nu a fost posibil să se acopere toate punctele. Prin urmare, scrieți întrebările dvs. în comentarii.

Sursa: www.habr.com

Adauga un comentariu