Mattiase blogi - tammmatTLU/suvepraktika_tiim2 GitHub Wiki
Esmaspäev - 09.06.2025
Kell on saamas 15:00. Hommikupoolik möödus arutledes projekti olemuse üle tehnilisest vaatepunktist. Keeruline on aru saada sellest, kuidas asjade töötamist täpselt ette kujutavad Peter ja ka Jaagup, kellega meil oli justkui esimene sisuline/tehniline arutelu. Selle käigus tegime suuresti ümber oma kavandatud andmebaasi mudelit, mille Merle oma kursusel heaks kiitis. Suure ümbermudlleerimise järel käisime lõunal ning tagasi jõudes hakkasime uuesti Jira keskkonda scrum'i jaoks backlogi storypointe looma ja nendest taske tegema. Peter saab teemast palju paremini aru, kui mina ning ma tunnen ennast oma tehniliste oskuste tõttu suhteliselt halvasti. Ma tunnen, et mul pole kaugeltki mitte olemas neid oskusi, mida on vaja selle projekti loomiseks ja ma tõsiselt vihkan, kuidas me (vähemasti digimeedikud) sellel semestril peaaegu nagu mitte midagi tegime. Vähemalt tunne on selline. Ma arvan, et seda projekti oleks palju otstarbekam teha nt. teise kursuse lõpus või kolmanda kursuse esimesel semestril, kuna selleks hetkeks võiks juba olla omandatud natuke rohkem arendusprotsessiks vajalikke teadmisi ja oskusi. Sain täna esimest korda teada, mis asi on scrum. Sain eelmise kuu alguses esimest korda teada, mis asi on React. Klient nõuab back-endis PHP-d, mida ma tean, et varem veebiprogrammeerimise kursusel õpetati, aga meile mitte. Ma tunnen ennast suures pildis nagu väga ülepea vees, sest ma pean hakkama tegema mingit arendust esimest korda elus vahenditega, mida ma hakkan nüüd selle tegemise käigus õppima. Ma arvan praegu, et kui ei oleks Peterit, siis see "projekt" lõppeks umbes samas seisus nagu meie HiFi prototüüp, mis oli suuresti Copiloti ja minu lugemisoskuse koostöös valminud struktuurita ollus. Vaatamata sellele kõigele, mis on teinud kogu selle kogemuse ääretult ebameeldivaks usun, et me saame selle kahe nädala lõpuks asjaga suht kaugele ja suudame enda üle uhked olla.
Aa ja ma kirjutasin Meelisele ka uuesti. Loodame, et seekord vastab :D
Teisipäev - 10.06.2025
Tööpäev koolis
Täna hommikul veetsin umbes pool tundi aega tutvudes W3Schools abil PHP-ga. Tegin seda seni kuni Peter ka kohale jõudis. Siis hakkasime tiimiga koos asju tegema. Peter, Armin ja Martin hakkasid tegelema backendi asjadega ja algul oli raske välja mõelda kust otsast ise võiks peale hakata. Siis vist Martini soovitusel hakkasime Vaikoga vaatama seda esmase puldi vaate lehte. Nokitsesime selle kallal lõunani (github codespace lakkas töötamast) ning peale lõunat tegime edasi. Selle käigus saime üles seatud esmase Reacti rakenduse ja esimesed Route'id rakenduses. Lisaks mõtlesime veidi, kuidas võiks olla meie Reacti osa rakendusest lõpuks struktureeritud, sest Martini väheke kogenum vend (teeb magistrit kui mälu ei peta) vaatas üle meie HiFi prototüübi koodi ja tõi välja hea märkuse, et suur osa oli väga segaselt ühes /components kaustas samas failis kirja pandud kuigi tegelikult oli seal komponente, mis kuuluksid paremini /pages alla. Muidugi oli veel struktuuri ja käekirja osas märkusi, nagu nt. segamini kasutatud eesti ja inglise keel ning segamini failide nimed suure algustähe ja väikese algustähega. Proovisime täna selle kõigega arvestada ning mõtlesime praegu tuleviku peale ja proovisime kõik võimalikult lihtsasti ära tükeldada - lehe baas on /pages komponent ning osad lehe peal, nagu nt. nupud või päis on eraldi komponendid /components kaustas, mida saab erinevate parameetritega n tükki genereerida. Lisaks sellele tuletasime meelde seni õpitud CSS-i vahendeid ja kasutasime nendest päris mitut. Otsisime inspiratsiooni ka internetist ja leidsime selle käigus päris vahvaid tööriistu CSS-i lõikude automaatseks genereerimiseks. Üks sellistest tööriistadest on nt. https://cssgradient.io, millega saab genereerida gradient värve määravat koodi. Kasutasime seda nii nuppude kui ka lehe enda taustavärvide määramisel. Puldi n.ö 'default'-vaade sai dünaamiliseks loodud ning selle välimusega võis isegi täiesti rahule jääda. Tulevikus, kui saame hakata konkreetsel vaatel eksisteerivate nuppude ja muude elementide kohta infot backend'i abil andmebaasist küsima, tuleb Reacti lehte veel näppida, sest hetkel on "andmed" lihtsalt kahedimensioonilise massiivina koodi sisse kirjutatud.
Õhtune lisa
Koju minnes jäi tõsiselt häirima see, et ma ei saanud backendis tehtud asjadest maad ega mütsigi aru ning küsisin seepeale Peterilt, et mille kohta ma lugema peaks, et aru saada, mida nad tegid ja mis backendis üldse toimub. Sain suuna Symfony dokumentatsioonile, mis on PHP raamistik, mida me kasutame API ja ülejäänud backendi loomiseks. Alustasin õhtul selle lugemisega ning sain nii mõndagi targemaks. Sama palju kui Martin või Armin ma ilmselt lugeda ei jõudnud, aga saan nüüd vähemalt enamusest süntaksist aru ning tean enam-vähem routerite ja controllerite kirjapanekute tähendust. Jätkan sellega ilmselt homme, sest praegu vajub silm vaikselt kinni. Kuid vähemalt sain häirivast tundest lahti!
Kolmapäev - 11.06.2025
Hommikul alustasime Vaikoga frontendis lehestiku edasi arendamist ja tegelikult jõudsime tänasega päris heale kaugusele. Esmalt tegime olemasolevad lehed selliseks, et seal hetkel kasutusel olevad konstantides salvestatud massiivid saab jätta tegelikult samanimelisteks konstantideks, kuid nende sisuks tuleb võtta API GET requestist saadud andmete jada, et API-ga tagantjärele ühendamine oleks võimalikult lihtne ja ajakulu oleks võimalikult väike. Peale seda hakkasime looma uusi lehti ja komponente ja arendasime Reacti rakenduse sisest navigatsiooni, asendades igal pool, kus on vajalik API request selle lihtsalt vastava struktuuriga massiiviga, et hetkel midagigi renderdada võimalik oleks. Algul arvasime, et adminil oleks vajalik seadmete juhtimisel valida kõigepealt ruum, milles olevaid seadmeid ta juhtida tahab ning seejärel kuvada talle valik pultidest, millel on antud ruumis olevate seadmete juhtimiseks vajalikud nupud. Kliendiga kohtudes saime teada, et seda otseselt vajalikuks ei peeta ja piisab lihtsalt kõikide pultide vahel valiku tegemise võimaldamisest.
Pikalt nokitsesime Reacti enda routingut tehes selle kallal, et oleks üks dünaamiline route lehele RoomSelectionPage, mida peab kuvama nii UIConfig kui ka DeviceControl lehtede eel ning peale mida peab kuvama vastavalt eelnenud tegevusele erineva järgmise sammu. Lahendasime selle kasutades URL-i parameetrit. Ruumi valiku lehe kuvamisel on nüüd URL-i path selline: "/room-selection/:action", kus ":action" on parameeter, millega salvestatakse seda, mis toimingu jaoks ruumi valitakse. Ehk kui minna toimingu valimiselt seadmete juhtimisse, siis genereeritakse ruumi valik, kus :action = "device-control". Seda actionit kasutatakse ruumi valiku kinnitamisel uue pathi loomisel. Uus path on sellise süntaksiga: "/action/selected-room" ehk näiteks "/device-control/A-001". See võimaldas meil luua vaid ühe mitmes kohas kasutatava universaalse komponendi ruumi valiku jaoks ning võimaldas vältida tegevuse parameetri järjestikust edasi andmist (n.ö telefonimängu) erinevate lehtede ja komponentide kuvamisel Reactis.
Suuresti oleme seni tegelenud Reacti mõttes lihtsamate lehtedega ning ei ole veel tegelenud kasutajaliidese redigeerimise osaga, mis on suure tõenäosusega kõige mahukam ja keerulisem osa Reacti rakendusest, sest seal on vaja kasutada mitmeid erinevaid Reacti mooduleid, nagu nt. tiimiblogis lühidalt seletatud Redux või Rnd (Resize and Drop) elementide liigutamiseks ja nende suuruste muutmiseks. Lisaks moodulite kasutusele võtmisele on redigeerimise all ka kõige rohkem erinevat funktsionaalsust. Kasutajaliideses saab väga palju erinevaid asju muuta, see tuleb võimaldada nii elemendi kaupa kui ka kogu lehe peal. Tuleb võimaldada vaate kopeerimine, selle parooli muutmine, elementide kustutamine, ilmselt ka mingi undo-nupp jne. Me ise arvame, et see on vähemalt kahe-kolme päeva töö ja eks ole näha, kas jõuame homme sellega alustada või alustame sellega reedel. Kõik oleneb sellest, kui kaua läheb aega seadmete juhtimise osa sidumine API ja andmebaasiga.
Emotsioon on tegelt nüüdseks päris hea. Pall on kindlalt veerema saadud ja hetkel tuleb oodata järgmist auku teel, milleks ma usun, et saab olema API ühenduse loomine/API requestide kasutusele võtmine, kuna me pole seda varem sellisel mahul teinud (ainult natukene veebiprogrammeerimise kursusel, aga see oli ka eelmine semester) ning seal on vaja täpselt koordineerida omavahel route'ide osas, et õige route väljastaks selle, mida hetkel Reacti rakendusel vaja on. Loodetavasti saame sellega ilusti hakkama ja ei pea selle peale liiga palju aega kulutama. Head meelt tekitas ka see, et klient lubas proovida edaspidi kiiremini meilidele vastata. Ma olen seda projekti/arendust küll väga palju kirunud, kuid tegelikult pean tunnistama, et olen seni (küll tungivast vajadusest, mis tekitab stressi, kuid sellegi poolest olen) õppinud päris palju uusi asju ja ma arvan, et see tuleb tegelikult väga palju kasuks edasisel tegevusel tarkvaraarenduse vallas. Ma tunnen, et mul on vedanud ka grupikaaslaste valikuga ja KINDLASTI sellega, et Peter meile appi tuli. Meil sujub seni koostöö päris hästi ning kõik on motiveeritud ja elevil selle süsteemi loomisest, mis loob hea keskkonna enda parima andmiseks :)
Neljapäev - 12.06.2025
Täna hommikul esimese asjana tegi Peter väikese Docker'i tutoriali ja näitas, kuidas projekti Dockeris käivitada. Selle mugavdamiseks hakkasin lõpuks github codespace'i asemel kasutama lokaalset repo klooni. Seal polnud tegelikult midagi rasket, aga olen terve semester kasutanud codespace'i, sest tegime seda OOP-is ja see oli enne, kui toimusid Giti teemalised seminarid. Projekti käivitamine oli algul katki mingi "migrationite" probleemi tõttu. Migrationid on minu teada siis need failid, millest docker andmebaasi tabelite loomise kohta andmed loeb. Ma detailideni ei teagi kuidas need töötavad, aga ma olen päris kindel, et põhimõtteliselt teevad nad seda. Peale katkiste migratsioonifailide kustutamist (jätsin ühe õige alles) sain projekti Dockeriga jooksutada. Peale seda jõudis kooli ka Martin ja me tegime tiimiga umbes 20 minutilise stand-upi, kus rääkisime talle täpselt, mida eile tegime ja millest kliendiga rääkisime ning panime paika mida täna edasi tegema plaanisime hakata. Minu ja Vaiko eesmärgiks oli hommikul soojenduseks ja väikese taski kirja saamiseks teha tagasi navigeerimise nupu komponent ja lisada see igale lehele, kus seda vaja on. See polnud suurt midagi. Ja teiseks, suuremaks ülesandeks oli tänasega püsti panna React-redux. Algul pusisime selle kallal ise: lugesime dokumentatsiooni ja tegime käsitsi faile, kuid siis otsustasime, et kiirem on lasta ChatGPT-l neid faile endeid kirjutada ning neid seejärel lihtsalt vastavalt oma vajadustele kohendada. Store töötab, kuid seda üles seades tahtsime kohe teha niimoodi, et store saab oma algse oleku (store state) andmebaasis salvestatud JSON-itest, kuid päeva jooksul ei saanud erinevate backendi probleemide tõttu teised selleks vajalikku controllerit valmis. Seda hakati küll tegema, aga minu arusaamist mööda oli endiselt migrationitega ja dockeriga mingid probleemid, mis API endaga tegelemist veidi takistasid. Testisime store'ist väärtuste saamist hetkel hardcoded algväärtustega, kuid tegime ka valmis funktsiooni küsimaks seda API käest ning ootamaks store'i initsialiseerimisega kuni API-lt on andmed/vastus kätte saadud. Kasutasime selleks createAsyncThunk funktsiooni Reacti @reduxjs/toolkit moodulist. createAsyncThunk ongi loodud API ja redux-store'i vahelise suhtluse hõlbustamiseks. See teeb automaatselt asünkroonseks ja võimaldab jätta kirjutamata eraldi puhtas reactis kirjutatud loogikat api päringu tulemuse ära ootamiseks enne edasi toimetamist. Loodud thunkil on kolm võimalikku olekut: pending(vastuse ootel), fulfilled (täidetud), rejected (tagasi lükkatud/error jms.). Igal staatusel toimitakse edasi erinevalt ning toimimise loogika on defineeritud selle Slice'i sees extraReducers all. Need toimingud on erilised selle poolest, et tavalisi reducereid saad sa igal pool ise dispatchida, kus sa need korrektselt importinud oled ja välja kutsud, kuid extraReducereid kutsub AsyncThunk ise välja vastavalt eelmainitud olekule. Ma ei ole selles seletuses 100% kindel ja teistele ma seda edasi ei õpetaks, aga see on kuidas ma sellest aru sain.
Peale pikka reduxiga jändamist tegime lõunapausi. Lõunapausiks olid täna ajud juba eriti läbi. Ma ei ole kindel, kas see tulenes sellest, et tööd on juba mitu päeva tehtud või sellest, et lõunapaus oli lühem kui tavaliselt, aga millegi pärast ei saanud ma lõunapausiga ajusid uuesti värskeks ja peale lõunat oli päris keeruline üldse midagi teha. Ma isegi peast ei mäleta siia hetkel kirjutada, mida me tegelikult Vaikoga tegime peale lõunat, aga commitide järgi oskan öelda, et peale lõunat asendasime olemasolematu API route'i fetchimise hardcoded esialgse store state'iga ning tegime DeviceToggle komponendi renderdamise loogika selliseks, et ta kasutaks kujunduse määramisel store'is olevaid väärtusi ning et nupuvajutused muudaksid hetkel store'is salvestatud olekut, kuigi lõpuks peaksid nupuvajutused tegema POST-päringud API'le, käivitamaks vastava nimega programmi serveris (mis teeb mingi konkreetse seadme mingi konkreetse juhtimise (see programm on nupu külge eelseotud ja juhtimisel midagi eraldi lisama/tegema ei pea)).
Homme tahaks viimaks need esimesed API ühendused luua, et me saaks hakata reaalselt kasutama andmebaasis olevaid andmeid. Seni oleme teinud põhimõtteliselt puhast Reacti ja pannud ennast API ühendusteks võimalikult valmis.
Reede - 13.06.2025
Kätte on jõudnud esimese nädala viimane päev ja n.ö arenduse keskpunkt. Tegelikult arvasin, et oleme selleks ajaks kaugemale jõudnud. Tänasega alustasime Vaikoga kasutajaliidese redigeerimise loomist, implementeerides react-rnd mooduli, tegemaks elemendid lohistatavaks ja nende suurused muudetavaks. Lisaks tegime store'is muudatusi eristamaks omavahel tavalisi span elemente ja button elemente (mis on seotud button templateiga ja mille kohta salvestatakse igaühe kohta eraldi redux state andmebaasis erinevalt spannidest). Lisasime nuppude lisamise funktsionaalsuse, kus oli probleemiks loodud elemendi id määramine. Kuna kell oli selleks ajaks kui lõpetasime juba umbes 17, otsustasime ära minna. Veetsime poole tee märgistamiseks Vaiko ja Martiniga linnas aega. Järgmisel nädalal on vaja hakata looma vajalikke API otspunkte, et me saaks frontendi ja backendi omavahel korralikult siduda. Peter tegi vist terve päev autentimist.
Esmaspäev - 16.06.2025
Täna tegime Vaikoga kasutajaliidese redigeerimise osa edasi. Tegime korda eelmise nädala lõpul katki jäänud elementide lisamise. Probleemiks oli see, et reduxis on elemendid key: value paaridena ja elemendi key-ks peaks olema sisuliselt tema ID andmebaasis. Me otsustasime lõpuks peale tiimisisest arutelu kasutada unikaalse väärtuse määramiseks Date.now() tagastatud väärtust mis on int väärtus (1970 1. jaanuari keskööst möödunud millisekundite arv). Päeva jooksul käisin ma vahepeal ära, aga lisatud sai veel igale elemendile kustutamise nupp ning igale elemendile redigeerimise nupp, et määrata eraldi iga elemendi värvi, fonti, tekstisuurust, teksti, muuta nuppu malli ning võimalus lülitada "snap to grid" ja vabaliigutamise vahel. Viimasega läks päris palju aega, sest seal oli vajadus vahetada Rnd komponendi prope omavahel välja (default asendati positioni ja size'iga, et teha see "controllable" komponendiks). Snap to grid moodus võimaldati dragGrid propiga ning lüliti sai lisatud Toolbarile. Selle juures heidutas meid enim see, et kasutusele võetud lahenduse kohta saime teada läbi Copiloti chati, kes meile muidugi Rnd komponendi propi osas hallutsineeris ja ütles, et kasutage kindlasti "grid" propi ja MITTE "dragGrid" propi ning otsisime tükk aega, miks asi ei tööta ja tegelikult otsisime valest kohast. Mingi hetk tõusid aga turjal karvad püsti ja kõhutunne ütles, et kuri robot valetab ning seetõttu hakaksime ise dokumentatsiooni lugema. Saime teada, et õige on siiski kasutada dragGridi ja me isegi ei leidnud tavalist grid propi. Eks see LLM-i usin kasutamine selline kahe otsaga mõõk ole. Vahel ta ikka paneb pange ka ja siis võib päris pikalt minna enne kui aru saad, et üldse vales metsatukas seeni otsid. Samas võimaldab ta kindlasti rohkem asju teha väga palju kiiremini (vähemalt kui esimest korda ise teha ilma, et keegi varem õpetanud oleks või et oleks dokumentatsiooniga süvitsi tutvunud) seega ma isiklikult arvan, et ta on kokkuvõttes positiivse mõjuga. Teen seda ka edaspidi.
Homme plaanime valmis saada "Salvesta" nupu ning lisada nupu malli loomise võimaluse.
Teisipäev - 17.06.2025
Täna oli väga pikk päev. Tegin hommikul 9-st õhtul 19-ni tööd. Vahepeal oli muidugi lõuna ka umbes 12-13 aeg. Siis käisin DigiTechi koosolekul, mis algas kell 19. Siis läksin otse koju. Umbes 21:30 (peale koju jõudmist ja söömist) hakkasin uuesti koduarvutist pihta, sest enne jäi sellise koha peal pooleli, kus asjad olid katki ja ma tahtsin need enne homset korda saada. Tegin kogu dockeri installi ja giti repo kloonimise protsessi kodus uuesti, mis võttis umbes 15 minutit. Seejärel sain õhtul peale hakata ja tegin praeguseni ehk umbes 00:25-ni. Vaatamata intensiivsusest tulenevale väsimusele saime täna tegelikult suht suured asjad tehtud. Küll aga oleme tiimina viimaste päevade jooksul aru saanud, et meie naiivne soov toode praktika lõpuks valmis saada suure tõenäosusega ei täitu. Hommik algas mingisuguse backendis tekkinud probleemi lahendamisega, et saaksime frontendiga edasi teha ja laivis testida. Probleem oli seotud mingi API fetchiga, kus controlleris oli kasutatud serialize funktsiooni. Backendi poisid asusid samal ajal seda parandama, kui mina ja Vaiko tegime nende poolt juhendatud kiirlahendusega asja vähemasti töökõlblikuks. Kui saime tööle hakata, alustasime salvestamise nupu loomisest kasutajaliidese redigeerimise lehele. Alustasime user'i kirjega seotud ühe suure redux-state'i salvestamisest, mis määrab ära kõikide span elementide kujunduse (button_instance kirjetel on igaühel oma redux state ning selle kontroller on märkimisväärselt keerulisem kui spanide salvestamise oma.) Kuna kontroller oli juba eilsest valmis, ei läinud väga kaua, et saaks spane andmebaasi salvestada ning neid sealt lugeda. Samuti lisasime selle nüansi, et store'i olek lastakse iga kord tühjaks kui seda uuesti fetchima hakatakse. Kuna fetch toimub iga kord kui leht, kus elemendid eksisteerivad, laetakse, siis on vaja enne uute väärtuste sisse laadimist vanadest lahti saada, et nad ei jääks nt. mõne teise ruumi elemente kuvama vms. Järgmisena lisasime nupu malli loomise võimaluse kasutajaliidese redigeerimisse, kus on vaja loomisel siduda nupu mall ruumiga, milles olevat elementi see juhib. See muutub oluliseks kui hakkame looma adminile keskset juhtpulti, kus on iga olemasolev nupu mall esindatud (ja kus need on grupeeritud ruumide kaupa). Järgmisena võtsime minu OOP-i eksamil tehtud undo nupu ja implementeerisime samade vahendite abil ka meie praegusesse arendusse. Panime ta loomulikult paari ka redo nupuga, mida võimaldab lihtsasti lisada sama moodul, millega undo nupu lõime. Järgmisena tegime veidi kujundamist css-ga. Peale seda oligi tööpäev läbi saamas (17:00) ning Vaiko läks koju. Kuna mul oli kell 19 koosolek, mis toimus koolis, siis veetsin seda vahepealset aega lisades kogu lehe korraga kujundamise võimalust redigeerimisse. Selleks tuli suuresti ümber teha olemasolevat store'i slice'i ja seetõttu ka API post requesti selle ühe pika redux-state'i salvestamiseks ning selle uuesti parsimiseks. Kuna mult palusid samal ajal abi ka Martin ja Armin, kes veetsid enamuse päevast tehes seda sama suurt button_instance'ite salvestamise kontrollerit, siis ei saanud ma asjaga piisavalt kaugele, et rahule jääda ja otsustasin õhtul edasi teha. Nüüd on vist ok. Tänane sissekanne ehk pole kõige parem refleksioon, aga ma olen praegu lihtsalt nii väsinud, et ei suuda korralikult päeva üle mõelda (Kell saab kohe 01:00 ja homme on 07:00 äratus). Kui ma saaks midagi üleüldises pildis muuta, siis ma muudaks seda, et meil esimesel nädalal nii palju aega projekti üles seadmise peale läks. Kogu sisuline värk on põhimõtteliselt eelmise nädala neljapäeval-reedel ja selle nädalaga tehtud. Motivatsiooni tapab see, et ei usu, et sellega valmis saab. Ma tahaks isiklikult ikka läikivat toodet esitleda ja ma usun ka Meelis ootab seda. Ajapõhise automatiseerimise võime ma arvan täiesti ära unustada. Elu sees ei jõuda kahe päevaga nii seadmete lülitamisel tagasisidet, kui ka toda. A ja Peter tegi autentimise full-stack valmis/peaaegu valmis.
Kolmapäev - 18.06.2025
Vaatamata pikale õhtule eile, sain täna ikka õigel ajal püsti ja jõudsin hommikul ilusti (nii värskena, kui võimalik) kooli. Täna oli jällegi mahukas päev ning blogi kirjutan ma hetkel päris mitu tundi peale tööpäeva lõppu seega püüan võimalikult hästi meelde tuletada, mida kõike täna tehtud sai. Õnneks pani Vaiko päeva jooksul kirja suuremaid muresid ja asju, mille ära tegime seega on mul meeldetuletusabi olemas.
See selleks, liigume asja juurde. Bussisõidul kooli vastasin Vaiko küsimustele selle osas, mis ma eile õhtul üksi ära tegin. Ta oli mu commite lugenud seega oli tal tegelt juba aimu, mida ma tegin - küsimused olid rohkem detailide kohta. Mul on hea meel, et ta ikka luges ja vaatas, mida ma tegin, sest see tähendas, et me ei pidanud palju aega kulutama samale järjele jõudmiseks. Kooli jõudes tegin alustuseks Jira's veidi uuendusi: märkisin eilse ja ka varasema jooksul tehtud taske tehtuks ning lõin uusi juurde, mida tänase jooksul tegime ja homme teha saame. Otsustasime Vaikoga alustada adminile keskse kontrollpaneeli loomisest. Algul lisasime sinna navigeerimiseks eraldi nupu RoomSelect komponenti, mis ilmus vaid siis, kui url parameeter "action" oli device-control. Hiljem, kui implementeerisime ruumide ehk kasutajate (tegelt me räägime kasutajatest ehk erinevatest pultidest, kuid testandmetel on meil igal puldil mingi erineva ruumi nimi, seega on kerge segadusse sattuda) backendist fetchimise selecti optionite kuvamisel, siis lisasime sinna ka lihtsalt loogika, et kui valitud on "admin" kasutaja, siis navigeerib ta /{action]/central-control-panel pathile, mis renderdab AdminDeviceControlPage lehe. Kui on valitud muu kasutaja, siis renderdatakse varasema loogika kohaselt vastava kasutaja puldi vaade. Enne kui saime keskse kontrollpaneeli lõpuni tehtud, pidime aga keskenduma andmebaasist spanide (+ lehe kujunduse) ja buttonElementide parsimisel ilmnenud probleemile. Nimelt oli ka eile õhtul peale blogi kirjutamist see probleem, mille ma avastamisel veel enne magama minekut korda tegin (omast arust). Probleem seisnes selles, et peale kasutaja tabelis salvestatava reduxState'i planeeritava kuju muutmist frontendis (võimaldamaks salvestada samma JSONisse ka pageStyle elementi ehk kogu lehe kujunduse määramiseks kasutatavat elementi) läks pärast GET'iga parsimise loogika katki. Me saatsime JSON-i millel oli üks ülesehitus ning ootasime JSON'it millel oli teine ülesehitus, aga tegelikult oli meil ka GET'ist vaja samal kujul JSON'it (sest me tahame andmebaasist lugeda seda mida me ise oleme salvestanud). Õhtul unise peaga testisin ma ainult spanide ja kogu lehe kujunduse salvestamisel ja parsimisel toimivust. Koolis aga saime aru, et ka buttonInstances salvestamisel ja parsimisel on loogika erinevused. See ajas mind ausalt öeldes päris närvi, sest ma SPETSIAALSELT olin kauem üleval, et vead korda teha, et vältida koolis täna selle salvestamise peale aja raiskamist, aga ikka pidime seda eilset pudru ära koristama. Jällegi, see selleks. Saime siiski lõpuks korda - kustutasime suure vaevaga tehtud seedimise faili ära (sorri Armin), sest demodes võib niikuinii ise uusi nuppe lisada, enne kui mõne puldi vaadet näppima hakatakse, saabki kõike proovida.
Siis oli lõuna. Täna millegipärast oli samuti peale lõunat veidi keerulisem käima saada. Päris palju aega läks otsustamisele, et mida teha ja mida tegemata jätta. Ilgelt nõme on see, et ei saa toodet valmis. Nagu tõsiselt häirib. Ma tean, et kui meil ei oleks läinud backendis 4 päeva aega, et seda projekti dockeris jooksma panna ja selleks vajalikke asju parandada, siis me oleks selle 100% valmis jõudnud. Veel parem oleks see, kui aega oleks olnud kolm nädalat. Kõige parem oleks olnud see, kui sellega oleks saanud alustada juba mais. Ma ei näe ausalt öeldes, miks see nii hilja peab toimuma. Okei, eksamisessioon, aga mis siis? Kas arvutiklassid on kinni? Vabalt saaks 8 tiimi kahte klassi mahutada. Kas eksamid on tähtsamad kui meie praktika? Miks ei saaks panna lihtsalt kaheks nädalaks kahte arvutiklassi kinni? Kas ülikoolil ei ole siis tõesti piisavalt ruume ja piisavalt aega eksamisessioonil, et võimaldada kõigil eksamid ja järeleksamid ära teha? Lisaks nagu ma aru olen saanud, on Jaagup võtnud ka meie praktika ajal järeleksameid vastu, seega ei ole ka see mingi vabandus, et juhendajad on ise terve aeg kinni ja ei saa aidata. Mina isiklikult ei ole peale esimest päeva mitte kordagi Jaagupist puudust tundnud (tegelt ei tundnud siis ka, sest ta oli olemas ja aitas vägagi detailidest aru saada) seega vabalt võiks ta kasvõi terve aeg muid asju teha (see on ilmselgelt liialdus - see, et minul ei ole vaja ei tähenda, et teistel ei võiks olla). Vingumine läbi. On mis on. Ma arvan, et me võiks saada valmis vähemalt: 1) Seadmete juhtimine ja selle juures oluline tagasiside kuvamine; 2) Kasutajaliidese redigeerimine koos kõigi oma funktsionaalsustega ja salvestamisega; 3) Kasutajate autentimine (uue kasutaja ja vaate loomine, sisse logimine, kasutajaandmete muutmine). Ühesõnaga välja jääks ajapõhine automatiseerimine. Ma arvan siiski, et kui me kõik need kolm asja valmis ja tööle saame, siis oleme ennast täielikult ületanud, arvestades seda, et minule ja Vaikole ei õpetatud isegi sellise asja nagu React eksistensist ning mitte kellelegi meist ei ole sõnagi PHP-st räägitud (kui völja arvata seda, et Rinde eelmine semester mainis, et vareb Veebiprogrammerimises õpetati aga enam mitte). Igaüks meist on tegelt megalt pingutanud ja põhimõtteliselt uue keele ja/või raamistikuga tuttavaks (kui mitte selgeks) saanud.
Kisub juba pikale aga peale lõunat tegelikult tegime ära ka vaadete kopeerimise, mis oli täielik õnnestumine. Kõik oli eelnevalt tehtud nii, et seda oli väga lihtne implementeerida. Saime kasutada vaid olemasolevaid API requeste ning kogu asi oli üleüldiselt väga mugav.
Homme on viimane arenduspäev ning tegelikult üldse ei viitsi keskenduda mingi dokumentatsiooni ja muu paberimajanduse loomisele, kui toode pole veel valmiski. Proovime siiski ületundide arvelt valmis saada ka nuppude gruppeerimise ja kogu sellega seonduva (grupi loomine, gruppi nupu mallide lisamine, grupi eksemplari loomine (groupInstance samamoodi nagu oli button instance) ja seda muidugi mitte ainult frontendi poolel vaid ka kõik vajalikud controllerid, mis on sisuliselt sama asi mis me seni ära tegime, aga veidi keerulisema backendiga ja vaid ühe pooliku päevaga.) Peter võiks homme kogu autentimisega seonduva osa ära teha ning Armin võiks lõpuni teha tagasiside loogika, mida täna juba tegema hakkas ja millel algse ning piiratud töövõime saavutas.
Oled tubli, kui jõudsid kõik mõttega läbi lugeda!
Neljapäev - 19.06.2025
Oeh. Tänane päev oli täielik läbikukkumine. Hommikul alustasime kõigepealt readme korda tegemisega, sest see oli vaja 16:00ks valmis saada. Jõudsime siis tegemisega sinna maale, et oli vaja hakata tegema juhendit asja tööle panekuks ilma dockerit kasutamata. Saime selle ise esimest korda korralikult tööle(Vaiko sai ka enne oma läpparis, aga tal läks 4h aega error fixingu peale). Kell 16:00 oli kliendiga viimane kohtumine. Kutsusime ta kaitsmistele ka. Ta ei olnud pettunud ega midagi, aga mina kindlalt olen. Meil olid sellised plaanid tänaseks, et hoidku piip ja prillid. Tegelikult veetsime terve päeva (ma ei käinud isegi lõunal) projekti ilma dockerita käima saada üritades. Kõige hullem kogu asja juures on see, et ma ei saanud sellest jebimisest otseselt targemaks ka, sest kooli arvutil ma ikka lõpuks tööle ei saanud. Mingi internal server error oli kui teha api request ja isegi sinna maale jõudmine oli täielik pimedas metsas koperdamine. Oma läpakal proovides sain lõpuks tööle. Tegelikult on tänane päev ideaalne reklaam dockerile, sest ma ei taha ette kujutadagi, et igaüks, kes seda värskes seadmes käivitada soovib peab alla laadima ja installeerima PHP, Symfony, Composeri ja MariaDB... Node on nagu väga mugav nende kõrval. Ja siis veel kogu see andmebaasi loomine ja migratsioonid ja seedimine... täielik ahastus. Docker on kõrgemate jõudude õnnistus.
Kui Meelisele ette näitasime, siis avastasime, et mitmed asjad, mis me arvasime, et töötavad, tegelikult ei töödanud. Jälle korras. Seisan seal ja demon ja seletan ja siis "oih, ei töötagi". Fantastiline. Aina paremaks läheb.
Ühesõnaga kokkuvõttes täielikult haige päev. Mul oli vanaemal täna operatsioon ka, aga mul pole õrna aimugi kuidas tal see läks, sest ma olen terve päev üritanud MariaDB-sse mingeid k*radi doctrine'i migratsioone teha.
Kokkuvõttev refleksioon
Kogu suvepraktika vältel oli minu jaoks kõige olulisem "sündmus" või paremini saavutus see, kui me saime kasutajaliidese redigeerimisel nuppude eksemplarid korrektselt andmebaasi salvestama. See oli pika puuga kõige suurem koostöö moment, kus Armini ja Martini poolt loodud backendi osa ning minu ja Vaiko poolt loodud frontendi osa said omavahel suhtluse korda (loe: suutsid teineteisele saadetavaid JSON-eid korrektselt parsida). See oli justkui viimane tükk, et saaks UI redigeerimise viimaks algeliselt käima ning selle raames tundsin, et me kasutasime Reacti võimalusi väga hästi ära ning sain ka aru, mis PHP-s toimus. See oli suurim õnnestumine minu silmis.
Kolm mõtet:
1)Väga tihti läheb uute asjade tegemisega/tarkvarale uue funktsionaalsuse loomisega kauem kui alguses oodata võib. See ilmnes meil peaaegu igal puhul, kus midagi lisama hakkasime. Võiks öelda, et kõigil juhtudel VÄLJA ARVATUD vaadete kopeerimise lisamine, kus langes kõik varem tehtud nii hästi kokku, et oli ainult vormistamise asi.
2)Kaks pead on ikka kaks pead. Rakendasime kogu praktika vältel Vaikoga kahekesi paarisprogrammeerimise "võtet", millest saime teada Codeborne'i külastusel. Miks ma ei taha öelda, et kaks pead on alati parem kui üks on sellepärast, et vaatamata suurtele eelistele (nagu nt. pidev ülevaatus ning võimalus pidevalt teineteise mõtteid kaaslasega arutada ja koos lahendus välja mõelda (Mõtlete kahekesi rohkemate nurkade alt kui üksi mõtleks)), on selle praktiseerimisel ka negatiivseid pooli. Nt. osad asjad on niivõrd lihtsad, et kui me kumbki eraldi teeks, saaks me kaks korda kiiremini tehtud ja kui pidevalt kellegagi koos tööd teha, siis väsid võib-olla kiiremini ära. Ma arvan, et antud juhul oli ta aga kõvasti positiivsema tulemusega, sest me saime koos asju tegema õppida ja uute vahenditega tutvuda. Samuti kogu asja kontseptsioon arenes tegemise käigus seega oli hea pidevalt samal lainel olla ja arutada töö käigus.
3)Oluline on konkreetselt kokku leppida backendi ja frontendi vaheline suhtlus ehk API otspunktid ja väljundid. Kui me oleme frontendis ehitanud üles suure loogika toetudes mingile kindlale API vastuse kujule, aga backend on vastupidi ehitanud üles mingi suure loogikam mis teeb väljundit mingile teisele kujule, peab hakkama tagantjärele asju omavahel vastavusse viima ja märkimisväärselt lihtsam oleks kui see oodatav väljundi kuju oleks eelnevalt läbi räägitud.
Bonus/4) Ületunnid ei vii alati tulemuseni, vahepeal peab ikka puhkama ka.