E-Dobavki: un servei web per cercar additius alimentaris en Java i Spring Boot, escrit pels meus estudiants

Introducció

Va succeir que durant els últims dos anys he estat ensenyant programació en una de les escoles d'informàtica de Kíev. Vaig començar a fer això Just For Fun. Una vegada vaig escriure un bloc de programació, després el vaig renunciar. Però el desig d'explicar coses útils a la gent interessada no ha desaparegut.

El meu llenguatge principal és Java. Vaig escriure jocs per a telèfons mòbils, programari per a comunicacions de ràdio i diversos serveis web. I ensenyo Java.

Aquí vull explicar la història de la formació del meu darrer grup. Com van passar de començar la formació a escriure un servei web que funcioni. Un servei web útil per trobar suplements nutricionals. Gratuït, sense publicitat, registre i SMS.

El servei en si és aquí - E-Dobavki.com.

E-Dobavki: un servei web per cercar additius alimentaris en Java i Spring Boot, escrit pels meus estudiants

El projecte és educatiu i no conté cap publicitat. Segons entenc de aquesta publicació, podeu proporcionar enllaços a aquests projectes.

Abans de descriure el projecte en si, us explicaré una mica el procés d'aprenentatge del grup; sense aquest, la imatge quedarà incompleta.

9 mesos de formació

A l'escola on imparteixo, el curs de Java està dividit en 2 parts. En total, el curs dura aproximadament 9 mesos, amb totes les pauses (vacances d'Any Nou, temps per escriure projectes intermedis).

La primera part introdueix els alumnes en els conceptes bàsics de la llengua. Variables, mètodes, conceptes bàsics de POO i totes aquestes coses.

La segona part del curs preveu que l'estudiant ja entén més o menys com s'escriu en Java, i se li pot donar una pila de tecnologia "adult". Tot comença amb SQL, després JDBC, Hibernate. Després HTTP, servlets. El següent és Spring, una mica sobre git i maven. I els alumnes escriuen projectes finals.

Tota la formació es divideix en mòduls. Vaig fer classes dues vegades per setmana. La durada d'una lliçó és de dues hores.

La meva manera d'aprendre

Vaig llançar 5 grups. Sembla molt durant dos anys, però gairebé sempre vaig dirigir 2 grups en paral·lel.

He provat diferents enfocaments.

La primera opció és que s'assigni una parella per a una presentació amb una teoria. La segona parella és pura pràctica. Aquest enfocament d'alguna manera va funcionar, però no va ser gaire efectiu, al meu entendre.

La segona opció a la qual vaig arribar i en la qual estic treballant ara és no dedicar-hi una parella sencera a la teoria. En canvi, mesclo seccions curtes de teoria durant 5-10 minuts i les reforço immediatament amb exemples pràctics. Aquest enfocament funciona millor.

Si hi ha prou temps, truco als estudiants al meu lloc, els asseixo al meu ordinador portàtil i ells mateixos fan exemples pràctics. Funciona molt bé, però malauradament requereix molt de temps.

No tothom arriba al final

Una revelació per a mi va ser el fet que no tot el grup arriba al final del curs.

Segons les meves observacions, només la meitat dels alumnes escriuen el projecte final. La majoria d'ells s'eliminen durant la primera part del curs. I els que han arribat a la segona part normalment no cauen.

Surten per diferents motius.

El primer és la complexitat. Diguin el que diguin, Java no és el llenguatge més senzill. Per escriure fins i tot el programa més senzill, cal entendre el concepte de classe, un mètode. I per entendre per què cal escriure public static void main(String[] arg) Hi ha uns quants conceptes més per entendre.

Compareu-ho amb Turbo Pascal, que és el que moltes persones van començar, inclòs jo:

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

Pel que jo sé, l'escola solucionarà aquest problema introduint proves addicionals. Ara no tothom pot estudiar Java. Això encara està en l'etapa de concepte, però el pas és clarament el correcte.

I el segon motiu és com a la imatge següent:

E-Dobavki: un servei web per cercar additius alimentaris en Java i Spring Boot, escrit pels meus estudiants

La gent sovint pensa que programar consisteix a escriure molt text i obtenir molts diners per això. Com un redactor, només més diners.

La realitat és una mica diferent. Molt codi de rutina, errors poc evidents, un procés d'aprenentatge constant. És interessant, però no per a tothom.

Aquestes són les estadístiques. Al principi em va molestar, vaig pensar que potser estava fent alguna cosa malament. Ara entenc que les estadístiques són aproximadament les mateixes per a la majoria de cursos. Ara no em preocupa, però ensenya a aquelles persones que hi estan interessades.

Idea de servei

Un cop els alumnes havien acabat tot el curs, era el moment de redactar el projecte final. Hi havia idees diferents. Van oferir fulls de tasques pendents, projectes de gestió de projectes i alguna cosa més.

