Ett hobby-projekt för att testa kotlin
Bakgrund
Jag är agnostisk när det gäller programmeringsspråk och paradigm (även om jag har vissa åsikter precis som de flesta andra) och brukar fundera på olika projekt för att testa språk eller verktyg. Jag börjar precis att kolla på Kotlin (kotlin enligt wikipedia) och tänker att det finns öppna API:er och öppna data att göra testskott kring.
Jag har till vardags erfarenhet av gradle och eftersom jag genomför det här projektet sommaren 2026 känns det rimligt att bygga med versioner som är aktuella idag, vilket innebär gradle 9.6x, java 25 och kotlin 2.3. x.
Initialt tänker jag börja med en konsol-applikation med ett enkelt tui/cli. Jag har ett par uppsättningar data som jag är intresserad av så jag tänkte lägga till en ServiceClass för respektive källa och lägga till enkla menyval för att testa. Jag själv använder Linux och Windows, så vid någon tidpunkt lägger jag kanske till något mer utökat användargränssnitt. Även om jag initialt bara tror mig behöva en viss del av svaren jag får via HTTP parsar jag nog ut det mesta för eventuella framtida bruk. Jag har en liten enkel implementation av settings där jag sparar vissa saker i filen ’settings.json’ – ifall man vill porta till smartphones behöver man hantera det. Några av nedanstående datakällor kan dra nytta av att känna till användarens position (till exempel för väder och vilka flygplan man kan se) så därför sparar jag en defaultposition. För vissa http-requests är det artigt att skicka med userAgent så det borde jag göra konfigurerbart så att någon som eventuellt forkar koden inte ’kör som jag’.
Eftersom jag tänker lägga upp koden på github under BSD 3 licens så kan hugade spekulanter porta till Mac eller annat. Ifall man skulle vilja porta till Android eller Iphone finns saker att justera. Källkoden finns på open-data-scavenger-kt.
1: Open Street Map
Via openstreetmap kan man skaffa koordinater på jordens yta från platsens namn. Via ett enkelt HTTP-request får man json som man kan tolka. Man får namn, longitud och latitud och en del annat, och jag låter användaren efterfråga ett eller fler som kan användas som input för exempelvis smhi. Jag låter GeocodingService göra den relevanta funktionaliteten.
2: Open Sky Network
Via opensky-network kan man se vilka flygplan som finns inom området kring en koordinat, så i mitt request begär jag en rektangel kring användarens valda position. Jag presenterar en lista som jag kompletterar med en länk till globe.adsbexchange.com där man kan se mer om flighten. Min kod för den relevanta funktionaliteten finns i FlightService.
Man kan läsa om deras Rest API.
Det barometriska mysteriet på Arlanda
En aha-upplevelse: Under utvecklingen dök ett märkligt fenomen upp. Ett Norwegian-plan som stod helt stilla på Arlanda rapporterade en höjd på 15 meter. Hur kan ett parkerat flygplan sväva 15 meter upp i luften med noll i hastighet?
Svaret visade sig ligga i hur flygplan mäter höjd. ADS-B-transpondrar sänder ut en barometrisk höjd baserad på ett internationellt standardtryck (1013,25 hPa) för att plan i luften ska kunna separeras säkert. Men Arlanda ligger 42 meter över havet. Genom att ta hänsyn till det lokala meteorologiska högtrycket (hämtat via SMHI:s API) och räkna baklänges med tryckskillnaden (där 1 hPa motsvarar cirka 8,32 meter), landade kalkylen exakt på de 15 metrarna. Mysteriet var löst: planet stod stadigt på asfalten, men barometern reagerade på dagens vackra högtrycksväder.
3: SMHI och väderprognos
Via SMHI kan man se en prognos för en given postion. Jag hämtar data för de närmaste 120 timmarna och hanterar relevant funktionalitet i WeatherService. Dels visar jag upp de närmaste timmarnas prognos, och dels kollar jag på vissa attribut för att avgöra vilka tidpunkter som är bäst för att titta på himlen.
4: Deep Space Network
Via Nasas Deep Space Network kan man få en ögonblicksbild av vilka rymdsonder som kommunicerar med jorden för tillfället. DeepSpaceNetworkService innehåller funktionalitet. Mitt första intryck var att den xml som de presenterar var lite otydlig och bloated och upprepade sig, men efter att ha kollat på den ett tag fick jag en förnyad respekt. Den är tillräckligt uttrycksfull för att kunna informera om relevanta fall. Jag blev sugen att presentera informationen jag hämtar på ett lite mer intressant sätt än jag först tänkte – men hittills slänger jag bara ut det relativt rått.
5: Magnetism och Kosmisk strålning
I allmänhet när man pratar om nordpolen så menar man den geografiska (som definitionsmässigt ligger på nordpolen, med andra ord en plats på Arktis). Men eftersom jag är intresserad av rymdväder och eventuellt norrsken så behöver man tänka även på den magnetiska nordpolen och den har jag vetat sedan länge att den är skild från den geografiska. Jag har lite vagt tänkt att ’den ligger i närheten av Grönland’. Men när jag började nysta i saken insåg jag att det finns två begrepp att tänka på i det här sammanhanget: dels den magnetiska nordpolen (dip pole, position ca 86° N och 150° E enligt NOAA/NEI) och dels geomagnetiska polen (dipole model, position ca 80.5° N och 72.5° W enligt WDC). Det visar sig att den första rör sig snabbare än den andra, och att det för norrsken är den andra som är intressant. Det går att hitta position för båda dessa, men för den som är relevant kan man betrakta som ’nästan konstant’. Dess positioner publiceras ungefär vart femte år.
Kp-index är ett genomsnittligt värde över tre timmar hos ett antal mätstationer på jorden som indikerar egenskaper hos jordens magnetfält och kan bland annat ses som en indikation när chansen till norrsken ökar. Kp-index är ett logaritmiskt mått medan running alpha är linjärt. Och antalet mätstationer kan variera. Din position i förhållande till den geomagnetiska polen avgör vid vilken gräns hos Kp-index dina chanser för norrsken är relevant.
Det finns några sonder som ligger vid Lagrangepunkt 1 (som till exempel ACE och DSCOVR) ca 1 500 000 km från jorden i riktning mot solen och mäter solväder. Den informationen finns också tillgänglig publikt och presenteras minutvis. Av den informationen är det tre egenskaper som är mest intressanta för eventuellt norrsken: Bz (nT i nordsydlig riktning) och den behöver vara negativ (riktad söderut) för att vara intressant, hastighet i riktning mot jorden (som behöver vara minst 400km/h för att av intresse) och partikeldensitet (behöver vara minst 4 partiklar per kubikcentimeter).
För att vara tydlig: Ifall Bz inte är sydlig är inte de andra lika intressanta! Man skulle kunna ha ett Kp-index som verkar lockande men en nordlig Bz.
6: Inspiration
Ifall man tycker att rymdväder är intressant kan man kolla på spaceweather.com.
open-data-geolocation-kt
open-data-weather-kt