Blogi

Digiarjen sankari: Viktor Candolinin työviikko koostuu monipuolisesta ohjelmistotekemisestä

Kirjoittanut Digia Oyj | 10.10.2018 21:00

Digiarjen sankarit -blogisarjassa kurkistetaan digialaisten arkeen ja tarinoihin. Tällä kertaa pääsemme tutustumaan kokeneen integraatiokehittäjä Viktor Candolinin työviikkoon. Työn alla on logistiikka-alan asiakkaan integraatioprojekti.

Työviikkojen välissä kerkeää välillä myös lomailla, yläkuva Etelä-Italiasta 

Työskentelen täysipäiväisesti logistiikka-alan asiakkuudessa integraatioprojektin toteuttajana. Asiakkaalle rakennetaan kuljetusten seuranta- ja reititysjärjestelmää. Projekti koostuu useammasta mikropalvelusta MongoDB:n päällä. Mikropalvelut ovat joko NodeJS tai NodeJS/Typescript -toteutuksia. Projektissa pääosin käytetyt työkalut ovat Visual Studio 2017 ja Robo3T. Tässä kuvaan poimintoja eräästä työviikostani projektin parissa: 

Maanantai

Työpäivä alkaa tänään kello 8.50, tämä on totuttua myöhemmin, sillä punttisalin suihkut olivat pois käytöstä, joten piti ajaa takaisin kotiin treenin jälkeen ja sitten vasta töihin. Toimistomme Logomossa saa kuitenkin paremmalle tuulelle, kun maanantaiaamuisin on vastassa ”pakkopulla”, eli lämmin pulla ja kahvi kaikille. Päivä alkaa projektin statuspalaverilla toisen kehittäjän ja asiakkaan projektimanagerin kanssa. Tällä hetkellä menossa on tiiviimpi projektin vaihe, jossa yritetään saada mahdollisimman paljon aikaan tämän kuun aikana. Palaverissa käydään läpi poikkeuksia asiakkaan prosessissa ja sitä, miten niitä aiotaan hoitaa. 

Lounaan jälkeen toteutan uutta seurantaprosessia järjestelmään. Backend -palvelujen osalta olikin tässä kohtaa jo kaikki tarvittavat kutsut olemassa, joten tehtäväksi jää luoda uusi seurantaprosessi frontendiin. Haasteellista tässä on se, kun käyttäjä luo uuden seurattavan toimituksen, kokonainen hierarkia pitää luoda kerralla. Eli uusi toimitus, jonka sisällä on x määrä kontteja, pitää rekisteröidä konttiseurannan mikropalveluun. Loppupäivä menee .NET VSTO -tekniikalla toteutetun Excel-lisäosan viilaamiseen. 

Tiistai

Jatkan eilisen Excel-lisäosan tehtävillä, tällä kertaa liittyen siihen, miten projektirivit viedään Excelistä asiakkaan alustaan. NodeJS -backend palvelut ovat Swaggerilla dokumentoidut, joten olen yhden kohdalla kokeillut, miten hyvin Swaggerin C# client generaattori toimii. Lopputulos on parempi kuin osasin odottaa.

Kello yhdeksän pidetään taas seurantapalaveri toisen kehittäjän ja asiakkaan kanssa. Aiheena on olemassa olevan autentikaation käyttöönotto uuteen mikropalveluun, sekä logistiikkaoperaatorin käyttäjäoikeudet verrattuna asiakastilin käyttäjäoikeuksiin. Lounaalla menen tapaamaan asiakasta ravintolaan, läsnä ovat asiakkaan toimitusjohtaja, myyntijohtaja ja projektimanageri. Keskustelemme etenemisestä ja siitä, mitä tekemistä projektissa vielä on. 

Pientä viilausta käyttöliittymään vielä ja syntyy proof of concept -tulostustyökalu, jolla voimme tulostaa vastaavat tagit kuin tehtaalta pitäisi tulla.


Lounaan jälkeen tehtävä vaihtuu aivan toiseen. Tällä kertaa olen asiakkaan tiloissa ja edessä on Zebran tarratulostin RFID- lisämoduulilla. Luon meille sopivan designin QR-koodeineen, ja lisään vielä perään RFID-ohjelmointikäskyt. Pientä viilausta käyttöliittymään vielä ja syntyy proof of concept -tulostustyökalu, jolla voimme tulostaa vastaavat tagit kuin tehtaalta pitäisi tulla. Ihan valmis se ei vielä ole, joten otan printterin mukaan Digian toimistolle.

