- 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".
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.
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.
React, Python og Clojure
Siden åpningen har Oches dartskiver mottatt rundt 6 millioner piler, fra over 105.600 spillere.
Sa opp jobben for å lage IoT-byggesett
- Hvorfor må maskinvare være så vanskelig?
Her er kortversjonen av hva som foregår bak det mørke treverket på dartstasjonene:
- 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.
- 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.
- 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.
- 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.
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.
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.
Hva er funksjonell programmering? 🤔
To norske eksperter forklarer.
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 så 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å.
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.
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.
- Derfor lager vi Folq med Elm og Haskell
- Tjenesten krever en stabil backend, og en frontend som kan tilpasses kontinuerlig.