E-Dobavki – žiniatinklio paslauga, skirta maisto priedų paieškai Java ir Spring Boot, kurią parašė mano mokiniai

įvedimas

Taip jau sutapo, kad pastaruosius beveik dvejus metus dėstau programavimą vienoje iš Kijevo IT mokyklų. Pradėjau tai daryti „Just For Fun“. Kažkada rašiau programavimo dienoraštį, tada jo atsisakiau. Tačiau noras pasakoti naudingus dalykus susidomėjusiems niekur nedingo.

Mano pagrindinė kalba yra Java. Rašiau jame žaidimus mobiliesiems telefonams, radijo ryšio programinę įrangą ir įvairias žiniatinklio paslaugas. Ir aš mokau Java.

Čia noriu papasakoti savo paskutinės grupės mokymų istoriją. Kaip jie nuo mokymo pradžios iki veikiančios žiniatinklio paslaugos parašymo. Naudinga žiniatinklio paslauga ieškant maisto papildų. Nemokama, be reklamos, registracijos ir SMS.

Pati paslauga yra čia - E-Dobavki.com.

E-Dobavki – žiniatinklio paslauga, skirta maisto priedų paieškai Java ir Spring Boot, kurią parašė mano mokiniai

Projektas yra edukacinis ir jame nėra jokios reklamos. Kaip suprantu iš šį leidinį, galite pateikti nuorodas į tokius projektus.

Prieš aprašydamas patį projektą, šiek tiek papasakosiu apie grupės mokymosi procesą, be to, vaizdas bus neišsamus.

9 mėnesių treniruotės

Mokykloje, kurioje dėstau, Java kursas yra padalintas į 2 dalis. Iš viso kursas trunka maždaug 9 mėnesius su visomis pertraukomis (Naujųjų metų atostogos, laikas tarpiniams projektams rašyti).

Pirmoje dalyje mokiniai supažindinami su pagrindinėmis kalbos sąvokomis. Kintamieji, metodai, OOP pagrindai ir visa kita.

Antroji kurso dalis numato, kad studentas jau daugiau ar mažiau supranta, kaip rašyti Java, ir jam gali būti suteiktas „suaugusiųjų“ technologijų krūva. Viskas prasideda nuo SQL, tada JDBC, Hibernate. Tada HTTP, servletai. Kitas yra pavasaris, šiek tiek apie git ir maven. O studentai rašo baigiamuosius darbus.

Visi mokymai suskirstyti į modulius. Užsiėmimus vesdavau du kartus per savaitę. Vienos pamokos trukmė – dvi valandos.

Mano požiūris į mokymąsi

Išleidau 5 grupes. Dvejus metus atrodo daug, bet beveik visada lygiagrečiai vadovaudavau 2 grupėms.

Aš išbandžiau įvairius metodus.

Pirmasis variantas – viena pora skiriama pristatymui su teorija. Antroji pora yra gryna praktika. Šis metodas kažkaip veikė, bet, mano nuomone, nebuvo labai veiksmingas.

Antras variantas, prie kurio priėjau ir prie kurio dabar dirbu, yra neatidėti visos poros teorijai. Vietoj to, 5-10 minučių maišau trumpas teorijos dalis ir iškart jas sustiprinu praktiniais pavyzdžiais. Šis metodas veikia geriau.

Jei užtenka laiko, pasikviečiu studentus pas save, pasodinu prie nešiojamojo kompiuterio, o jie patys daro praktinius pavyzdžius. Tai veikia puikiai, bet, deja, tai užima daug laiko.

Ne visiems pavyksta iki galo

Apreiškimas man buvo tai, kad ne visa grupė pasiekia kurso pabaigą.

Mano pastebėjimais, baigiamąjį darbą rašo tik pusė studentų. Dauguma jų pašalinami per pirmąją kurso dalį. Ir tie, kurie pasiekė antrąją dalį, dažniausiai nenukrenta.

Jie išvyksta dėl įvairių priežasčių.

Pirmasis yra sudėtingumas. Kad ir ką jie sakytų, „Java“ nėra pati paprasčiausia kalba. Norint parašyti net paprasčiausią programą, reikia suprasti klasės, metodo sąvoką. Ir suprasti, kodėl reikia rašyti public static void main (String[] arg) Reikia suprasti dar keletą sąvokų.