Keskiviikko

Puoli yhdeksältä jatkan RFID-labelien printtausta. Saankin aikalailla kaikki, paitsi tagin lopullisen ohjelmoinnin, pakettiin. Iltapäivällä jatkan RFID -tulostusoftalla viimeisen puuttuvan osan työstämistä, EPC-koodin generointia. UHF RFID -tagit ovat GS-1 -standardointiorganisaation tuotoksia, ja niiden enkoodaus tapahtuu GS-1 -spesifikaation mukaan.

Pääsen taas bittinikkariksi, mitä en ole vähän aikaan tehnyt, sillä Digialla tehtävät ovat yleensä integraatio-luonteisia, eivätkä bittitason hommia. Tagin muistiin mahtuu tavallisesti 96 bittiä, josta loput 38 ovat sarjanumero-osuus. Keskellä tagia on kaksi kenttää, joilla on vaihtuva bittipituus riippuen alkutavujen lippujen asennosta. Yhteenlaskettuna molempien kenttien pituus on vakio. C# ei ole oikein bittinikkarikieli, mutta muuntamalla binääriluvuksi string formaatissa, jossa nollat on liitetty eteen, saadaan aikaan toivottu kentän bittipituus ja ongelma ratkeaa. Näiden kahden kentän bit-string -arvot voidaan sitten liittää toisiinsa. Eteen vielä headeribitit ja perään sarjanumerobitit, niin koko 96-bittisen tägin muistin sisältö on kasassa. Jos tagin henkimaailma kiinostaa, niin täällä voi leikkiä, käytämme GTIN+serial enkoodausta lavoille.

Torstai

Hommat alkavat tältä päivältä login -näkymällä frontendissa. Se on pitkän aikaa ollut tarpeeksi hyvä, mutta ei lopullinen. Yhdeksältä pidämme taas projektipalaverin. Käymme läpi edellisen päivän tuotokset ja ongelmakohdat ja päivitämme Trello boardia vastaamaan projektin tilannetta.

Päivään mahtuu myös kameran käyttö selaimesta, ja vieläpä viivakoodilukijana, mikä oli minulle positiivinen yllätys kun kyseisen komponentti tuli vastaan. Eli nykyään frontendista voi ohjata mobiililaitteen tai läppärin kameraa ja lukea sillä QR-koodeja. 


Merikonttien seurantapalvelussa ilmenneet bugit ovat seuraava tehtävä. Mikropalvelu hoitaa kolmannelta osapuolelta virtaavat push-tyyliset tilannepäivitykset. Nyt kun se on ollut noin viikon verran toiminnassa ja seurantadataa oikeista konteista alkaa olla, on ilmennyt pari korjattavaa kohtaa, jotka otan työn alle. Päivään mahtuu myös kameran käyttö selaimesta, ja vieläpä viivakoodilukijana, mikä oli minulle positiivinen yllätys kun kyseisen komponentti tuli vastaan. Eli nykyään frontendista voi ohjata mobiililaitteen tai läppärin kameraa ja lukea sillä QR-koodeja. 

Perjantai

Päivä alkaa käymällä läpi viikon aikana tehdyt tehtävät Bitbucketista ja Trellosta. Päivitän ne olemassa olevien tarpeiden mukaan ja kokeilen millä tasolla uudet muutokset ovat alustassa. Minulle tässä projektissa tuli yllätyksenä se, että konttien määrä ja koodit saattavat olla täysin selvillä ennen kuin edes varastolla tiedetään mitä niihin pakataan.

Tämä kauneusvirhe häiritsee lähinnä koodaria, ei loppukäyttäjää. 


Seuraavaksi muodostan sivun navigaatiopolun. Huomaan, että navigaatiopolku pitää sisällään myös linkin sivulle, jossa käyttäjä jo sillä hetkellä on, mutta tämä jää korjattavaksi myöhemmin. Tämä kauneusvirhe häiritsee lähinnä koodaria, ei loppukäyttäjää. Lopuksi integroin QR-koodikomponentin frontendiin, ja jää vielä aikaa kytkeä taustatkin yhteen. Lähden tänään aika tarkasti kello neljä, sillä on kaunis keli ja kesämökille voi vielä lähteä.