- Jeg holder på med extreme early retirement, google it!

40 år gamle Nicolaas vil pensjonere seg, for å drive med hobbyprosjekter på fulltid. Utviklingsmiljøet Turbo Rascal Syntax Error for 8- og 16-bitsmaskiner er første steg.

Spillet Rogue Burger One med full kildekode følger med TRSE-miljøet. 📸: Jørgen Jacobsen / TRSE
Spillet Rogue Burger One med full kildekode følger med TRSE-miljøet. 📸: Jørgen Jacobsen / TRSE Vis mer

Se for deg at du sitter med en doktorgrad i astrofysikk, og jobber som forsker på Norges mest prestisjetunge universitet, UiO.

Men alt du egentlig vil er å dra hjem og fikle med en gammel Commodore 64.

Da er du ikke så langt unna livet til 40 år gamle Nicolaas Groenenboom, bosatt på Bjølsen i Oslo. Planen hans er nemlig å pensjonere seg så tidlig som mulig, så han kan drive med hobbyprosjekter.

TRSE, kort for Turbo Rascal Syntax Error, hans selvkomponerte programmeringsspråk, kompilator og IDE for å lage spill, demoer og programmer til 8- og 16-bit-maskiner, er første steg.

Nicolaas forteller at han først lært å kode da han var rundt 5-6-7 år gammel. 📸: Privat
Nicolaas forteller at han først lært å kode da han var rundt 5-6-7 år gammel. 📸: Privat Vis mer

#1. Hva har du bygd, og hvorfor?

Da jeg var 5-6-7 år gammel, hadde jeg tilgang til en BBC Micro hjemme, og senere en Commodore 64. Ettersom jeg ønsket å spille dataspill, som kostet skjorta den gangen, kjøpte pappa en bok til meg som het "100 games for the BBC Micro".

Denne boken inneholdt BASIC-kildekode til 100 dataspill, og slik lærte jeg meg å programmere.

Senere byttet jeg over til 16-bit PC, og lærte meg språket assembler, grafikkprogrammering, Turbo Pascal og C/C++. Det var på dette tidspunktet, rundt 1994, at jeg gikk helt inn i demoscenen, hvor jeg var aktiv frem til 1999.

Spol frem til 2018, hvor jeg plutselig innså at jeg aldri egentlig hadde forstått hvordan Commodore 64-en fungerte, fordi jeg var alt for ung. Så, i Februar 2018 - på en særdeles hyggelig hyttetur - bestemte jeg meg tilfeldigvis for å sette meg ned og endelig lære meg 6502-assembler, og endte opp med å lage et lite program for Commodore 64.

Utvikling i assembler på C64 viste seg å være utrolig ineffektivt, og dørgende repetitivt, at jeg rett og slett heller lagde et program i C++ som produserte små "assembler snippets" for meg. For eksempel for å tømme skjermen, eller flytte sprites.

«Personlig mener jeg en god programmerer er en lat programmerer.»

Personlig mener jeg en god programmerer er en lat programmerer - en som ønsker å automatisere så mye som overhodet mulig! Nå hadde jeg muligheten til å skrive ting som "ClearScreen(farge)", og få spyttet ut fungerende maskinkode!

Men hva med parametere? Hva hvis jeg ønsker å sende med avanserte parametre som "2*farge +1"?

Dermed utviklet dette programmet, i løpet av et par måneder, seg til å bli en ekte kompilator som produserer effektivt 8-bit assembler-kode. Samtidig begynte jeg å lage en integrert teksteditor, minneanalysator, 8-bit bildebehandlingsprogram, en ray-tracer og en haug med andre nyttige ting.

I august 2018 fikk jeg ut mitt første dataspill, laget helt og holdent i mitt eget programmeringsspråk, "Rogue Burger One" (se itch.io).

Selv om Commodore 64-maskinen nærmer seg 40-årsjubileum har den fortsatt et aktivt miljø. Her fra spillmessen Gamescon i Køln. 📸: Scanpix / Wolfgang Rattay
Selv om Commodore 64-maskinen nærmer seg 40-årsjubileum har den fortsatt et aktivt miljø. Her fra spillmessen Gamescon i Køln. 📸: Scanpix / Wolfgang Rattay Vis mer

Jeg begynte deretter så smått å få et par brukere, først C64-folk, men etter hvert folk som var interesserte i forskjellige eldre systemer som VIC-20, PLUS/4, Amiga 500 og NES.

«TRSE støtter en drøss med 8-bit datamaskiner, i tillegg til 16-bit Amiga.»

