Thomas (38) får norske bingo­haller opp i skyen

- Må lage alt fra bunnen av med .Net Core, forteller Ukas Koder Thomas Kristiansen i Electronic Gaming Systems AS.

Thomas Kristiansen er seniorutvikler og selvutnevnt "potet" hos Electronic Gaming Systems AS, fra hjemmekontor. 📸: Privat
Thomas Kristiansen er seniorutvikler og selvutnevnt "potet" hos Electronic Gaming Systems AS, fra hjemmekontor. 📸: Privat Vis mer

Hvordan begynte du med koding? 👶

Det er en ganske lang historie, så spenn deg fast.

Jeg fikk min første PC i konfirmasjonsgave. Alt jeg kunne gjøre med en PC fascinerte meg, og jeg prøvde meg på all programvare jeg klarte få tak i. Alt fra Photoshop til 3D Studio Max og Maya til lydprogrammer og så videre. Koding var skummelt, men HTML var håndterbart.

Jeg har alltid vært glad i spill. Final Fantasy 7 var spillet som virkelig ga meg lyst til å lage spill. Etter å ha gravd litt i diverse forum fant jeg noe som het Dark Basic Pro, en spillmotor med et scriptspråk basert på Basic. Jeg begynte med å lage Pong, slik man skal gjøre som en nybegynner. Så skulle jeg derimot lage Mario Kart - det ble ingen suksess.

Senere prøvde jeg å lære meg C++ og OpenGL på egenhånd. Ikke hadde jeg penger til bøker, så da ble det hva enn jeg kunne oppdrive på nett (som var svært lite på den tiden, shoutout til NeHe gamedev tuts). Det ble heller ingen stor suksess. Det var et litt langt hopp fra roterende flerfargede polygoner og teksturerte kuber, partikkelsystemer og så videre til et fullt fungerende spill.

Jeg begynte å interessere meg mer for webutvikling og lærte meg PHP, MySQL, HTML og JavaScript. Jobbet et par år som webutvikler, men det var spillutvikler jeg ville bli.

Jeg returnerte dermed etter hvert til skolebenken og studerte multimediadesign og 3D hos Noroff, men innså etter hvert at det ikke var det jeg skulle jobbe med. I stedet ble det bachelor i ingeniørfag, data ved Høgskolen i Østfold. Husker jeg lagde Tetris i Java i sommerferien før jeg startet, som forberedelse. Alle skoleprosjekter der det var mulig gjorde jeg til et spillprosjekt. Et av valgfagene der var .Net/C#, og der ble jeg forelsket.

«I løpet av disse årene har jeg laget 12 spill med egen spillmotor. Men det er også mye annet som hører til.»

Mens jeg studerte så lekte jeg en del med XNA, og ble invitert til et open source-prosjekt kalt MonoXNA. Dette kom nyttig med da jeg skulle finne sommerjobb etter bachelor. Hos Electronic Gaming Systems AS skulle jeg utvikle et digitalt bingo-spill, som skulle kjøre på en Ubuntu-maskin med begrenset hardware. Plutselig fikk jeg bruk for alt jeg kunne. Jeg brukte kunnskapen fra XNA til å bygge en grafikkmotor/spillmotor, som brukes den dag i dag (selv om den har utviklet seg en del siden) og lagde grafikk og animasjoner selv.

Dette var i 2009, og jeg jobber der fortsatt. Lengste sommerjobben ever! Men det betyr vel også at jeg trives godt i jobben. Her har det vært mange og varierte utfordringer å takle, mye ansvar og rom til å utvikle seg på.

I løpet av disse årene har jeg laget 12 spill med egen spillmotor. Men det er også mye annet som hører til, for eksempel applikasjoner for presentasjon av spill på TV, terminaler for lading med bankkort eller kontanter, kortlesere, utskrift av gevinstsedler med mer. Etter hvert tok jeg også over backend-delen og har i dag kontroll på hele økosystemet.

Thomas Kristiansen i Electronic Gaming Systems AS jobba mye fra hjemmekontor også før korona. 📸: Privat
Thomas Kristiansen i Electronic Gaming Systems AS jobba mye fra hjemmekontor også før korona. 📸: Privat Vis mer

Hva jobber du med akkurat nå? 🛠️

Vi leverer et bingosystem til haller både i Norge og Danmark som består av mange deler.

Våre serverapplikasjoner beregner trekninger og gevinster for forskjellige spill, som presenteres på Ubuntu-terminaler og TV-er i en hall. De kan også spille sammen i link på tvers av haller. Alt går via en proprietær protokoll over TCP/IP med MySQL som database. De administreres og styres av et program som er laget i gode, gamle WinForms. Man kaller det ikke legacy for ingenting.

Vi jobber samtidig med å flytte hele systemet ut i skyen og er godt i gang, selv om det er langt igjen å gå. Det innebærer å lage alt fra bunnen av med .Net Core som kjører i Docker-containere, håndtert av Kubernetes, hostet av Google Cloud. Spillene skal også lages på nytt i HTML5. Database-backend i skyen er Postgres. Adminprogram laget med Vue.

