Blog

Thoughts and events (in Finnish)

Teknologia – Kesälomaprojekti Flutterilla

Olen yksi niistä ohjelmistokehittäjistä, jotka eivät yleensä saa yhtään harrasteprojektia maaliin asti. Henkilökohtainen github-tilini hyräilee karua hymniä hylätyistä projekteista, joita on tehty yhden viikonlopun verran ja jätetty sitten kitumaan. Pelkästään demoilun ilosta en jaksa edes aloittaa mitään, vaan takana on oltava joku tosielämän tarve.

Tällainen tarve tuli eteeni pari vuotta sitten, kun satuin olemaan sopivasti paikalla Pankajärven kesäolympialaisten aikaan. Tapahtuma on kyseisen järven mökkiläisten järjestämä noin seitsemän lajin turnaus, jossa lopullisten tulosten laskenta oli aina enemmän tai vähemmän laskijasta kiinni. Paikalla ollessani tietenkin tämä nakki napsahti minulle, eikä kenelläkään ollut oikein vakiintunutta ideaa kuinka voittaja tulisi määritellä seitsemästä lajista ja noin kahdestakymmenestä osallistujasta. Päädyin ottamaan jokaisen lajin kolme parasta ja ihmettelemään heidän välistä paremmuuttaan koko turnauksen voittajaksi. Tiesin jo voittajan ääneen julistaessani, että tämä prosessi tarvitsee hiomista. Muut kilpailijat heittivät puoliksi vitsillä, “Jeren pitää tehdä tähän ohjelma joka laskee pisteet”. Eivät osanneet arvata, että otinkin haasteen vastaan.

Ensimmäinen versio laskurista syntyi seuraavan viikonlopun aikana, kun laadin kiinteän HTML-lomakkeen heidän pelaamistaan lajeista. Jo tämä säästi paljon aikaa, mutta koska kyseessä oli vain staattinen webbisivu ilman mitään tietokantoja, yksikin vahinkoliike selaimessa saattoi pyyhkäistä tulokset tavoittamattomiin.

Halusin palvella kansaani paremmin.

Reipas vuosi sitten aloitin Circlesillä ja törmäsin sanaan Flutter. Toimeksiantoa odotellessani testailin miten tällä tuoreella mobiilisovellusohjelmistokehyksellä kehitys oikein tapahtuu. Ensimmäisenä ilahduin, miten helposti ylä- ja alapalkit, hampurilaisvalikot sekä ikonit solahtivat kohdilleen. Pidin myös ajatuksesta, ettei kehittäjän tarvitse välittää css:stä ollenkaan, vaan jokainen Widget ottaa vastaan tyylimäärittelyt omina propertyinään. Olen kärsinyt vakavasta css-ihottumasta monta vuotta, joten tämä on erittäin mieluisa tapa tehdä asioita.

Treenasin tiedon tallentamista Firestoreen sekä sovelluksen julkaisua sekä Googlen että Applen omissa kaupoissa, joista jälkimmäinen osoittautuikin paljon ensimmäistä työläämmäksi.

Huomasin, että sain Flutterilla haluamani näkymän kasaan muutamassa tunnissa, joten protoilu on todella vaivatonta.

Entäs sitten pistelaskuri?

Kun Circlesillä tienaamani 20 lomapäivää siirtyivät suunnitelmista tuotantoon ja työporukan kanssa Ruunaan virkistysreissu oli vietetty, avasin ensimmäisellä lomaviikolla koodieditorin. Valitsin tallentaa tiedot sqlite-kantaan, koska ohjelmalla ei ollut mitään oikeaa syytä tallentaa pilveen mitään – ainakaan mvp-vaiheessa. En ole koskaan ollut sohvalla tv-hömppää kuluttava yksilö, vaan haluan tehdä ajallani jotain kehittävää, joten tämä koodausprojekti kutkutti kivasti. Koska asiakaspainetta ei ollut, niin saatoin ottaa läppärin mukaan kesämökille ja siemailla viskiä samalla kun googletin miten sqlitellä tehdään REPLACE INTO ilman että sovellus räjähtää. Kävelin useampaan otteeseen ympyrää kesämökin terassilla ja kiroilin puoliääneen – ja samalla tulin demonstroineeksi äidille miten ohjelmistokehitys käytännössä tapahtuu.

Kahden viikon aikana koodasin vaihtelevalla panostuksella, mutta lopulta sain ulos jotain, jonka saatoin ristiä “pienimmäksi toimivaksi tuotteeksi”.

Lyhyesti: sovellukseen voi lisätä haluamansa määrään pelaajia ja lajeja. Jokaiselle lajille määritetään tyyppi; onko se pisteet / pituus -pohjainen vaiko aikapohjainen. Tulokset syötetään numeroina ja jokaisen lajin paras tulos saa aina 100 pistettä, ja seuraava 99 jne. (Jos sovellukseni räjähtää viraaliksi ja laskinta yrittää käyttää yli sadan osallistujan pisteiden laskemiseen, eräs integer menee jossain kohti miinukselle ja osallistujille tuleekin miinuspisteitä.)

Odotin ensimmäisen paketin läpimenoa Googlen sovelluskauppaan melkein viikon, ja päivityksilläkin kestää vähintään 2 päivää päästä kuluttajille asti. Syynä tietysti korona.

Noin kymmenvuotisen ohjelmointiurani aikana tämä on toinen harrasteprojekti, jonka olen saanut käyttövalmiiksi asti. Äppi palvelee kohdeyleisöään juuri passelisti ja lähdekoodia tutkiessa huomaa, että viskiäkin on nautittu. Tärkeintä oli saada kiva koodausprojekti jonka työstäminen tapahtui omilla ehdoilla ja jota joku oikeasti tarvitsee; olkoonkin se sitten vaikka 1 pisteenlaskija kerran kesässä Pankajärven Lieteniemessä.

Kesäkisat Mobile

Jere Karppinen
Circles Consultant