Fredag 23 Aug 2019
19.8.23 22:10

GPX parser

Har spenderat några timmar senaste dagarna med att utveckla en GPX/GPS parser, har ju börjat cykla en hel del & använder endel träningsrelaterade hemsidor för att logga min träning men vore ju roligare att ha allt samlat på min hemsida också, hade inget bättre för mig just nu heller så tänkte att detta kunde vara ett kul projekt När man använder träningsappar eller cykeldatorer som loggar GPS så kan man hämta ut en GPX fil som loggar 3 datapunkter (4:a om man är petig); latitud/longitud, m.ö.h & tidpunkt & utifrån detta kan man räkna ut nuvarande hastighet, medelhastighet, maxhastighet, distans, lutning, klättring osv osv. Min cykeldator loggar även endel extra metadata om dom är tillgängliga på rundan; temperatur, kadens, puls osv Så, detta var egentligen inget svårt projekt, "bara" att parsa alla datapunkter & spara resultatet & beräkna mellan varje datapunkt MEN problemet är att GPS data är inte så exakt som man tror, eller jo, i 99% av fallen så är det ganska exakt men ibland görs det ganska ordentliga felmätningar som sparas så använder man bara rådatan i sin parser så kan det snabbt bli ganska fel, tex så dyker det ibland upp GPS jitter eller drift som gör att 2 mätpunkter som har 1 sekunds mellanrum kan fluktuera i distans ganska rejält, speciellt när det är dålig GPS täckning, så om GPS:en tappar täckning helt så kanske mätpunkten är 100 meter bort & är då mätningarna med 1 sekunds mellanrum så motsvarar det en hastighet på 360km/h (mitt rekord är 28'700km/h) & riktigt så snabbt cyklar jag ju inte så dessa mätvärden måste identifieras & därefter kasseras Så efter man implementerat en parser som använder all rådata från GPS:en så måste man börja filtrera eller helt enkelt kasta bort datapunkter som har absurda värden, vissa scenarion är väldigt enkelt att identifiera men ibland dyker ett absurt scenario upp som ens filter för tillfället inte kan identifiera & så får man implementera det scenariot också & varje gång man tror man täckt in allt så laddar man upp en till GPX fil som man testar emot & så visar det sig att även den har ett absurt scenario som inte täckts Just nu gör jag bara jämförelse mellan nuvarande datapunkt & föregående datapunkt (eller upp till 5 punkter bakåt om algoritmen börjar identifiera en "klättring"), vilket är så man får fram distans, hastighet, lutning, höjdskillnad osv & oftast är detta tillräckligt för att hitta felmätningar & absurda scenarion MEN det finns utrymme att förbättra i framtiden när jag har lust, tex att göra beräkningarna på hela block, tex om man gör ett block som är 10 mätningar långt så är det lättare att hitta avvikande datapunkter. Vill man ta det ett steg längre så kan man expandera detta till överliggande block, kör man separata block så hittar man inte felmätningar mellan sista mätningarna i första blocket & första mätningarna i andra blocket så implementerar man överliggande block så kan man även hitta dessa fel. Men det är får bli ett projekt i framtiden, att jämföra 2 (5) mätpunkter är tillräckligt exakt för tillfället Så, algoritmen blir bara mer & mer avancerad för att kunna filtrera bort det mesta & bara spara dom datapunkterna som algoritmen anser vara korrekt. Så mer jobb än vad man först tror, att beräkna på rådatan var enkelt men väldigt missvisande så ja, det tog lite tid att hitta alla "fel", jämförde med Wahoos egna beräkningar, jämförde med Strava & kollade även på Lantmäteriets kartor för att se så att min algoritm stämmer så bra som möjligt & efter typ 20 iterationer så är Wahoo, Strava, Lantmäteriet & min parser inom några få % gentemot varandra, oftast under 1% när det gäller alla mätvärden (distans, klättring, tid, snitthastighet osv osv), eftersom jag såklart inte har tillgång till deras algoritmer så är det ju svårt att veta vad som skiljer oss emellan men våra värden är väldigt lika, skillnaden kan vara något så enkelt som avrundande värden, tex mina datapunkters beräkningar har en precision på float(6) medan dom andra kanske har en precision på 2 decimaler eller kanske bara beräknar på ints, vem vet, spelar inte så stor roll egentligen, allas värden är "fel" ändå I början testade jag bara GPX filer som producerats av min Wahoo Elemnt Bolt & fick mätvärden inom 1% av ovanstående men sen när jag laddade upp GPX filer som skapats av en iPhone så fick jag helt absurda mätvärden, GPS:er i telefoner är tydligen extremt värdelösa, antagligen för att vara så energisnåla som möjligt & dessutom har dom ganska dåliga antenner så GPS mottagningen är relativt dålig. Så när jag upptäckte det fick jag anpassa algoritmen för iPhone datan också så som sagt, algoritmen blir bara mer & mer avancerad för att täcka in alla scenarion. En GPS enhet är sjukt mycket mer exakt & har striktare uppdaterings tidpunkter, min cykeldator har även barometer för att mäta höjdmeter så ofta har en dedikerad GPS enhet fler sensorer för att få pålitligare data, speciellt i jämförelse med en smartphone Sen har tex Strava endel konstiga egenheter, min Bolt har också endel av dessa egenheter; tex så är deras threshold vid lutning/klättring ofta satt alldeles för låg så ofta när man cyklar på väldigt små lutningar så registreras det inte att man "klättar", det är ofta jag är ute & cyklar & det är uppenbart att jag cyklar uppför i en lutning på kanske 0.5% men dessa kastas bort av dom, ganska frustrerande, ibland kan man cykla jämte en väg, sen upp på en "påfart" & upp på en bro som är över den vägen man precis cyklade på, så säkerligen minst +6 höjdmeter men eftersom påfartens lutning var så låg så kastas dessa mätningar bort. Jag har dock valt att sätta min threshold lite lägre än vad Strava & Wahoo gör då jag anser att även om det lutar ganska lite så är det markant tyngre när man är ute & cyklar & därför tycker jag att den typen av klättring skall ingå i den totala klättringen. Det är ju inte så att min parser resulterar i mer klättring ändå då detta bara handlar om några få meter men ja...Ibland visar min totala klättring även mindre än dom andra, det beror helt på scenariot & vad man anser är "klättring": Så vad innebär "klättring" egentligen, använder man bara rådatan från GPS:en & lägger till höjdskillnaden i sin klättrings-"pool" så kommer man få alldeles för höga siffror, tex kan GPS:en mäta ett litet gupp som har en höjdskillnad på 0.2 meter, såpass exakt är den ibland, skall man ta med ett gupp? Visst, det är en höjdskillnad MEN man har ju egentligen inte använt någon energi för att ta sig över guppet, kommer man i 30km/h så kan man säkert rulla över en 4 meter hög kulle utan att använt någon nämnvärd extra energi så i min algoritm (troligen i Stravas & Wahoos också då dessa ger snarlika resultat) måste vissa kriterier uppnås för att anses som "klättring", så små gupp & små kullar sållas bort & istället tar jag bara med backar som man faktiskt måste trampa för att kunna ta sig uppför, först då läggs höjdmetrarna i klättrings-"poolen" Finns mycket mer att säga om detta projektet & hur alla våra plattformar hanterar GPS datan men redan nu är detta inlägget alldeles för långt så får ta en mer djupdykning om ämnet i framtiden På #cykling går det att se resultatet av projektet. Lade till "cykel" också som utrustning för träningen så jag kan se hur långt jag cyklat på respektive cykel. Har inte hunnit lägga in så många än, när detta skrivs har jag bara hunnit fram till mitten av 2017, ett år då jag inte cyklade så mycket, 2018 cyklade jag ännu mer så det är sjukt mycket som måste laddas upp, över 250 totalt så det kommer ta ett tag, aja, har lite att göra framöver
4'421 visningar #Programmering
Onsdag 14 Aug 2019
19.8.14 23:50

Hem bland regnbågar

Distans
12km
Höjdmeter
136m
Tid
35:37
Hastighet
19.96km/h
Puls
152bpm
11°
Workout map
Inte ofta man ser dubbla regnbågar så var ju tvungen att passa på att bränna av en massa foton
Onsdag 14 Aug 2019
19.8.14 19:29

Upp till stugan via skogen

Top 3
2
Distans
29km
Höjdmeter
372m
Tid
1:25:55
Hastighet
20.46km/h
Puls
156bpm
14°
Workout map
Måndag 12 Aug 2019
19.8.12 20:30

Ny SSD i iMac:en

iMac:en började kännas lite seg, tog typ dubbelt så lång tid att öppna appar som det gjorde för bara någon vecka sedan så det verkar som att HDD:n är påväg att starva av så det var dags att slänga ut det gamla härket & äntligen slänga in en SSD, har ju inte direkt haft någon anledning att göra det tidigare då iMac:en dom senaste 5-6 åren endast agerat server & prestandan har varit tillräckligt men nu när jag ändå skall byta så kan det lika gärna bli en SSD Blev en Intel D3-S4610, tänkte först köpa en med 1DWPD då det räcker för mina behov men kanske blir lite mer skrivningar framöver i några av mina framtida projekt så tillslut blev det som sagt en Intel D3-S4610 som har 3DWPD & crash protection Jag har ingen bracket för 3.5" till 2.5" så det fick bli ett par vibrationsdämpare som hade klister på ena sidan & sen ett par kabel"clips" som håller fast SSD:n i maskinen, inte den bästa lösningen men jag tror det fungerar Tyvärr; eftersom iMac:en är 10 år gammal så har den ju bara SATA2 så jag får ju bara ut ungefär halva prestandan från SSD:n men får jag klara mig med ett tag framöver. Det är ganska imponerande att maskinen fortfarande fungerar, den har i princip varit igång 24/7 i 10 år nu, har bytt HDD en gång tidigare men annars så. Men ja, det är nog snart dags att köpa en dedikerad server innan den kollapsar
Söndag 11 Aug 2019
19.8.11 20:30

En tur i skogen över Brandsmo kullen

Top 3
1
Distans
32km
Höjdmeter
342m
Tid
1:30:47
Hastighet
21.36km/h
Puls
160bpm
15°
Workout map
Var ute i lite lämpligare miljö jämfört med provkörningen häromdagen & här i skogen märks det tydligt hur mycket mer lättrullade dessa däcken är jämfört med förra jag hade på, speciellt vid acceleration vilket inte är så konstigt med tanke på hur mycket mindre massa man behöver sätta fart på, lägre profil & andra dubbar gör också underverk Var lite orolig över att Ikon däcken skulle ha lite för lågt grepp med tanke på dom taniga dubbarna men greppet räckte gott, tappade grepp i en riktigt brant grusbacke i 10ns men i övrigt fungerade däcken riktigt bra så dessa får sitta på hojen ett bra tag nu, har äntligen hittat den perfekta kombon för mig
Maxxis Ikon
Ardent hade mer än tillräckligt grepp, hade kanske t.om kunna gå på Ardent Race men affären hade inte dessa i lager så det fick ju bli vanliga Ardent men det är nog rätt skönt med lite högre profil på dubbarna för det har ju en tendens att bli ganska surt häromkring i skogarna så, japp
Maxxis Ardent
Fredag 9 Aug 2019
19.8.9 19:18

Shoppingrunda med syrran

Distans
13km
Höjdmeter
26m
Tid
42:31
Hastighet
17.64km/h
23°
Workout map
Torsdag 8 Aug 2019
19.8.8 19:05

Provkörning med nya däcken

Top 3
1
Distans
33km
Höjdmeter
193m
Tid
1:18:28
Hastighet
25.21km/h
Puls
160bpm
20°
Workout map
Sådär, blev att sticka ut en sväng & provköra i regnet, blev ett mellanting mellan fjolårets snabba å lätta Conti XC däck & tunga Maxxis trail däcken jag kört på hittills i år, Ikon+Ardent, inte lika snabba som Conti men betydligt snabbare än trail däcken, väldigt bekväma vilket är det jag var ute efter, 0.5 bar lägre tryck nästa runda så blir det perfekt 😄👍 Satte 5:e bästa tid ner för Bratteborg, 5 sekunder efter KOM så hade jag haft en högre (lägre) utväxling så hade jag nog tagit KOM, spann ur strax över 45km/h så en 34:a eller 36:a fram hade gjort susen, en 36:a kanske inte får plats iofs men en 34:a får jag nog byta till framöver, använder knappt 1-2:an ändå som det är nu så dom kanske blir användbara igen om jag skaffar större klinga fram, får se
Onsdag 7 Aug 2019
19.8.7 18:33

Nya däck igen

Jag har varit på jakt efter däck som passar mig i över 1 år nu & oavsett vilka andra märken jag testar så kommer jag alltid tillbaka till Maxxis då dom har dom köregenskaperna som jag gillar, enda nackdelen är att dom rullar snäppet sämre än tex Vittoria & Continental men äh, jag har ju kört XC på Minion DHF 2.6 & Rekon 2.6 i runt 1.5 bar så typ det mesta rullar bättre än den setupen Så eftersom jag gillar Maxxis; 2.6:or var lite överdrivet & 2.2" var lite för låg volym så fick bli ett mellanting idag, Maxxis Ardent EXO TL 2.4 fram & Maxxis Ikon 3C Maxx Speed EXO TL 2.35 bak
Maxxis Ardent
Maxxis Ikon
Så, jag kommer köra på dessa framöver nu & troligen in på sommaren 2020, är lite sugen på att testa nya Pirelli Scorpion däcken så dom kanske åker på en sväng under 2020 också, vi får se. Därefter får det nog bli Vittoria Barzo + Mezcal Ardent + Ikon lär ju inte vara lika snabba som XC däcken jag körde på förr; Conti Cross King + Race King men jag hoppas landa någonstans mittemellan Minion + Rekon & Conti däcken (skiljde upp till 5km/h i snitt mellan dom 2 konfigurationerna), så gör dom det är jag nöjd för då har jag nog hittat en lagom balans mellan komfort & hastighet Jag är ganska imponerad över livslängden på Maxxis Minion (och Rekon) däcken, har kört dom i över 120 mil nu & dom har inget nämnvärt slitage, jag skulle lätt ha förbrukat Schwalbe MM på ännu kortare distans så jag är positivt överraskad
Lördag 3 Aug 2019
19.8.3 15:42

Upp till stugan

Distans
10km
Höjdmeter
33m
Tid
27:23
Hastighet
22.92km/h
Puls
145bpm
22°
Workout map
Torsdag 1 Aug 2019
19.8.1 22:34

Ännu en burgare

Hade flera saker liggande i kylen som snart börjar bli för gamla så jag passade på att slänga på alltihop på burgaren, visade sig vara riktigt gött, tryffelmajonäsen & ädelosten är nog mina absoluta favoriter på hamburgare, passar riktigt bra 👍