Flere brukere betød mer bug-fiksing, nyttigere funksjoner, hjelp, bedre dokumentasjon - og viktigst av alt, inspirasjon! Jeg måtte raskt lære meg hvordan disse relativt ukjente eldgamle datasystemene fungerte, som igjen helte bensin på bålet for inspirasjonen til å lage et skikkelig bra produkt.

I dag har TRSE et par tusen nedlastinger, ca 200 aktive brukere og 20 “tunge” brukere. TRSE støtter en drøss med 8-bit datamaskiner, i tillegg til 16-bit Amiga.

Vi har et aktivt brukermiljø på Facebook & Slack, og jeg blir nedlesset i bugrapporter, forslag til forbedringer - og meldinger fra folk som har spørsmål og feedback. Jeg forsøker å ha relativt korte release-sykler, med ny offisiell release hver 3 måned. Men slipper også mindre “snapshots” når jeg har implementert noe nytt.

TRSE lar deg bygge spill, demoer og programmer til gamle 8- og 16-bitdatamaskiner. Vis mer Vis mer

Jeg prøver å prioritere implementering og fiksing av ting som folk flest er interessert i - men av og til blir jeg også bare nødt til å dukke ned i mine egne drømmeprosjekter!

Heldigvis har jeg fått et par nye utviklere som har lært seg en del av kildekoden, og har hjulpet med meg å implementere support for enkelte maskiner, og ikke minst laget tutorials og skrevet dokumentasjon. Jo flere interesserte som er med på prosjektet, jo bedre!

«Noen uker implementerer jeg enorme mengder med nye ting, får pushet ut nye versjoner og jeg kan fremstå som en slags superkoder.»

#2. Hvordan henger prosjektet sammen?

Prosjektet er skrevet i C++, og buker Qt som underliggende bibliotek for GUI og containerklasser og så videre.

TRSE er uavhengig av operativsystem, og kan hentes ned og kompileres på alle plattformer som Qt støtter, og som har en C++-kompilator. Prosjektet hostes på Github, og alle forespørseler, feilmeldinger og QA foregår der.

#4. Hva har vært den største utfordringen hittil?

Her er det nok av ting å ta tak i!

  1. Skaleringsproblemet: Det var greit nok å skrive en liten kompilator for eget bruk. Hvem trenger vel detaljerte hjelpetekster og gode feilmeldinger når man kun har 1 bruker? Men, jo flere brukere man får, jo flere henvendelser må man regne med å motta.

    Nye bugs oppdages hele tiden, med feilmeldinger og kræsj som ikke burde eksistert. Siste versjonen jeg fikk ut - versjon 0.08 som ble sluppet i oktober - er egentlig første gang jeg er skikkelig fornøyd med produktet. Jeg fikk fikset opp i alle tutorials, hjelpetekst, bugfiksing og optimaliseringer. Endelig kan jeg være 100 prosent stolt av produktet mitt!

  2. GUI: Jeg er ingen GUI-mann, og mye av TRSE har endret seg straks jeg fikk nye brukere som ikke forstod layouten. Her var det nok et - hva skal man si -stort forbedringpotensiale! Men det har blitt veldig mye bedre nå.
  3. Min egen volatilitet: noen uker implementerer jeg enorme mengder med nye ting, får pushet ut nye versjoner og jeg kan fremstå som en slags superkoder. Andre uker faller jeg over i andre prosjekter - som at jeg faktisk benytter meg av TRSE til å utvikle demoer og lignende. Av og til må jeg bare spille data i et par uker i strekk - Borderlands 3 og Path Of Exile, for å være mer nøyaktig.

  4. Koden må hele tiden pivoteres: Det vil si at jeg må omstrukturere klassehierarkiet på grunn av nye features. For eksempel støttet jeg kun Commodore 64-en i begynnelsen, og assembleren var alt for nært knyttet til parseren og selve systemet.

    Ettersom jeg har lagt til generisk support for flere prosessortyper med varierende systemer, har jeg måtte bruke mye tid og lært mye av å omstrukturere!

    Aldri vær redd for å endre på koden, fjerne gammel kode, omstrukturere! Jeg velger å se på kode som en organisk ting, noe som har en fødsel, levetid og død - og kun ved å være i stand til å endre seg, kan et prosjekt bli bedre & ha et langt liv.

Slik ser det ut når du arbeider i TRSE-editoren. 📸: Privat
Slik ser det ut når du arbeider i TRSE-editoren. 📸: Privat Vis mer