Volia fer una cosa senzilla però útil. El meu criteri era senzill: si els meus amics i jo el podríem utilitzar. Un servei web per a la recerca d'additius alimentaris complia aquests requisits.

La idea és senzilla. Quan compres un producte en una botiga, veus algun tipus d'additiu electrònic a la composició. El codi no queda clar com de perillós és o no (i també hi ha additius perillosos que estan prohibits a molts països).

Obriu el lloc web, introduïu el nom del suplement (número, un dels noms alternatius) i obteniu un resum del suplement:

E-Dobavki: un servei web per cercar additius alimentaris en Java i Spring Boot, escrit pels meus estudiants

Hi ha projectes semblants. També podeu simplement escriure l'additiu a Google, encara que no sempre mostra la informació correctament.

Però com que el projecte és educatiu, les dificultats anteriors no ens van aturar :)

Implementació

Tothom va escriure en Java, codi font del projecte a Github.

Érem 7, inclòs jo. Tothom va fer una sol·licitud d'extracció i jo, o una altra persona del grup, vam acceptar aquesta sol·licitud d'extracció.

L'execució del projecte va trigar aproximadament un mes, des de l'expressió de la idea fins a l'estat que veieu ara.

Additius d'anàlisi

El primer que va fer un dels estudiants, a més de la creació bàsica d'un marc al voltant de la base de dades (entitats, repositoris, etc.), va ser analitzar complements d'un lloc d'informació existent.

Això va ser necessari per provar els punts restants. No es necessita cap codi addicional per omplir la base de dades. Després d'haver analitzat ràpidament diversos additius, podríem provar encara més la interfície d'usuari, l'ordenació i el filtratge.

Spring Boot us permet crear diversos perfils. Un perfil és un fitxer amb configuració.

Per a l'entorn de desenvolupament, hem utilitzat un perfil amb un SGBD H2 local i el port HTTP predeterminat (8080). Així, cada vegada que s'iniciava l'aplicació, s'esborrava la base de dades. L'analitzador en aquest cas va ser el que ens va salvar.

Cerca i filtratge

Un punt important és la cerca i el filtratge. Una persona d'una botiga ha de fer clic ràpidament al codi del suplement, o un dels noms, i obtenir el resultat.

Per tant, l'entitat Additiu té diversos camps. Aquest és el codi additiu, noms alternatius, descripció. La cerca es realitza amb M'agrada a tots els camps alhora. I si entreu [123] o [amarant], obtindreu el mateix resultat.

Tot això ho hem fet en funció de les especificacions. Aquesta és una part de Spring que us permet descriure les condicions de cerca bàsiques (com alguns camps, per exemple) i després combinar aquestes condicions (OR o AND).

Després d'haver escrit una dotzena d'especificacions, podeu fer consultes complexes com "tots els additius colorants perillosos que tenen la paraula [vermell] a la descripció".

Pel que fa a treballar amb la base de dades Spring, ho trobo molt convenient. Això és especialment cert quan es treballa amb consultes complexes. Entenc que això té la seva pròpia sobrecàrrega i una consulta SQL optimitzada i escrita manualment s'executarà més ràpid.

Però també m'adhereixo al punt de vista que no cal optimitzar-ho tot per endavant. La primera versió ha de començar, funcionar i permetre la substitució de peces individuals. I si hi ha una càrrega, aquestes parts individuals s'han de reescriure.

Seguretat

És fàcil. Hi ha usuaris amb la funció d'ADMINISTRADOR: poden editar addicions, suprimir-les i afegir-ne de noves.

I hi ha altres usuaris (registrats o no). Només poden navegar per la llista d'additius i cercar els que necessiten.

Spring Security es va utilitzar per separar els drets. Les dades de l'usuari s'emmagatzemen en una base de dades.

Els usuaris es poden registrar. Ara ja no dóna res. Si els estudiants continuen desenvolupant el servei i introduint algunes funcions personalitzades, la inscripció serà molt útil.

Capacitat de resposta i Bootstrap

El següent punt és l'adaptabilitat. En el cas del nostre servei (almenys com ho veiem), la majoria d'usuaris seran amb telèfons mòbils. I heu de veure ràpidament el suplement des del vostre telèfon mòbil.

Per no patir amb CSS, vam agafar Bootstrap. Barat, alegre i sembla decent.

No puc dir que la interfície és ideal. La pàgina principal ho és encara menys, i la pàgina per a una descripció detallada de l'additiu és estreta; als telèfons mòbils s'ha d'ampliar.

Només puc dir que he intentat interferir amb la feina el menys possible. Aquest encara és un projecte d'estudiant. I per descomptat, els nois podran corregir aquests moments més tard.

