Jespers hobbyprosjekt avslører mistenkelige båter: «Forbløffet over at ingen følger med»

Studenten Jesper Johnsen Loes MaritimAlarm.no holder et øye med skip som er i nærheten av gassrør og fiberkabler i Nordsjøen.

Finsk politi mistenker tankskipet Eagle S for å stå bak sabotasje på kommunikasjonskabler i Østersjøen i desember. 📸: NTB/AFP
Finsk politi mistenker tankskipet Eagle S for å stå bak sabotasje på kommunikasjonskabler i Østersjøen i desember. 📸: NTB/AFP Vis mer

– Jeg har lenge vært interessert i geopolitikk, og da det ble lekkasje på Nord Stream i 2022, skjønte jeg hvor skjør den maritime infrastrukturen er.

Det sier Jesper Johnsen Loe.

24-åringen er på tredje året i en bachelor i geografi på NTNU, og har nettopp lansert en nettside for å holde øye med russiske fartøy: MaritimAlarm.no

– Jeg var forbløffet over hvordan det var mulig at ingen fulgte med, da alle dataene tross alt burde vært tilgjengelig, sier Johnsen Loe.

Jesper Johnsen Loes hobbyprosjekt "MaritimAlarm" ble laget etter at geografi-studenten hadde fullført et introduksjonskurs i Python. 📸: Skjermbilde / privat
Jesper Johnsen Loes hobbyprosjekt "MaritimAlarm" ble laget etter at geografi-studenten hadde fullført et introduksjonskurs i Python. 📸: Skjermbilde / privat Vis mer
  • Som kjent mistenkes blant annet Russland for å drive med sabotasje av undersjøiske kabler med olje, gass eller fiber. Sist i jula, da fire fiberkabler i Østersjøen ble ødelagt.
  • På MaritimAlarm.no kan du se hvor alle russiske sivile skip befinner seg i sanntid, samt hvor olje-, gass- og fiberkabler går.
  • Hvis skipene for eksempel oppholder seg nær infrastruktur i over en time, eller slutter å sende posisjonsdata i over en time, kan det trigges alarmer.

Ettersom Johnsen Loe selv ikke er utvikler og ganske fersk i kodeverdenen, har han nå opensourcet prosjektet for å få hjelp av andre til å videreutvikle det.

Fikk bruk for geografi

Johnsen Loe forteller at han savnet en strukturert tilnærming til det han anså som "et delvis todimensjonalt geografi-problem".

– Med en god forståelse av geodata fra studiene lekte jeg med tanken om hvordan en slik løsning kunne fungere. Det var ikke før jeg tok et introduksjonskurs i Python at jeg skjønte at jeg kanskje kunne gjennomføre dette selv.

Han sier læringskurven har vært bratt, men at det passer han fint – og at faktisk det i seg selv har vært en stor motivasjon til å fortsette utviklingen.

«Det var ikke før jeg tok et introduksjonskurs i Python at jeg skjønte at jeg kanskje kunne gjennomføre dette selv.»

Løsningen er egentlig relativt enkel, ifølge Johnsen Loe:

  • Et Python-skript henter kontinuerlig AIS-data i JSON-format fra en av Barentswatch sine API-er.
  • Russiske skip filtreres ut ved hjelp av MMSI-numre, før den sender disse dataene videre til nettsiden.

Han forteller at han har hundrevis av GeoJSON-filer som inneholder vektordata fra diverse rør og kabler.

– Skipenes live-posisjon blir kontinuerlig sjekket opp mot posisjonen til disse, og man kan sette parametere for hva som skal utløse en alarm.

Måtte bytte API

– Hva har vært det vanskeligste?

– Det vanskeligste har definitivt vært å sette seg inn i en verden av AIS-data. Planen var opprinnelig å bruke Kystverkets API, som benytter seg av NMEA-meldinger, sier Johnsen Loe.

Disse meldingene må dekodes før de gir mening, så han forsøkte å lage et skript for dette.

– Det gikk mange timer med for å forstå NMEA-strukturen slik at skriptet kunne klare å hente ut i hvert fall landekode og posisjon. Med over 900 meldinger i minuttet, og ofte med fragmenterte meldinger, fikk jeg tweaket skriptet fra en suksessrate på 2 til 80 prosent.

Han var likevel ikke fornøyd med dette og byttet til Barentswatch sitt API. De henter også data fra Kystverket, så dataene er de samme, men de sender JSON-data i stedet.

– Dette var veldig mye enklere å jobbe med, til tross for at pakkene er noe større.

Kodekunnskap åpner dører!

– Du sier selv at du har begrensede kodekunnskaper, men koder likevel. Hvorfor?

– Jeg tenker at alle må starte et sted. Nå har jeg tatt grunnkurset i Python, og det ga meg en fin introduksjon. Aller viktigst ga det meg en hunger etter å lære mer på eget initiativ.

Geografistudenten forteller at han synes koding er gøy, men at det å kunne kode også er veldig nyttig når man arbeider med geodata og store datasett.

– Gjennom studiene har jeg brukt programmer som ArcGIS og QGIS, og erfart at dersom man har kodekunnskaper, åpner man en dør til utrolig mange funksjonaliteter og effektiviseringsmetoder.

«ChatGPT har definitivt vært en god venn og blitt brukt mye.»

I arbeidet med MaritimAlarm-prosjektet har han fått bruk for flere ulike programmeringsspråk og teknologier, som Python, JavaScript, PHP, CSS og HTML.

–ChatGPT har definitivt vært en god venn og blitt brukt mye. At en student med introduksjonskurs i Python gjennomfører dette prosjektet alene, hadde vært svært mye vanskeligere for bare noen år siden.

Opensourcer for å få hjelp

– Hva er grunnen til at du nå opensourcer prosjektet ditt?

– Det er egentlig et resultat av en Reddit-post jeg laget med hensikt å få litt tilbakemelding på tjenesten. Der var det flere som foreslo at jeg skulle dele det på GitHub, noe jeg i utgangspunktet ikke hadde tenkt over før.

– Jeg kom frem til at alle disse menneskene innehar utrolig mye kunnskap og gode ideer, som kan ta MaritimAlarm til nye høyder, samt være en super kilde til læring for meg selv.

– Noen har påpekt at løsningen viser bare russiske skip, mens enkelte av skipene som mistenkes for sabotasje har vært fra andre land – den såkalte russiske "skyggeflåten"?

– Problematikken rundt denne "skyggeflåten" er noe jeg har tenkt en del på, og er definitivt en sårbarhet i tjenesten. Takket være Reddit-innlegget jeg nevnte tidligere, fikk jeg tips om en database over skip som er innført sanksjoner mot i forbindelse med Ukraina-krigen. Listen inneholder nesten 600 skip, og de seiler under flagg fra hele verden.

Johnsen Loe sier han har planer om å lage et tekstdokument med MMSI-numrene til disse skipene, som Python-koden hans skal få lov til å iterere gjennom i tillegg til uthentingen av de russiske skipene.

– På denne måten vil forhåpentligvis alle skip med hensikt om å utføre sabotasje bli snappet opp av MaritimAlarm.

Du finner prosjektet på GitHub her.