#5. Hva er du mest stolt av i forbindelse med prosjektet?

At jeg har fått en god brukerbase på Facebook, Slack og Github, og får mye positiv feedback!

Her om dagen var det en fyr som skrev til meg at TRSE er som om barndomsdrømmen hans hadde gått i oppfyllelse, og nå lager han et fantastisk Zelda-aktig eventyrspill.

VIC Nibbler er en versjon av Snake til datamaskinen VIC-20, forløperen til Commodore 64.Vis mer Vis mer

Ikke minst når folk faktisk gir ut ting, som VIC-20 spillet "Vic Nibbler". Det spillet er skrevet i programmeringsspråket mitt.

Av og til tror jeg ikke det jeg har laget kan være helt ekte, så når andre folk også bruker det til å lage noe nytt, blir jeg ofte litt paff. I positiv forstand.

Faktisk er det en liste over demoer og spill som er laget og utgitt her https://lemonspawn.com/gallery_/.

«Dette er ikke egentlig en hobby, men en livsstil.»

#7. Hva er fordelene med å ha et hobbyprosjekt?

Vanskelig å kalle dette et hobbyprosjekt, egentlig.

Jeg har programmert siden jeg var 5-6 år gammel, og er nå 40 år. Hvis jeg ikke har et programmeringsprosjekt, så kjeder jeg meg.

I tillegg har jeg, etter en 20 års pause, gått tilbake til demoscenen - et fantastisk miljø hvor alt handler om å lage kule sanntidsting på alskens datamaskiner, nye og gamle.

Dette er ikke egentlig en hobby, men en livsstil.

Jeg holder også på med det som kalles "extreme early retirement" - Google it! - og sparer storparten av lønningen for å kunne pensjonere meg så tidlig som overhodet mulig. Helst innen 5-6 år.

Hobbyprosjektene er nemlig noe jeg kunne tenke meg å drive med på fulltid! Ulempen er at det nok er vanskelig å leve av dette, med mindre man forsøker å satse på donasjoner fra Patreon eller lignende.

Dette ønsker jeg å unngå så mye som overhodet mulig - derav spareoperasjonen. Penger betyr nemlig kun én ting for meg - frihet til å kunne gjøre det jeg selv ønsker å holde på med, uten å måtte bekymre meg for en arbeidsgiver, sjef, kunder, foreldre, NAV og så videre.

Slik ser det ut når Nicolaas koder TRSE i QT Creator. 📸: Privat
Slik ser det ut når Nicolaas koder TRSE i QT Creator. 📸: Privat Vis mer

Selvsagt er det da visse "normale" ting man må være villig til å ofre. Som byliv, restaurantbesøk, ny iPhone, større leilighet, hus, bil, barn. Men, om man er sikker på hva man vil i livet - så er det ikke akkurat vanskelig å prioritere.

Når det kommer til fremtiden til TRSE, så har jeg aldri noen konkret roadmap.

Jeg bygger alltid ting fra bunnen opp, og forsøker å implementere ting som er nyttig - både for meg selv & ønsker fra brukere - når ting dukker opp, og alltid basert på ekte utviklingsprosjekter.

For eksempel ble store deler av TRSE utviklet samtidig som jeg lagde et dataspill for C64-en.

Nå i høst er planen å hive meg i gang med videreutvikling av Amiga 500-støtte. Først og fremst ved å lage en demo til demopartyet “Revision” i påsken 2020.

Amiga-serien av datamaskiner var enormt populære i Europa og Norge, og har fortsatt et aktivt miljø i 2019. Her spiller entusiaster spillet Bubble Bobble på en Amiga 1200 under Gamescon i Køln. 📸: Scanpix / Wolfgang Rattay.
Amiga-serien av datamaskiner var enormt populære i Europa og Norge, og har fortsatt et aktivt miljø i 2019. Her spiller entusiaster spillet Bubble Bobble på en Amiga 1200 under Gamescon i Køln. 📸: Scanpix / Wolfgang Rattay. Vis mer

Deretter regner jeg med å bryte ned de enkelte demoeffektene til innebygde tutorials, samtidig som jeg får optimalisert og standardisert koden, fikset bugs og så videre.

Og etter dette? Vel, her er noen smakebiter:

  • Bedre NES (Nintendo Entertainment System) support

  • Videreutvikle min egen “fake datamaskin” OK64 (se https://lemonspawn.com/ok64/)

  • Support for 16-bit DOS

  • Support for Z80 (Spectrum, Amstrad CPC)

  • Flere komplette tutorials & dokumentasjon