Akkurat nå har vi nettopp sluppet vårt første HTML5-spill "Whack-a-mole" som kan spilles på bingo.no. Spillet ble først utviklet til terminalene i hall, og deretter portet til Playcanvas (HTML5-spillmotor). Samtidig jobber vi med å integrere Vipps som betalingsløsning i spillklienten til hallene. Fremover blir det mye jobbing med ny iGaming-plattform og API som spillservere skal snakke med.

Mye forskjellig å gjøre, med andre ord. Arbeidsoppgaver varierer veldig etter behov. Jeg vil anslå kanskje 50 prosent backend-utvikling, 30 prosent spillutvikling og 20 prosent diverse annet.

Thomas Kristiansen hos Electronic Gaming Systems AS har ikke fått arbeidshverdagen snudd på hodet av korona, slik mange andre har. 📸: Privat
Thomas Kristiansen hos Electronic Gaming Systems AS har ikke fått arbeidshverdagen snudd på hodet av korona, slik mange andre har. 📸: Privat Vis mer

Hvordan ser en typisk arbeidsdag ut for deg? ☕

Jeg har stort sett alltid hatt hjemmekontor, på godt og vondt. Det er positivt i forhold til produktivitet, men det sosiale får lide litt.

Jeg drar så klart inn på jobben for sprintmøter og liknende. Sosialiseringen med andre utviklere skjer som oftest på Slack, og vi kjører litt screenshare og parprogrammering ved behov.

Dette har fungert ganske godt i lang tid. Så drar vi jo også på utenlandsturer et par ganger i året, så vi får "bondet" litt bedre.

Forskjellen før og etter korona har med andre ord ikke vært veldig stor, foruten at møter har blitt flyttet over på Teams og reisene har uteblitt.

Hva har du lyst til å lære mer om framover? 📚

Vil jo lære mer om alt! Men dessverre strekker ikke tiden til.

For jobbens del vil jeg alltid lære mer om systemarkitektur. Vi har tatt i bruk DDD for skytjenestene våre, der har jeg fortsatt mye å lære. Så vil jeg gjerne teste CQRS der det egner seg.

Nå som vi har begynt med HTML5-spillutvikling vil jeg lære mest mulig om Typescript. Javascript har jeg holdt meg unna så mye som mulig, men i Typescript føler jeg meg mer hjemme i som C#-utvikler og fan av strongly-typed språk.

«Elastic Search + Kibana har vist seg å være veldig verdifullt for oss.»

Hvilke konkrete verktøy klarer du deg ikke uten? 😻

Personlig har jeg vært fan av ReSharper i lang tid. Det siste året har jeg byttet til Rider der ReSharper er "innebygd" og trives godt med det.

Jeg vil helst ikke leve uten CI/CD i disse dager. Vi bruker Teamcity for "legacy"-systemet (Cake for build script) og Bitbucket Pipelines + Google Cloud Builder for skytjenestene.

Sist, men ikke minst: Elastic Search + Kibana har vist seg å være veldig verdifullt for oss. Vi bruker det ikke bare for analyse, men også som et sekundært rapporteringssystem der hver entreprenør kan se aggregerte omsetningstall og liknende for sine haller.

Hva er det verste du kan bli spurt om på jobben? 🔥

Bakdelen med å være en "potet" er at jeg kan for eksmepel få forespørsler om å lage grafisk markedsføringsmateriell for spillene våre. Det er vel ikke akkurat favorittoppgaven.

Eller spørsmålene "Klarer vi å lage..." (ja, så klart vi klarer!) og "Hvor lang tid tar det å [dårlig definert oppgave]".

Tekniske supportoppgaver, som ikke er direkte forårsaket av bugs, er vel heller ikke favoritten.

Hva synes du norske utviklere bør bli flinkere på? 🙋

Å ikke avskrive teknologier, patterns og rammeverk, kun fordi man ikke umiddelbart ser hensikten eller nytten av det.

Det er som oftest gode grunner til at de eksisterer. Bruk litt tid på å prøve det ut selv, så kommer åpenbaringene etterhvert - og da har man et ekstra verktøy i beltet som man kan dra frem når anledningen passer.

Det er vel så viktig å bruke riktig verktøy til riktig jobb. Om man er veldig glad i hammeren, så ser alt ut som en spiker.

«Om man er veldig glad i hammeren, så ser alt ut som en spiker.»

Hva liker du å gjøre når du ikke jobber? 🕹️

På fritiden jobber jeg mye i spillmotoren Unity. Det har vært mange eksperimenter og uferdige prosjekter over mange år, men også mye nyttig erfaring.

For tiden jobber jeg sammen med Team Snuti på spillet Sundae Sailing aka Isbåten, som er både lærerikt og morsomt.

Liker jo også å spille, selv om jeg ikke har like mye tid til det som jeg skulle ønske. Når batteriene er utladet ut mot kveldingen, så blir det vel gjerne litt serie-binging. Så spiller jeg litt gitar og piano inn i mellom slagene.