Palyginkite tai su Turbo Pascal, nuo ko pradėjo daugelis žmonių, įskaitant mane:

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

Kiek žinau, šią problemą mokykla išspręs įvesdama papildomą testavimą. Dabar ne visi gali mokytis Java. Tai vis dar koncepcijos stadijoje, bet žingsnis akivaizdžiai teisingas.

Ir antroji priežastis yra tokia, kaip žemiau esančiame paveikslėlyje:

E-Dobavki – žiniatinklio paslauga, skirta maisto priedų paieškai Java ir Spring Boot, kurią parašė mano mokiniai

Žmonės dažnai galvoja, kad programavimas – tai daug teksto rinkimas ir už tai daug pinigų gavimas. Kaip ir tekstų rašytojas, tik daugiau pinigų.

Realybė šiek tiek kitokia. Daug įprasto kodo, neakivaizdžių klaidų, nuolatinis mokymosi procesas. Įdomu, bet ne visiems.

Tokia yra statistika. Iš pradžių tai mane nuliūdino, galvojau, kad gal kažką darau ne taip. Dabar suprantu, kad daugumos kursų statistika yra maždaug tokia pati. Dabar aš dėl to nesijaudinu, o mokau tuos žmones, kuriems tai įdomu.

Paslaugos idėja

Kai studentai baigė visą kursą, atėjo laikas rašyti baigiamąjį darbą. Buvo įvairių idėjų. Jie siūlė ToDo lapus, projektų valdymo projektus ir dar kažką.

Norėjau padaryti ką nors paprasto, bet naudingo. Mano kriterijus buvo paprastas – ar mes su draugais galime tuo pasinaudoti. Šiuos reikalavimus atitiko internetinė maisto priedų paieškos paslauga.

Idėja paprasta. Kai perkate prekę parduotuvėje, kompozicijoje matote kažkokį E-priedą. Iš kodekso neaišku, kiek tai pavojinga ar ne (o taip pat yra pavojingų priedų, kurie yra uždrausti daugelyje šalių).

Atidarote svetainę, įvedate priedo pavadinimą (numerį, vieną iš alternatyvių pavadinimų) ir gaunate priedo santrauką:

E-Dobavki – žiniatinklio paslauga, skirta maisto priedų paieškai Java ir Spring Boot, kurią parašė mano mokiniai

Yra panašių projektų. Taip pat galite tiesiog įvesti priedą į Google, nors jis ne visada rodo informaciją teisingai.

Bet kadangi projektas yra edukacinis, aukščiau minėti sunkumai mūsų nesustabdė :)

Vykdymas

Visi rašė Java, projekto šaltinio kodas „Github“..

Mūsų buvo 7, įskaitant mane. Visi pateikė traukimo prašymą, o aš arba kitas asmuo iš grupės priėmiau šį prašymą.

Projekto įgyvendinimas užtruko apie mėnesį – nuo ​​idėjos išsakymo iki būklės, kurią matote dabar.

Analizavimo priedai

Pirmas dalykas, kurį vienas iš studentų padarė, be pagrindinio duomenų bazės kūrimo (subjektų, saugyklų ir kt.), buvo priedų iš esamos informacijos svetainės analizė.

Tai buvo būtina norint patikrinti likusius taškus. Norint užpildyti duomenų bazę, nereikia jokio papildomo kodo. Greitai išanalizavę kelis priedus, galėtume toliau išbandyti vartotojo sąsają, rūšiavimą ir filtravimą.

„Spring Boot“ leidžia sukurti kelis profilius. Profilis yra failas su nustatymais.

Dev aplinkai naudojome profilį su vietine H2 DBVS ir numatytuoju HTTP prievadu (8080). Taigi kiekvieną kartą paleidus programą, duomenų bazė buvo išvalyta. Šiuo atveju analizatorius mus išgelbėjo.

Paieška ir filtravimas

Svarbus dalykas yra paieška ir filtravimas. Žmogus parduotuvėje turi greitai spustelėti papildo kodą arba vieną iš pavadinimų ir gauti rezultatą.

