Hemmelighetene bak dartspillet på Oche

Norskutviklet pub-dart skal ut i verden. - Men det er ingen grunn til å finne opp kruttet på nytt, sier dart-utvikler Shako Farhad.

Salgs- og booking-ansvarlig Lovisa Hillberg på Oche tar seg et slag dart. Strekene du ser på gulvet foran beina hennes er opphavet til navnet; for ja, de heter oche, eller kastelinje. 📸: Ole Petter Baugerød Stokke
Salgs- og booking-ansvarlig Lovisa Hillberg på Oche tar seg et slag dart. Strekene du ser på gulvet foran beina hennes er opphavet til navnet; for ja, de heter oche, eller kastelinje. 📸: Ole Petter Baugerød Stokke Vis mer

- Det starta vel med et ønske om å gi Oslo-folk noe å gjøre, forteller Shako Farhad.

Resultatet ble utestedet Oche, som for ganske nøyaktig ett år siden åpna i Torggata i Oslo med innsalget "Norges første moderne dartklubb".

Oche er et ganske digert utested i Torggata i Oslo; en gate med ganske mange ganske digre utesteder. 📸: Ole Petter Baugerød Stokke
Oche er et ganske digert utested i Torggata i Oslo; en gate med ganske mange ganske digre utesteder. 📸: Ole Petter Baugerød Stokke Vis mer

Darten spilles på store stasjoner, med en skjerm over dartbrettet som vet nøyaktig hvor du traff - litt som bowling. Og når du først har det, kan du lage nye dartspill: For eksempel kreve at du treffer ett spesifikt sted på brettet, kanskje for å "drepe" motstanderne.

Siden åpningen har Oche begynt å selge dartstasjoner til andre pubber i både Norge og utlandet, gjennom selskapet Bulls Eye Club AS. Og snart åpner nye fullblods Oche-klubber i Amsterdam og Brisbane.

Oche har med andre ord gått fra å være én dartklubb i Oslo, til å bli et norsk dartspill-selskap.

Og akkurat nå er det bare én utvikler som står bak roret: 28 år gamle Shako Farhad, CTO i Bulls Eye Club.

Shako Farhad ble hentet inn til Bulls Eye Club, selskapet som driver Oche-konseptet videre, fra et masterstudie i "computational science" på UiO. 📸: Ole Petter Baugerød Stokke
Shako Farhad ble hentet inn til Bulls Eye Club, selskapet som driver Oche-konseptet videre, fra et masterstudie i "computational science" på UiO. 📸: Ole Petter Baugerød Stokke Vis mer

Fra fisk til dart

- Jeg kom rett fra en master i computational science på Universitetet i Oslo. To måneder før jeg var ferdig å skrive masteroppgaven, begynte jeg her, forteller Farhad til kode24.

«De sa de hadde bruk for kunnskapen min her, også.»

Masteroppgaven het "Investigation of Nanoparticles in Zebrafish using Particle Tracking Velocimetry", og handla om behandling av kreft gjennom bildeanalyse og deep learning.

Farhad bruker nå den samme kunnskapen til å spore dartpiler.

- De sa de hadde bruk for kunnskapen min her, også, smiler Farhad.

Før den tid hadde to utviklere hos Kodemaker brukt 2.200 timer på å utvikle løsningen, sammen med designere fra Eggs Design. Siden har løsningen blitt vedlikeholdt og videreutviklet av Farhad - til tider med hjelp fra konsulenter, snart ved hjelp av nyansatte.

Og teknologien bak dartstasjonene hans er mer velkjent enn du kanskje tror.

Her ser du de tre kameraene som ti ganger i sekundet sjekker hva som har skjedd på dartskiva, og skjermen over dartskiva som viser hva spilleren bør gjøre, og faktisk har gjort. 📸: Ole Petter Baugerød Stokke
Her ser du de tre kameraene som ti ganger i sekundet sjekker hva som har skjedd på dartskiva, og skjermen over dartskiva som viser hva spilleren bør gjøre, og faktisk har gjort. 📸: Ole Petter Baugerød Stokke Vis mer

React, Python og Clojure

Siden åpningen har Oches dartskiver mottatt rundt 6 millioner piler, fra over 105.600 spillere.

Her er kortversjonen av hva som foregår bak det mørke treverket på dartstasjonene:

  1. Bak skjermen på hver stasjon står en tradisjonell PC fra Digital Impuls og kjører Ubuntu. Alt kobles inn i samme PC, som skjermen over dartskiva, touch-skjermen man bruker for å styre spillene, lyset rundt dartskiva som lyser opp når spillet starter og ikke minst: kameraene.
  2. Tre kameraer filmer alt som skjer på dartskiva, med 10 bilder i sekundet. Bildene analyseres på tradisjonelt vis, av et Python-skript som regner ut hvor pila faktisk traff med 99,6 prosent sikkerhet.
  3. Resultatene sendes til det de kaller "game-serveren"; en slags backend som kjører lokalt på hver dartstasjon, skrevet i Clojure. Denne sender data videre til de to frontend-ene.
  4. PC-en kjører nemlig også to web-applikasjoner i Chromium: Én på touch-skjermen, en annen på den store skjermen over dartskiva. Begge er skrevet i ClojureScript, med React-løsningen Reagent og state-styreren Re-frame.
