# DevBlog Roope Marttinen
## Tehtävä 1: Urheilu1
https://github.com/ropm/Urheilu1
### 8.9.2019
Tein tehtävän noin puolessa tunnissa, koska javascriptin luokkien käyttön on jo ennestään tuttua. Tarkistin vain, että mikä on suositeltu tapa kirjoittaa luokkia nykyisin, ja päädyin https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes linkin tietojen mukaiseen rakenteeseen. En oppinut tehtävää tehdessä mitään uutta. Iso osa ajasta meni GitLabin autentikoinnin kanssa.
Jotain ongelmaa ilmeni kun yritin alustaa GitLabiin repositoriota Windows koneelta, jostain syystä GitLabille ei kelpaa avain, minkä muodostin. Eli poikkeuksellisesti tämä tehtävä on palautettu GitHubiin.
Jatkossa luultavasti palautan tehtävät GitLabiin, koska Ubuntu läppärilläni pitäisi olla toimiva ssh avain GitLabiin jo ennestään.
## Tehtävä 2: REST API
https://github.com/ropm/RestApiWebOhjT2
### 19.9.2019
Tehtävään kului aikaa noin tunti, koska piti tuo mariaDB asennella ja siinä meni hetki. Muuten express hommat on todella tuttua juttua, eli itse koodaamisessa meni vain hetki. Varsinkin kun ei tarvinnut tehdä kuin vaan GET requesteja, eli ei tarvinnut leikkiä POST reitityksen kanssa. En ehtinyt ennen tätä palautusta käymään läpi, että mikä mättää GitLabin kanssa, mutta yritän saada sen kuntoon ensi viikon tehtäville. Toimiihan tämä GitHubikin ihan hyvin. :) En varsinaisesti oppinut mitään uutta, vanhan tutun kertausta koodin puolelta.
## Tehtävä 3: REST API + React
https://github.com/ropm/RestReactWebo
### 01.10.2019
Tehtävään kului aikaa enemmän kuin aiempiin, piti palautella mieleen Reactin toimintaa ja sitten muokata backend CRUD muotoon, eli lisätä POST, PATCH ja DELETE reitit. Tehtävä oli muuten simppeli, mutta hyvin tuli kerrattua Reactin perusasiat, sekä Restful API:n teko. Tehtävän aikana ilmeni hieman ongelmia, kun piti vaihtaa tietokonetta teknisten ongelmien vuoksi. Tietokannan pystyttäminen sekä siihen yhdistäminen ei enää onnistunutkaan yhtä helposti. Sen ongelman kanssa meni varmaan päivä aikaa, ennen kuin sain sen toimimaan. PATCH pyynnön toteuttaminen Reactin kanssa oli myös hieman haastavaa, mutta kun ymmärsi, miten Statea pystyy helposti hallitsemaan, niin homma hoitui helposti. Käytin Staten hallintaan React Context Api:a, koska sitä olen aiemminkin käyttänyt ja en tykkää yhtään propsien heittelystä komponenttien välillä. Ja tuohon kyseiseen ongelmaan Context Api auttaa. (https://reactjs.org/docs/context.html)
##### 02.10.2019 päivitys
Unohdin Maanantaina puskea yhden commitin repositorioon, joten se tuli nyt hieman enemmän myöhässä tänään sinne... Oli pieni korjaus PATCH metodiin.
## Tehtävä 4: Urheilu 2: REST API + MongoDB
https://github.com/ropm/ExpressMongoWebo
### 13.10.2019
Tehtävään kului aikaa normaalin verran, mutta on pakko jättää se hetkeksi kesken ja sitten täydennän portfolion teon yhteydessä sitä lisää. Tällä hetkellä vain GET request toimii AJAX:in kautta. Muu pitää vielä korjata ja tehdä. Syy tähän on se, että mursin sormeni ja olen nyt sairaslomalla, mutta parin viikon kuluessa luulisin pystyväni viimeistelemään tehtävän portfolion kera. Eli täydennän tähän tehtävään GET pyynnön toimivaksi paremmin, POST pyynnön, sekä niiden käyttöliittymätoteutukset ja sen tyylittelyn.
Parin viikon jälkeen homma jatkui: Docker komentojen kanssa oli hieman epäselvyyksiä ja esimerkissä annettu "docker run -it --rm --link mongodb-server:mongo mongo:latest mongo --host mongodb-server athletics" komento ei toiminut. Joten pystytin kontin normaalisti komennolla "docker run -d -p 27017:27017 --name mongodb-server mongo", menin sen sisään komennolla "docker exec -it mongodb-server bash" ja kontin sisällä käynnistin mongodb:n komennolla "mongo". Sain AJAX kutsut toimimaan hyvin, ei tullut ongelmia vastaan juuri ollenkaan.
Tein sovellukseen yhden simppelin testin, joka testaa GET reittiä. Se vain tarkistaa, että pyyntö palauttaa http vastauskoodin 200. Testien tekeminen on itselleni tuttua hommaa, koska niitä on tullut tehtyä aiemmin monia Pythonilla. Piti vain ensin selvitellä, mitä kirjastoja kannattaa käyttää Javascriptin kanssa. Yksikkötestauksen idea noin yleisesti on mielestäni järkevä pitää simppelinä, eli odotetaan jotakin tiettyä vastausta ja yksikkötesti sitten tarkistaa sen. Sitten kun mennään muuhun testaukseen, kuten integraatiotestaukseen, on järkevämpi käyttää hieman kattavampia testejä, jotta ohjelma pysyy integraatioiden jälkeen toimivana.
Muita mielipiteitä tehtävästä: Tehtävä olisi mielestäni voinut olla ennen React tehtävää, koska nyt mielestäni mentiin huonompaan suuntaan. Tämä tehtävä olisi ollut hyvä alkutehtävä ja käyty läpi AJAX kutsuja yms, ja sitten siirtyä Reactin puolelle ja tulisi ns. Ahaa-elämys, kuinka helppoa se on Reactilla tehdä.
## Tehtävä 5: ePortfolio
https://github.com/ropm/portfolio-site-rm
http://ropm.pythonanywhere.com/
### 21.10.2019
Käytän tehtävään aiemmin tekemääni portfolio sivua, joka on dockeroitu python web-sovellus. En käyttänyt valmista bootstrap tms. pohjaa, mutta käytin hyväkseni https://bootswatch.com/lux/ sivulta löytyvän bootstrap teeman komponentteja ja loin loput komponentit ja layoutin itse.
ePortfolio löytyy tästä osoitteesta: http://ropm.pythonanywhere.com/.
Päivitän sivun Projektit osuuteen kurssilla tehdyt työt, kunhan sormeni paranee enemmän.
Päivittelin sivun 31.10, lisäsin sivuston blogiin tehtävien kuvaukset, sekä palauteosion.
## Tehtävä 6: Asynkroninen Javascript
https://github.com/ropm/Teht6webo
### 31.10.2019
Tein tehtävän myöhässä, koska en aiemmin pystynyt kunnolla kirjoittamaan yllä mainitun sormiepisodin takia. Tehtävään meni aikaa muutama tunti, piti kerrata vähän Promisejen käyttöä. Muuten aika tuttua hommaa, koska olen aiemminkin harrastellut asynkronista javascriptia node.js:n kanssa. Algoritmi, joka palauttaa 3 ruutua pelialueelta, toimii vähän huonosti tosin. Se palauttaa vain vinoja laivoja, mutta en nyt enää ehdi korjailemaan sitä. Kuitenkin Rest api käyttää sitä funktiota asynkronisesti, eli tehtävän pääasia on tehty oikein.