Viisi vuotta elokuva- ja tv-tuotantoa opetti minua navigoimaan kaaoksessa ja ratkomaan ongelmia luovasti ja tehokkaasti. Nyt rakennan työkaluja, jotka ratkovat ongelmia puolestani.
Olen kokenut media-alan tuotantokoordinaattori ja -päällikkö — viimeisimpiä työkeikkojani olivat Ivalo-sarjan 3. ja 4. tuotantokaudet. Urallani olen mm. vastannut 50 hengen tuotantotiimin logistiikasta ja majoituksesta Helsingistä Ivalon kuvauksiin ja takaisin, hallinnoinut yli 200 000 euron budjetteja sekä koordinoinut monimutkaisia aikatauluja ja kokonaisuuksia tiukoissa deadlineissa.
Koulussa olen ohjelmoinnin lisäksi rakentanut mm. Linux-palvelinympäristöjä ja tehnyt testiautomaatiota Seleniumilla. Opintojen ohella olen kehittänyt kaksi omaa ohjelmistoprojektia ja opetellut Python-skriptausta automaatiotehtäviin.
Vapaa-ajallani rakennan käsilläni — viimeisimpinä projekteina mökin terassin rakentaminen sekä vanhan aittarakennuksen uusiminen lattiasta kattoon vierasmajaksi.
Työkalut, joita olen käyttänyt koulutöissä ja omissa projekteissani.
Kaksi projektia, jotka yhdistävät aiemman urani nykyiseen osaamiseeni — molempien idea lähti oikeasta ongelmasta, jonka halusin alalla ratkaista.
Elokuva- ja tv-tuotantojen kuljetusaikataulujen ja ajolistojen optimointiin rakennettu sovellus, lähtökohtana oma tuotantotyöstä tunnistettu tarve.
Itsenäisesti opeteltu Python ja OR-Tools-optimointikirjasto projektia varten.
Automatisoi käsikirjoitusten purun (.txt/.fdx) esituotannon budjetointia varten: kohtaukset, sijainnit, hahmot ja tuotannollinen data tunnistetaan automaattisesti.
21 taulun tietokantaskeema kattaa tuotannon koko aikataulutuksen: script-revisiot, stripboard, call sheetit, kuvauspaikat.
53 pytest-testiä, JWT-pohjainen autentikointi, arkkitehtuuripäätökset dokumentoitu ADR-muodossa.
Kouluprojektina palvelinympäristön rakentaminen alusta loppuun — verkosta tietoturvan koventamiseen.
Pystytettiin kaksi Ubuntu-virtuaalipalvelinta ja konfiguroitiin alusta asti: staattiset verkkoasetukset, salattu etähallinta SSH:n yli, tiedostonjako Samballa käyttöoikeuksineen, automatisoitu varmuuskopiointi rsyncillä sekä UFW-palomuuri. Web-puolella Nginx konfiguroitiin HTTPS-yhteydellä ja mukautetuilla virhesivuilla, ja BIND9 hoiti paikallisen nimipalvelun.
Palvelu siirrettiin Docker-kontteihin ja skaalattiin kahden noden Swarm-klusteriin replikoinnilla ja automaattisella vikasietoisuudella — testattu mm. sammuttamalla worker-node kesken ajon. Lopuksi tietoturvaa kovennettiin rakentamalla kevyempi Alpine-pohjainen image ja ajamalla kontti ei-root-käyttäjän oikeuksilla, vähimmän oikeuden periaatteen mukaisesti.
Ohjelmistotestaus-kurssilla tehty työpajatehtävä opetti testaamaan oikeassa ympäristössä — ei vain teoriassa.
Selenium-työpajatehtävässä kirjoitin Python-pohjaisen testiskriptin (demoqa_test.py), joka automatisoi lomakkeen täyttämisen ja lähetyksen DemoQA-testisovelluksessa: Chrome käynnistyy ohjelmallisesti, kentät täytetään ja lopuksi assertio varmistaa, että tuloskenttä näyttää oikeat syötetyt tiedot.
Testin ajossa vastaan tuli oikea käytännön ongelma: sivuston mainos peitti Submit-napin, jolloin tavallinen klikkaus epäonnistui (ElementClickInterceptedException). Ratkaisin tilanteen ohjaamalla klikkauksen suoraan JavaScriptin kautta — pieni mutta opettavainen esimerkki siitä, että testiautomaatio vaatii usein yhtä paljon ongelmanratkaisua kuin itse sovelluskehitys.
Tämä kurssi syntyi omasta kiinnostuksestani EUDI-lompakoihin — koulullamme ei ollut aiheesta kurssia, joten sain koulutuspäälliköltä tehtäväksi rakentaa sellaisen itse.
Eduniaan suunniteltu ja tuotettu Moodle-verkkokurssi, joka tarjoaa yleistajuisen johdannon EUDI-lompakoihin (European Digital Identity Wallet). Rakensin kurssin teoriaosuuden ja sen rinnalle H5P Game Map -pohjaisen tarinallisen pelin: pelaaja herää muistinsa menettäneenä kaupungin laidalla ja rakentaa ymmärrystä digitaalisesta identiteetistä leikittelevän muistinmenetystarinan kautta.
Jokainen pelin taso vastaa yhtä teoriamoduulia ja avaa uuden alueen kaupungista. Käsitteitä — kuten Holder, Issuer ja Relying Party — opetetaan NPC-hahmojen dialogien ja H5P-tehtävätyyppien kautta; esimerkiksi pankkikohtaus näyttää konkreettisesti, miksi palvelu näkee vain rajatun osan käyttäjän tiedoista sen sijaan että saisi kaiken. Peli päättyy loppukokeeseen ennen pelistä "pakenemista".