Todėl priedo objektas turi kelis laukus. Tai yra priedo kodas, alternatyvūs pavadinimai, aprašymas. Paieška atliekama naudojant Like visuose laukeliuose vienu metu. Ir jei įvesite [123] arba [amarantas], gausite tą patį rezultatą.

Visa tai padarėme pagal specifikacijas. Tai yra pavasario dalis, leidžianti apibūdinti pagrindines paieškos sąlygas (pvz., tam tikrą lauką) ir sujungti šias sąlygas (ARBA arba IR).

Parašę tuziną specifikacijų, galite užduoti sudėtingas užklausas, pvz., „visi pavojingi dažiklių priedai, kurių aprašyme yra žodis [raudonas]“.

Kalbant apie darbą su Spring duomenų baze, man tai labai patogu. Tai ypač aktualu dirbant su sudėtingomis užklausomis. Suprantu, kad tai turi savo pridėtines išlaidas, o rankiniu būdu parašyta ir optimizuota SQL užklausa veiks greičiau.

Bet aš taip pat laikausi požiūrio, kad nereikia visko optimizuoti iš anksto. Pirmoji versija turėtų prasidėti, veikti ir leisti pakeisti atskiras dalis. O jei yra krūvis, šias atskiras dalis reikia perrašyti.

saugumas

Tai paprasta. Yra vartotojų, turinčių ADMINĖTOJO vaidmenį – jie gali redaguoti papildymus, juos ištrinti ir pridėti naujų.

Ir yra kitų vartotojų (registruotų ar ne). Jie gali tik naršyti priedų sąrašą ir ieškoti jiems reikalingų.

„Spring Security“ buvo naudojama teisėms atskirti. Vartotojo duomenys saugomi duomenų bazėje.

Vartotojai gali užsiregistruoti. Dabar tai nieko neduoda. Jei studentai toliau plėtos paslaugą ir įdiegs kai kurias asmenines funkcijas, registracija bus naudinga.

Reagavimas ir „Bootstrap“.

Kitas punktas yra prisitaikymas. Mūsų paslaugos atveju (bent jau taip, kaip mes ją matėme), dauguma vartotojų bus su mobiliaisiais telefonais. Ir jūs turite greitai peržiūrėti priedą iš savo mobiliojo telefono.

Kad nenukentėtų dėl CSS, pasirinkome Bootstrap. Pigu, linksma ir gerai atrodo.

Negaliu pavadinti sąsajos idealia. Pagrindinis puslapis yra dar mažesnis, o puslapis, kuriame pateikiamas išsamus priedo aprašymas, mobiliuosiuose telefonuose turi būti platesnis.

Galiu pasakyti tik tiek, kad stengiausi kuo mažiau kištis į darbą. Tai vis dar studentų projektas. Ir, žinoma, tokias akimirkas vaikinai vėliau galės pataisyti.

SEO optimizavimo minutė

Kadangi jau daugiau nei dvejus metus esu glaudžiai susijęs su svetainėmis ir viskuo, kas susiję su SEO, negalėjau išleisti projekto be bent elementarios SEO optimizacijos.

Tiesą sakant, kiekvienam priedui sukūriau pavadinimo ir aprašo šabloną. URL yra beveik CNC, nors jį galima sutrumpinti.

Taip pat pridėjau lankomumo skaitiklius. Svetainė pridėta prie „Yandex Webmaster“ ir „Google Search Console“, kad būtų galima stebėti paieškos sistemų įspėjimus.

Nepakankamai. Taip pat turite pridėti robots.txt ir sitemap.xml, kad galėtumėte visiškai indeksuoti. Bet vėlgi, tai studentų projektas. Aš jiems pasakysiu, ką reikia daryti, o jei norės, tai padarys.

Turite pridėti SSL sertifikatą. Taip pat veiks nemokamas Let's Encrypt. Aš tai padariau „Spring Boot“. Tai padaryti nesunku, o PS pasitikėjimas didėja.

Kas bus toliau su projektu?

Tada, tiesą sakant, pasirinkimas priklauso nuo vaikinų. Pradinė projekto idėja taip pat apėmė produktų duomenų bazę su nuorodomis į priedus.

Įveskite „Snickers“ ir pažiūrėkite, kokių maistinių priedų jame yra.

