Ohjelmistokehittäjänä Yleisradion Areenan taustapalvelutiimissä
Mikkonen, Turo (2023)
Mikkonen, Turo
2023
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:amk-202305037378
https://urn.fi/URN:NBN:fi:amk-202305037378
Tiivistelmä
Opinnäytetyössä seurataan minun arkeani Ylen kehittäjänä 8 viikon ajan Areenan mediatoistopalvelun parissa. Jokaiselta viikolta on päivittäisten raporttien lisäksi viikon aiheista tai suuremmasta kokonaisuudesta analyysi. Olen jo melko kokenut ohjelmistokehittäjä noin 7 vuoden kokemuksella. Kokemuksen lisäksi olen käynyt Haaga-helian tietojenkäsittelyn koulutusohjelmaa, julkisia kursseja, maksettuja kursseja sekä tehnyt omia projekteja ohjelmistokehityksen parissa.
Ensimmäinen kehitysprojekti on Chromecast receiver ohjelmisto. Viikon aikana törmään CORS virheeseen, jolla estetään niin kutsuttuja “man in the middle” hyökkäyksiä. CORS virhe tapahtuu, kun sivujen välinen nimipalvelu, tai hyväksytyt nimipalvelut eivät sovi yhteen. CORS oli siitä hankala ongelma selvittää käyttöliittymä päässä, että siitä ei tule virhettä selaimen päätyyn, vaan taustapalvelun logeihin. Löysin erilaisia tapoja kiertää CORS-virhe, kuten välityspalvelimella, tai kaikkien sivujen hyväksyminen taustapalvelun asetuksissa. Päätin kuitenkin, että kumpikaan näistä ei ole sopiva ratkaisu, vaan siirsin Chromecast receiver ohjelmiston AWS S3 palvelun testiympäristöön. Chromecast-projektiin liittyen analysoin myös applikaation käyttöestoja. Kun Chromecast-laitteeseen halutaan syöttää applikaatio, jota ei ole julkaistu Googlen palveluiden kautta, on se rekisteröitävä omaan käyttöön.
Opinnäytetyön aikana analysoin mediatoisopalvelun React arkkitehtuuria sekä tilanhallintaa. Toistaiseksi projektin tilanhallinta on toteutettu Reactin Context API:a hyödyntäen, jonka selkeänä haittapuolena on komponenttien turha uudelleen piirtäminen, kun mikä tahansa osa tilasta muuttuu. Arkkitehtuuria analysoidessani toinen selkeä hyöty toisenlaiseen tilanhallinta ratkaisuun siirtymisessä olisi komponenttien selkeä vastuunjako. Käyttöliittymää piirtävät komponentit tekisivät vain käyttöliittymään liittyviä päätelmiä, kun tilanhallinta, ja sen logiikka, sijaitsee omissa komponenteissa. React arkkitehtuurissa suositellaan komponenttien erottelua toisistaan, jolloin yksittäistä komponenttia voidaan hyötykäyttää muualla, kun se ei ole vahvasti liitetty toiseen komponenttiin. Redux on erittäin suosittu, mutta viimeisinä vuosina kritiikkiä osakseen saanut tilanhallinnan ratkaisu. Tilanhallinnan ratkaisuja on nykyään kuitenkin enemmän, joista osa on erittäin kevyitä.
Opinnäytetyössä analysoin myös AWS S3 palvelua, UI-komponentti rajapintoja, teknisen haastattelun parhaita käytäntöjä sekä tuotantoon viennin parhaita käytäntöjä. AWS S3 palvelu on objektien tallennuspalvelu, jossa hyödynnetään tallennukseen objekteja. Objektit ovat epämuodollinen data malli, jossa tunniste tieto tallennetaan objektiin metatietona. UI-komponentti rajapinnat ovat rajapintoja, jotka on suunniteltu elämään tietokanta rajapintojen sekä käyttöliittymän välissä. Rajapinta hakee kaiken käyttöliittymän tarvitseman tiedon, vaikka useammasta lähteestä sekä kokoaa niistä tarvittavat kokonaisuudet käyttöliittymän tarpeisiin.
Ensimmäinen kehitysprojekti on Chromecast receiver ohjelmisto. Viikon aikana törmään CORS virheeseen, jolla estetään niin kutsuttuja “man in the middle” hyökkäyksiä. CORS virhe tapahtuu, kun sivujen välinen nimipalvelu, tai hyväksytyt nimipalvelut eivät sovi yhteen. CORS oli siitä hankala ongelma selvittää käyttöliittymä päässä, että siitä ei tule virhettä selaimen päätyyn, vaan taustapalvelun logeihin. Löysin erilaisia tapoja kiertää CORS-virhe, kuten välityspalvelimella, tai kaikkien sivujen hyväksyminen taustapalvelun asetuksissa. Päätin kuitenkin, että kumpikaan näistä ei ole sopiva ratkaisu, vaan siirsin Chromecast receiver ohjelmiston AWS S3 palvelun testiympäristöön. Chromecast-projektiin liittyen analysoin myös applikaation käyttöestoja. Kun Chromecast-laitteeseen halutaan syöttää applikaatio, jota ei ole julkaistu Googlen palveluiden kautta, on se rekisteröitävä omaan käyttöön.
Opinnäytetyön aikana analysoin mediatoisopalvelun React arkkitehtuuria sekä tilanhallintaa. Toistaiseksi projektin tilanhallinta on toteutettu Reactin Context API:a hyödyntäen, jonka selkeänä haittapuolena on komponenttien turha uudelleen piirtäminen, kun mikä tahansa osa tilasta muuttuu. Arkkitehtuuria analysoidessani toinen selkeä hyöty toisenlaiseen tilanhallinta ratkaisuun siirtymisessä olisi komponenttien selkeä vastuunjako. Käyttöliittymää piirtävät komponentit tekisivät vain käyttöliittymään liittyviä päätelmiä, kun tilanhallinta, ja sen logiikka, sijaitsee omissa komponenteissa. React arkkitehtuurissa suositellaan komponenttien erottelua toisistaan, jolloin yksittäistä komponenttia voidaan hyötykäyttää muualla, kun se ei ole vahvasti liitetty toiseen komponenttiin. Redux on erittäin suosittu, mutta viimeisinä vuosina kritiikkiä osakseen saanut tilanhallinnan ratkaisu. Tilanhallinnan ratkaisuja on nykyään kuitenkin enemmän, joista osa on erittäin kevyitä.
Opinnäytetyössä analysoin myös AWS S3 palvelua, UI-komponentti rajapintoja, teknisen haastattelun parhaita käytäntöjä sekä tuotantoon viennin parhaita käytäntöjä. AWS S3 palvelu on objektien tallennuspalvelu, jossa hyödynnetään tallennukseen objekteja. Objektit ovat epämuodollinen data malli, jossa tunniste tieto tallennetaan objektiin metatietona. UI-komponentti rajapinnat ovat rajapintoja, jotka on suunniteltu elämään tietokanta rajapintojen sekä käyttöliittymän välissä. Rajapinta hakee kaiken käyttöliittymän tarvitseman tiedon, vaikka useammasta lähteestä sekä kokoaa niistä tarvittavat kokonaisuudet käyttöliittymän tarpeisiin.