Det er ingenting spesielt med selve dartskivene på Oche, heller ikke pilene, da all beregning gjøres ut fra de tre kameraene. Men pilene bør være i én spesifikk farge for at Python-programmet skal lese dem så nøyaktig som mulig. 📸: Ole Petter Baugerød Stokke
Det er ingenting spesielt med selve dartskivene på Oche, heller ikke pilene, da all beregning gjøres ut fra de tre kameraene. Men pilene bør være i én spesifikk farge for at Python-programmet skal lese dem så nøyaktig som mulig. 📸: Ole Petter Baugerød Stokke Vis mer

Mange små apper

I tillegg er det enda mer som foregår på en dartstasjon. For eksempel systemet for å be betjeningen om servering, og integrasjon med et booking-system som fortsatt er under arbeid.

«Om nettet går ned, skal man få spille videre.»

- Men det geniale i våre systemer er at hver app lever sitt eget liv, som en microservice som bare sender beskjeder til game-serveren i en kø. Da kan man blant annet enkelt oppdatere bare én av appene, forteller Farhad til kode24.

- Når alt er modulært, med blant annet med websockets og meldingskøer, trenger man egentlig ikke Docker eller Kubernetes, heller. Og vi har ikke masse API-er og ting og tang; om nettet går ned, skal man få spille videre, fortsetter han.

Her er ett av kameraene som fanger opp dartskivene på Oche. I framtida håper Shako Farhad å skrive om løsningen til noe mer intelligent, som kanskje vil gjøre tre kameraer overflødig. 📸: Ole Petter Baugerød Stokke
Her er ett av kameraene som fanger opp dartskivene på Oche. I framtida håper Shako Farhad å skrive om løsningen til noe mer intelligent, som kanskje vil gjøre tre kameraer overflødig. 📸: Ole Petter Baugerød Stokke Vis mer

Funksjonelt programmert

Det er ikke tilfeldig at darten på Oche programmeres i Clojure og ClojureScript, for det er ingen hemmelighet av utviklerne hos Kodermaker, som lagde løsningene, elsker funksjonell programmering.

Og etter at Farhad tok over systemene, har han forelska seg, han også.

- Jeg hadde aldri vært borti det før jeg begynte her. Før jobba jeg bare med Python, C++, Java og andre objektorienterte språk. Men funksjonell programmering er mye bedre! gliser CTO-en.

- Jeg falt skikkelig for det, og har blitt veldig glad i både Clojure og ClojureScript. Det blir vanskelig å gå tilbake til andre språk, nå.

Både Lovisa Hillberg og Shako Farhad har vært med på testingen som trengs for å kalibrere Python-løsningen som leser av pilene. Med Excell-skjemaer noteres de reelle resultatene ned sammen med hva løsningen leser, for å hele tida prøve å gjøre den enda mer treffsikker. 📸: Ole Petter Baugerød Stokke
Både Lovisa Hillberg og Shako Farhad har vært med på testingen som trengs for å kalibrere Python-løsningen som leser av pilene. Med Excell-skjemaer noteres de reelle resultatene ned sammen med hva løsningen leser, for å hele tida prøve å gjøre den enda mer treffsikker. 📸: Ole Petter Baugerød Stokke Vis mer

Oppdatert via SSH

Selv om hver stasjon skal fungere uten internett, kan de selvfølgelig koble seg på. Blant annet for å bli oppdatert. Men her er det heller ingen svart magi involvert.

«Man trenger ikke å finne opp kruttet på nytt.»

- Man trenger ikke å finne opp kruttet på nytt, som Farhad sier.

Hver gang dartstasjonene starter opp pinger de Farhads server, og får eventuelle oppdateringer gjennom SSH, AutoSSH og reverse SSH.

- Alle maskinene, uansett hvor i verden de står, pinger oss her i Norge, sier CTO-en.

Apropos: Dartstasjonene Bulls Eye Club selger til både norske og utenlandske pubber lages faktisk her i Norge, blant annet av Treverkstedet.

Shako Farhad skal snart få seg noen faste kolleger, som skal hjelpe Bulls Eye Club med å ekspandere både Oche-klubbene og dartstasjonene og kanskje helt andre spill i framtida. 📸: Ole Petter Baugerød Stokke
Shako Farhad skal snart få seg noen faste kolleger, som skal hjelpe Bulls Eye Club med å ekspandere både Oche-klubbene og dartstasjonene og kanskje helt andre spill i framtida. 📸: Ole Petter Baugerød Stokke Vis mer

Vanskeligst med tid

Alt i alt bruker altså Oche sine systemer velkjent teknologi, på nye måter.

Og Kodemakers Python-løsning for å lese av pilkastene kjører jevnt og trutt, selv om Farhad drømmer om å snart bytte den ut med deep learning - som kanskje kunne gjort det unødvendig med tre kameraer.

«Jeg drømmer ikke om bugs.»

- Så hva er det vanskeligste ved å utvikle disse systemene?

- Å styre forventningene fra ledelsen. Forretningene spurter videre, vi skal ekspandere, vi skal selge maskiner, vi skal ha et eget bookingsystem - men hva kan jeg få tid til? humrer Farhad.

- Jeg synes ikke selve programmeringen er så vanskelig, jeg får til det meste med Clojure og ClojureScript, det er ikke så mye hodebry med det. Så jeg drømmer ikke om bugs - jeg drømmer mer om det jeg ikke får tid til.