Dar projekto pradžioje žinojau, kad produktų neturėsime :) Todėl pradėjome tik nuo priedų.

Dabar galite pridėti produktų ir pristatyti papildomų. bandelės. Jei tai didelė duomenų bazė, bus vartotojų.

Diegimas

Projektas buvo įdiegtas VPS, Aruba Cloud. Tai pigiausias VPS, kokį tik galėjome rasti. Jau daugiau nei metus naudojuosi šiuo paslaugų teikėju savo projektams ir esu juo patenkintas.

VPS charakteristikos: 1 GB RAM, 1 CPU (dažnio nežinau), 20 GB SSD. Mūsų projektui to pakanka.

Projektas kuriamas naudojant įprastą mvn švarų paketą. Rezultatas yra storas stiklainis – vykdomasis failas su visomis priklausomybėmis.

Norėdami visa tai šiek tiek automatizuoti, parašiau keletą bash scenarijų.

Pirmasis scenarijus ištrina seną jar failą ir sukuria naują.

Antrasis scenarijus paleidžia surinktą stiklainį, perduodant jam reikiamo profilio pavadinimą. Šiame profilyje yra duomenų bazės ryšio informacija.

DB – MySQL tame pačiame VPS.

Visas projekto iš naujo paleidimas apima:

  • prisijungti prie VPS per SSH
  • Atsisiųskite naujausius git pakeitimus
  • paleiskite local-jar.sh
  • nužudyti veikiančią programą
  • paleiskite launch-production.sh

Ši procedūra trunka tris minutes. Man tai atrodo protingas pasirinkimas tokiam mažam projektui.

Sunkumai

Pagrindiniai sunkumai kuriant projektą buvo organizacinio pobūdžio.

Yra grupė žmonių, kurie, atrodo, moka programuoti, bet nelabai gerai. Jie kažką žino, bet vis tiek nemoka to pritaikyti. O dabar projektą jiems reikia užbaigti per mėnesį.

Šioje grupėje įvardijau sąlyginį komandos vadovą. Jis laikė „Google“ dokumentą su užduočių sąrašu, paskirstė užduotis ir kontroliavo jų priėmimą. Jis taip pat priėmė traukimo prašymus.

Taip pat paprašiau mokinių kiekvieną vakarą parašyti trumpą pranešimą apie jų nuveiktus darbus projekte. Jei nieko nepadarėte, gerai, tiesiog parašykite „nieko nepadarėte“. Tai puiki praktika ir suteikia jums šiek tiek įtampos. Deja, šios taisyklės laikėsi ne visi.

Viso šio judėjimo tikslas buvo paprastas. Suburkite komandą, nors ir trumpam, dirbti kartu.

Norėjau, kad vaikinai jaustų, jog jų darbas yra svarbus. Supraskite, kad jie nerašo sferinio kodo vakuume. Ir tai, ką jie daro kartu, yra projektas, kurį žmonės naudos.

Pirmą savaitę ar dvi buvo kaupimasis. Subjektai ir smulkūs įsipareigojimai buvo daromi vangiai. Po truputį juos išmaišiau, darbas tapo smagesnis. Bendravimas pokalbyje pagyvėjo, studentai pasiūlė savo papildymus.

Tikiu, kad tikslas pasiektas. Projektas baigtas, vaikinai įgijo šiek tiek patirties dirbant komandoje. Yra matomas, apčiuopiamas rezultatas, kurį galima parodyti draugams ir tobulinti toliau.

išvados

Mokytis smagu.

Po kiekvienos pamokos grįždavau emociškai susijaudinęs. Stengiuosi, kad kiekviena pora būtų unikali ir perteiktų kuo daugiau žinių.

Smagu, kai mano mokoma grupė patenka į finalą. Ypač šaunu, kai vaikinai rašo: „Gavau darbą, viskas gerai, ačiū“. Net jei tai jaunesnysis, net jei iš pradžių tai nėra didžiausi pinigai. Tačiau svarbiausia, kad jie žengė žingsnį savo norų link, ir jiems pavyko.

Nors straipsnis pasirodė gana gausus, visų punktų aprėpti tikrai nepavyko. Todėl savo klausimus rašykite komentaruose.

Šaltinis: www.habr.com

Добавить комментарий