# Päiväkirja ### 26.3 Aloin tekemään Azure deployment, mutta valitettavasti Azure-tilauksen rahat loppuivat. Pohdin nyt, mihin voisin asentaa palvelimen. Github Repo + Github Actions CI/CD pipeline + Hetzner Cloud olisi hyvä vaihtoehto (halpaa, ja minulla on jo siellä toimiva projekti) Ei ole selvää, onko Azure Git repo pakollinen, vai käykö Github Minun mielestäni, kyllä se käy, sillä tässä vaiheessa sovelluksemme ei käsittele varsinaisia opiskelijatietoja, vaan esimerkkitietoja. Ja jos sovelluksemme hyväksytään käyttöön, voin siirtää kaiken Karelian Azure-palveluihin. ### 27.3 Asensin palvelimen Hetzner Cloud -alustalle ja rakensin CI/CD pipeline. (Tällä hetkellä pipeline on tyhjä, mutta se jo toimii: kun koodi saapuu main-haaraan, se kopioidaan automaattisesti palvelimelle). ### 28.3 Uuden projektin luominen repoon. Backend: C#, ilman Asp.Net Corea. Frontend: JS. ### 16.4 Otin vastaan tehtävän "ryhmänjako scrum roolin mukaan". Päättin kehittää ryhmänjako -toiminnon taustaksi myös seuraavat asiat uudelleen: Excel-tietojen purkaminen Student-olioksi niin, että se ei riippuisi Excel-tiedoston muodosta (sarakkeiden järjestys, tyhjät rivit tiedoston alussa tai keskella, sarakkeiden otsikkojen muoto) (edited) #### 17.4 Toteutin Excel-tiedoston purkaminen -toiminnon uudelleen. Opiskelijan etunimi, sukunimi ja opiskelijanumero tallennetaan Student-olion ominnaisuuksiksi, muut sarakkeet tallennetaan vapaamuotoisesti Dictionary:iin ### 18.4 Aloitin varsinaisen ryhmänjako-toiminnon tekemisen. Kaikki parametrit suodatetaan kolmen kriteerin mukaisesti: 1) Jaetaan tasaisesti ryhmien välillä 2) Pidetään yhden ryhmän sisällä 3) Ei vaikuta ### 28.4 Ryhmittelylogiikka nyt toimii. (Ei ole vielä niin älykäs kuin haluaisin, mutta toimii kuitenkin). Kun tarkastelen ryhmittelytuloksia, huomaan, että tietueiden jakamiseen ryhmiin on yleensä olemassa optimaalisempi tapa. Minun on keksittävä algoritmi, joka tasapainottaisi ryhmät uudelleen, kun ne on luotu. Toisin sanoen, kun: 1) Algoritmi ei vielä jakanut kaikkia oppilaita ryhmiin. 2) Lajittelukriteerejä on useampi kuin yksi. 3) Annettua listaa opiskelijoista ei voida jakaa ryhmiin niin, että kaikki kriteerit täyttyvät 100-prosenttisesti. On olemassa useita tapoja jakaa opiskelijat ryhmiin, eikä optimaalista tapaa voida nähdä ennen kuin kaikki jäljellä olevat ryhmät on muodostettu. Aion tehdä sen tällä tavalla: RebalanceGroups() 1) Ryhmittelyalgoritmi muodostaa ryhmät. 2) Toinen algoritmi arvioi jokaisen ryhmän - jos kaikki kriteerit täyttyvät, pistemäärä on 1. Jos kaikki kriteerit eivät täyty, pistemäärä kasvaa. 3) Vaiheet 1 ja 2 toistetaan. Kun pistemäärä ei enää laske, oletetaan, että ryhmittely on mahdollisimman optimaalinen. ### 29.4 Keskusteltiin GUI-muutoksista ryhmän kanssa: Näin yksinkertaisessa sovelluksessa 1-2 ikkunaa riittää ja olisi hyvä idea näyttää ryhmät samassa gridissa niin, että jos opettaja ei ole tyytyväinen ryhmänjakoon, voisi muokata lajittelukriteereitä tai ryhmän kokoa ja yrittää uudelleen samassa ikkunassa. ### 3.5 Pieni bugi löytyi: Joskus syöttötiedostoissa (jotka on viety Peppistä) on sarakkeiden nimet englanniksi, mutta ei suomeksi. Ja koodini ei tunnista ”Student id” -sarakkeen otsikkoa. Koska tämä regex ei tunnistanut "Student id" -merkkijono `"((opiskelija)|(student)|(oppija))[n\s-]*((numero)|(nro)|(number)|(num)|(no))"` korjattu regex: `"((opiskelija)|(student)|(oppija))[n\s-]*((numero)|(nro)|(number)|(num)|(no)|(id))"` ### 6.5 Aiemmin olen toteuttanut vain "tasainen jakautuminen" -ryhmittelypainiketta. Tänään lisäsin myös täsmälleen saman toiminnallisuuden "scrum"- ja "belbin"-painikkeeseen. Kolmesta erillisestä painikkeesta kutsutaan täsmälleen sama metodi. Minun pitää joko kehittää kolme erillistä ryhmittelyalgoritmia tai poistaa ylimääräisiä painikkeita. ### 7.5 Kaikki viimeisimmat muutokset otettu main-branchiin. ### 8.5 RebalanceGroups() -algoritmin ensimmäinen versio. RebalanceGroups() arvioi muodostetujen ryhmien tasapainotusta ja fragmentaatiota: ![ryhm_tulokset1](https://hackmd.io/_uploads/rJ9Y9ys6R.png) ### 9.5 Ehkä olisi järkevää miettiä käyttöliittymän rakennetta uudelleen. Kaikki samat elementit ja värit säilytetään, mutta ne järjestetään kauniisti. Minun ehdotus: ![ui_1](https://hackmd.io/_uploads/SkCajkiaC.png) ![ui_2](https://hackmd.io/_uploads/Hk9AoJo6A.png) ### 10.5 ryhmittelylogiikassani on kaksi asiaa: **parametrit ja säännöt.** parametrit: scrum-toiverooli, belbin-timirooli, suuntautuminen, ryhmä, kokemus jne. säännöt: "tasainen jakautuminen", "ryhmässä pysyminen", "scrum (=tasainen jakautuminen), belbin (=tasainen jakautuminen). parametrit luetaan Excelin sarakeotsikoista dynaamisesti ja ne voivat olla mitä tahansa, esimerkiksi ”pitääkö opiskelija pizzasta” tai ”onko opiskelijalla kokopäivätyö”. mitä tahansa sääntöä voidaan soveltaa mihin tahansa parametriin sääntöjä voi olla useita ja niä voi järjestää käyttöliittymässä (ylös ja alas). säännöt, jotka ovat korkeammalla, ovat korkeamman prioriteetin sääntöjä. ### 15.5 Uudistin käyttöliittymän ja lisäsin sovellukseen "raahaa tiedosto" -toiminnon. Voidaan nyt raahata jopa muutamia tiedostoja ja sovellus yhdistää näitä älykkäästi oppijanumeroiden perusteella. ![ui_3](https://hackmd.io/_uploads/BJ7h01j60.png) GUI on vielä ruma, en ole tyyttyväinen. (myös sanassa "raahaa" on virhe) :( ### 23.5 Bugi: Jos käyttäjä suurentaa ikkunaa, komponentit eivät pysy paikallaan: ![ui_5](https://hackmd.io/_uploads/ByqKggo6A.png) ### 30.5 Korjasin bugeja: 1) ei-olennaiset sarakkeet on piilotettu 2) opiskelijoiden listat ja kyselyjen vastaukset voidaan nyt lisätä missä tahansa järjestyksessä 3) erillinen ryhmä näille opiskelijoille, jotka eivät ole vastaneet nyt toimii 4) korjasin käyttöliittymän skaalautumisen 5) muita pieniä bugeja ### 31.5 Toteutin osittain myös muodostettujen ryhmien viennin markdown-tiedostoon. Aion kysyä asiakkaalta viimeisen katselmoinnin aikana, tarvitseeko hän saada tulokset myös markdown-muodossa (tai riittääkö Excel). Katselmointi mennyt hyvin, sovellus ei kaatunut. Päätettiin että markdown-tiedostoja ei tarvitse. ### 2.6 Tein sovelluksesta exe-tiedoston. Kun testasin sovelluksen toisessa koneessani, palomuuri esti tuntemattoman sovelluksen käynnisteämisen. Oletan että muita vaihtoehtoja ei ole, koska Microsoftin näkökulmasta Ryhmä S3 on tuntematon julkaisija. Sovellus, sovelluksen kooditiedostot ja tekninen dokumentaatio toimitettu asiakkaalle.