Un minut d'optimització SEO

Com que fa més de dos anys que estic molt involucrat en llocs web i tot allò relacionat amb el SEO, no podria llançar un projecte sense, almenys, una optimització bàsica de SEO.

De fet, vaig crear una plantilla de generació de títol i descripció per a cada complement. L'URL és gairebé CNC, encara que es pot fer més curt.

També he afegit comptadors d'assistència. S'ha afegit el lloc a Yandex Webmaster i Google Search Console per supervisar els avisos dels motors de cerca.

No és suficient. També heu d'afegir robots.txt i sitemap.xml per a una indexació completa. Però de nou, aquest és un projecte d'estudiant. Els diré què cal fer, i si volen, ho faran.

Cal adjuntar un certificat SSL. El Let's Encrypt gratuït també funcionarà. Ho vaig fer per Spring Boot. No és difícil de fer, i augmenta la confiança del PS.

Què és el següent per al projecte?

Aleshores, de fet, l'elecció depèn dels nois. La idea original del projecte també incloïa una base de dades de productes amb enllaços a additius.

Introduïu "Snickers" i mireu quins additius nutricionals conté.

Fins i tot a l'inici del projecte, sabia que no tindríem cap producte :) Per tant, vam començar només amb additius.

Ara podeu afegir productes i introduir-ne d'altres. panets. Si es tracta d'una base de dades extensa, hi haurà usuaris.

Desplegament

El projecte es va implementar a VPS, Aruba Cloud. Aquest és el VPS més barat que hem pogut trobar. Fa més d'un any que utilitzo aquest proveïdor per als meus projectes i n'estic molt satisfet.

Característiques del VPS: 1 GB de RAM, 1 CPU (no sé la freqüència), 20 GB SSD. Per al nostre projecte n'hi ha prou.

El projecte es construeix amb el paquet mvn clean habitual. El resultat és un pot gros: un fitxer executable amb totes les dependències.

Per automatitzar una mica tot això, vaig escriure un parell de scripts bash.

El primer script elimina el fitxer jar antic i en crea un de nou.

El segon script llança el pot muntat, passant-li el nom del perfil requerit. Aquest perfil conté informació de connexió a la base de dades.

DB - MySQL al mateix VPS.

El reinici total del projecte inclou:

  • inicieu sessió a VPS mitjançant SSH
  • baixa els darrers canvis de git
  • executeu local-jar.sh
  • mata l'aplicació en execució
  • executa launch-production.sh

Aquest procediment dura tres minuts. Aquesta em sembla una opció intel·ligent per a un projecte tan petit.

Dificultats

Les principals dificultats per crear el projecte van ser de caràcter organitzatiu.

Hi ha un grup de gent que sembla saber programar, però no gaire bé. Saben alguna cosa, però encara no la poden aplicar realment. I ara han d'acabar el projecte en un mes.

Vaig identificar un líder d'equip condicional en aquest grup. Va mantenir un document de Google amb una llista de tasques, va distribuir tasques i va controlar la seva acceptació. També va acceptar sol·licituds d'extracció.

També vaig demanar als alumnes que escrivissin un breu informe cada vespre sobre el treball que van fer en el projecte. Si no has fet res, d'acord, només has d'escriure "no has fet res". Aquesta és una gran pràctica i et posa una mica de tensió. No tothom va seguir aquesta regla, malauradament.

El propòsit de tot aquest moviment era senzill. Formar un equip, encara que sigui per un breu temps, per treballar junts.

Volia que els nois sentissin que la seva feina era important. Entendre que no escriuen codi esfèric al buit. I el que estan fent junts és un projecte que després la gent utilitzarà.

La primera setmana o dues va ser una acumulació. Les entitats i els petits commits es van fer amb lentitud. A poc a poc els vaig anar remenant, i la feina es va anar fent més divertida. La comunicació al xat es va fer més viva, els estudiants van oferir les seves addicions.

Crec que l'objectiu s'ha assolit. El projecte està fet, els nois van tenir una mica d'experiència treballant en equip. Hi ha un resultat visible i tangible que es pot mostrar als amics i desenvolupar-lo.

Troballes

Aprendre és interessant.

Després de cada classe vaig tornar emocionat. Intento que cada parella sigui única i transmeti el màxim de coneixement possible.

És bonic quan el grup al qual ensenyo arriba a la final. És especialment genial quan els nois escriuen "Tinc feina, tot està bé, gràcies". Encara que sigui un júnior, encara que al principi no siguin els diners més grans. Però el més important és que van fer un pas cap als seus desitjos, i ho van aconseguir.

Tot i que l'article va resultar bastant voluminós, certament no va ser possible cobrir tots els punts. Per tant, escriviu les vostres preguntes als comentaris.

Font: www.habr.com

Afegeix comentari