# Web-ohjelmoinnin jatkokurssi, päiväkirja
## by Joonas Sormunen
joosor@student.uef.fi
## Ennen ryhmätyön alkua
**TUnteja:**
* 2h luentoja
* 3h materiaaliin tutustumista
## Viikko 1
Kun ryhmän jäsenet olivat vakiintuneet, päätimme ryhmässä (minä, Aatu Tolvanen ja Lasse Karvinen) järjestelmämme toiminnasta. Sovimme, että palvelin mittaa omaa prosessorin käyttöään ja samalla listaa top-5 eniten kuluttavaa prosessia sekä niiden osuudet kokonaiskäyttöasteesta. Käyttäjä voi verkkokäyttöliittymän kautta hakea tietokannasta palvelimen tallentamat tiedot ja halutessaan tuhota ne.
Jaoimme työn niin, että Aatu hoitaa front-end puolen eli verkkokäyttöliittymän. Minä ja Lasse hoidamme Back-end eli palvelin puolen. Minun alueeseeni kuuluu mittausten tekeminen ja syöttäminen tietokantaan. Lasse toteuttaa palvelimen rungon ja osan tietokannasta.
Ryhmän jäsenten roolit päätimme myös ensimmäisen viikon aikana. *Scrum masterina* toimin minä, *Omistajana* toimii Lasse ja *Toteuttajana* Aatu.
Aloitin testaamaan järjestelmäanalysaattoria käyttäen NPM:n *systeminformation* kirjastoa. Aikani tutkittua kirjaston dokumentaatiota ja erinäisiä tutoriaaleja, sain ohjelman listaamaan käynnissä olevat prosessit sekä näyttämään CPU:n kokonaiskäyttöasteen. Koska kirjaston dokumentaatiossa ei ole kaikkia asioita merkitty selvästi tai ollenkaan, vie erinäisten pienempien yksityiskohtien tutkiminen enemmän aikaa.
Azuren käyttö on tuottanut ryhmälle pientä pähkäiltävää. Itselleni se on ollut pitkälti kantapään kautta opettelemista. Järjestelmä ei ole minulle aiemmin tuttu, joskin olen työpaikalla kuullut esimieheni arvostelevan sitä varsin rankasti. Ymmärrän nyt miksi - Azure ei ole maailman intuitiivisin järjestelmä. Kuitenkin vaikeuksista ja alun hankaluuksista huolimatta saimme ensimmäisen sprintin.
Ryhmän viestintä tapahtuu Slackin kautta. Huomasin viikon aikana, että olin aika pitkälti se henkilö, joka organisoi ryhmän palaverit ja antoi tarvittavan alkusysäyksen projektille ja muille ryhmän jäsenille. Uskon, että aloitus olisi saattanut myöhästyä parista päivästä muutamaan, jos en olisi tehnyt aloitetta sen suhteen.
**Tunteja:**
* 5h yhteensä Slack-palavereita (ja työstöä)
* 4h järjestelmän työstöä
* 1h projektisuunnitelman/-kuvauksen laatimista ja kirjoittamista
* 4h Kurssin materiaalien lukemista ja tutkimista
## Viikko 2
Muutimme suunnitelmaa palautteen pohjalta niin, että järjestelmään kirjaudutaan turvallisuuden parantamiseksi. Tämän lisäksi verkkokäyttöliittymässä dataa kuvataan eri graafien avulla.
Schema datalle luotu. Prosessien järjestäminen top-5 listaan on hankalahkoa johtuen kirjaston tavasta hakea ne. Yleisesti ottaen kehitys näyttäisi menevän suhteellisen mallikaasti eteenpäin. Hiotumpi versio ryhmäsuunnitelmasta on nyt kirjattu Azuren wikiin. Suunnitelma voi vielä muuttua, jos tarvetta on.
Saimme kuulla kuitenkin, ettei meidän sprinttiä ollut näkynyt. Tämä todennäköisesti johtui ryhmän kokemattomuudesta Azuren kanssa, sillä olimme Slack-palaverissa ennen tarkastuskertaa toteuttaneet sprintin.
Koska emme olleet paikalla viikon tarkistuskerralla, yritän saada järjestetyä erillisen kokouksen ryhmämme etenemisestä viikolle 3. Kolmannella viikolla Lasse on poissa kertausharjotuksissa lähes koko viikon ajan, jolloin pavelimen rungon toimintaa emme voi jatkaa eteenpäin. Tällävälin pyrin saamaan omat tehtäväni valmiiksi.
**Tunteja:**
* 4h Slack-palavereja + työstöä
* 5h työstöä
* 5h Tiedonhankintaa (koodin) työstön ulkopuolella
## Viikko 3
Prosessien järjestäminen top 5-listaan saatu valmiiksi. Tulokset ja pyöristykset ovat halutun mukaisia.
Järjestelmäanalysaattorin ominiaisuuksien siirtäminen erilliseen tiedostoon omiksi funktioikseen tuottaa ongelmia. Erinäisten virheiden ratkettua tulokset tulevat ulos tyyppinä 'undefined'. Koska systeminformation paketista ei ole paljoa mainintaa verkossa, on näiden ongelmien ratkaisieminen ollut hankalaa ja hidasta. Vähitellen kuitenkin ratkaisuja on ilmaantunut.
**Tunteja:**
* 8h työstöä
* 2h tiedonhankintaa ja tutkimista liittyen projektin osiin
* 2h verkkoluentotallenteiden katsomista
* 1h palavereita
## Viikko 4
Järjestelmäanalysaattorin virheiden tutkimista ja työstöä. Pidemmän selvittelyn jälkeen ongelma ratkesi. Funktiot ovat *asynkronisia*, joten niitä pitää käyttää eritavalla kuin ns. normaaleja funktioita. Tähänkin liittyen oli pienempiä ongelmia, mutta nekin lopulta sain selätettyä.
Analysaattori on nyt eristetty omaksi itsenäiseksi prosessikseen johtuen aiemmin mainituista ongelmista, kuten myös kykenemättömyydestä täysin ymmärtää palvelinrungon koodia. Olen rakentanut kuitenkin analysaattorin niin, että se olisi suhteellisen helppo liittää osaksi palvelintakin.
Nyt hankittu tieto tallennetaan MongoDB tietokantaa. Tämän järjestelmän tekeminen oli itsessään myös enemmän tai vähemmän kinkkinen, sillä suurin osa verkon tutorial materiaalista on sen verran vanhaa, ettei sen sisältö täysin toimi tämän hetkisen version (4.x) kanssa kunnolla. Myöskin Mongon oma dokumentaatio on hieman epäselkeä paikoitellen, mikä tuotti ongelmia. Kuitenkin asiat ovat nyt tämän osalta kunnossa.
Tein myös lyhyen kuvauksen tietokannasta Azuren wikiin. Myöskin tekemäni skriptit lisätty repoon. Repoon latausta työstäessä tutustuin uudelleen Git järjestelmään, joka on ollut aina minulle vieras. Nyt sentään saan itse alustettua git kansioita sekä committattua ja pushattua tiedostoja gitteihin.
**Tunteja:**
* 22h työstöä
* 1h Verkkoluentoja (läsnä)
## Viikko 5
Aloitimme viikon tiistaina palaverilla. Johtuen Windowsin pathin merkkirajoitteesta, palvelimen rungon lataaminen Azuren repoon epäonnistui. Erinäisten yritysten jälkeen siirsimmi datan zipissä minulle, ja latasin sen TortoiseGitin avulla repoon. Silti kaikkia tiedostoja ei nähtävästi saa lisättyä edes git työkalujen avulla. Tämä voi liittyä juurikin tuohon WIndowsin merkkirajoitukseen, sillä nämä työkalut eivät edes tunnista näitä puuttuvia hakemistoja ja tiedostoja.
Toisena päivänä saimme palvelimen toimimaan koneelta toiselle. Seuraavaksi olisi vuorossa lisätä kirjautuminen ja tietojen haku palvelimelta. Haku saatiin noin kello 14 aikaan 11.12. toimimaan. Kirjautuminen tuottaa ainakin itselle ongelmia, sillä osaamiseni RESTin ja Apollon puolella on hataraa. Yritin olla edes teoriassa hyödyllinen tutkimalla login mekaniikkaa, joskin ontuvan ymmärrykseni takia en osaa oikein soveltaa sitä projektin koodiin.
Lopulta saimme kuitenkin järjestelmän toimimaan. On varsin surkuhupaisaa, kuinka pienikin virhe joko koodissa tai ajatusprosesissa voi aiheuttaa niin paljon vaivaa. Kuitenkin nyt järjestelmä saa haettua front endissä datan palvelimen kautta tietokannasta. Lisäksi graafien ja muiden havainnollistusten muodostaminen toimii front endissä.
**Tunteja:**
* 13h palavereja sekä yhteistä työstöä.
* 2h jälkitarkasteluja ja päiväkirjaa
## Esitelmästä
Ennen esitelmää pidimme vielä yhden palaverin, jossa kävimme läpi esitettävät asiat ja esitelmän sisällön. Olimme jo aiemmin sopineet, että minä pidän esityksen. Samalla varmistimme, että minulla oli varmasti uusimmat versiot ohjelmiston kaikkien osien koodeista sekä sen että ohjelmisto varmasti toimi ja oli esittelyvalmiudessa.
Esitelmä meni mielestäni varsin hyvin. Sovelluksemme oli toimiva ja näytti vertautuvan suhteellisen hyvin muihin töihin. Jäänityksestä huolimatta sain pidettyä esitelmän. Mielestäni en "jäätynyt" erityisen pahasti missään kohtaa ja puheeni oli suhteellisen selvää ja johdonmukaista.
Esitelmän jälkeen latasin ohjelmiston koodin koottuna Azuren git-repositoryyn. Tähän meni aikaa, sillä meillä oli ollut projektin aikana aiemmin hankaluuksia ladata tiedostoja gittiin git-ohjelmistoilla: osa tiedostoista ja hakemistoista syystä tai toisesta eivät latautuneet. Jokusen hetken jälkeen sain latauksen kuitenkin toimimaan. Jouduin tyhjentämään gitignore -tiedostot sekä pakottamaan nämä aiemmin ei latautuneet tiedostot ja hakemistot ladattavien listalla. Ohjelmakoodi on nähtävillä uusimmassa versiossaan ja kokonaisuudessaan branchissa master2.
**Tunteja:**
* 1h palaveria ennen esitelmää
* 1.5h Esitelmien katselu ja pitäminen
* 1h Git-säätöjä
## Yhteenvetoa
Kurssi oli mielestäni haastavahko. Toki tähän vaikuttaa se fakta, että tein web-ohjelmoinnin kurssin edeltävänä vuonna, eli vuonna 2018 syksyllä. Tästä syystä merkittävä osa asioista oli päässyt jo unohtumaan. Hankaluuksiin vaikutti myös se, että edellisvuoden kurssin materiaalit olivat jo poistettuja eikä minulla ollut pääsyä tämän vuoden materiaaliin.
### Mitä opin kurssilla?
Kurssilla opin erilaisista paketeista, mitä käytetään kasvavassa määrin alalla web-ohjelmoinnin parissa. Tietenkään ei voi unohtaa jo aiemmin opitun materiaalin kertausta.
Tietokannan käyttäminen tuli tutummaksi nyt kuin edeltävällä kurssilla. Tämän lisäksi opin käyttämään joitain Node JS ja NPM paketteja. Näistä johdannaisena opin jonkin verran asynkronisten funktioiden käytöstä. Asia, joka on varsin tärkeä työskennellessä Noden kanssa, joskin usein jää pahasti taka-alalle tai sivutetaan kokonaan.
Yhteistyön tärkeys tähdentyi ryhmätyön aikana. Koska teimme projektia varsin itsenäisesti, tuli meillä enemmän tai vähemmän ongelmia töidemme yhdistämisessä. Kuitenkin tästä selvittiin juurikin yhteistyöllä.
Tein ryhmätyön aikana yllättävän paljon aloitteita. Tämä on poikkeavaa tavallisesta persoonallisuudestani, joka on varsin hiljainen, ujo ja passiivinen. Jo ryhmätyön alussa huomasin ottavan aktiivisempaa, melkein johtamisasemaa työssä. Lisäksi taisin olla ryhmäni ainoa, joka käytti collaborate -tapaamisissa äänitoimintoa. Toivon tämän kokemuksen auttavan iseäni tulevaisuudessa olemaan aktiivisempi muissakin asioissa kuin vain työhön ja opintoihin liittyvissä.
**Tunteja**:
* 1h päiväkirjan lopputäydennys