: oude en nieuwe versie

Oude fitbit versie
Nieuwe Google fitbit versie

Global Data :

Geschiedenis

(het examen volgt later)
In april 2017 kocht ik mijn eerste activiteitstracker, de Fitbit Charge 2, aan 240 euro ongeveer. De volgende was een Charge 3 in mei 2020 en later nog de Charge 4 vanaf oktober 2023. Deze draag die ik nu nog.

We zijn nu augustus 2024. In totaal draag ik een fitbit dus al ongeveer 7.5 jaar of 89 maanden. Daar betaalde ik voor de drie stuks 440 euro samengeteld. Dat is ongeveer 5 euro per maand.

Aanvankelijk checkte ik de gegevens vooral via de fitbit-app. Maar daar was het omslachtig werken en eigenlijk bijna niet mogelijk om een overzicht te krijgen. Eventuele evoluties detecteren mocht je vergeten. Daarom maakte ik al vlug een eerste eigen webpagina, waarin met de data die fitbit op hun site aanbod en te downloaden waren, een overzicht met grafiekjes getoond werd.
Ik was niet in alles geinteresseerd. Je kon met de app bijvoorbeeld ook je voeding en drank registreren, de evolutie van je gewicht... Maar mij was het enkel te doen om de hartslag, activiteit en slaap gegevens.

Op de eerste dag van elke nieuwe maand moest ik even naar de download pagina van fitbit surfen en daar het csv-bestand voor de laatste maand selecteren. Zo'n bestand was tussen 5 en 8 kB groot. Dat moest dan even door mijn web-programma gesluisd worden. Veel werk was dat allemaal niet. De 1ste van de maand deed ik dat ook met mijn wc-log en mijn bankgegevens. In totaal was ik daar hoogstens een half uur mee bezig, afhankelijk van hoeveel bankverrichtingen er te controleren vielen. Het fitbit aandeel in het geheel bedroeg misschien 5 minuten. Allemaal rap gebeurd en weinig moeite voor wat je terugkrijgt.

In 2023 nam Google Fitbit over. Eerst lieten ze alles zoals het was. Maar geleidelijk voerden ze eigenwijze wijzigingen door, die niet altijd in goede aarde vielen. Tot ze op een bepaald moment zelfs die download-pagina verwijderden. Ik kon niet meer aan mijn eigen maandelijkse data. Alom veel protest, ook van mij, maar Google hield voet bij stuk. Wat later kon je dan toch data downloaden via Google TakeOut.
Dat is een systeem waar alle data die Google op een of andere manier over jou verzameld, op te vragen zijn. Toen ik dat een eerste maal downloade en zag dat het over meer dan 2 Giga aan gegevens ging, gaf ik op. Na er wat in gezocht te hebben, gooide ik het weer weg en dacht definitief afscheid te nemen van Fitbit al was het maar puur uit protest.
Ik kocht op 30 september 2023 een Xiaomi Mi Band 7 voor 42 euro. Dat deed hetzelfde (leek het) maar voor minder geld.

Tot op vandaag draag ik beide. Eerst was dat zogezegd tijdelijk. Om te kunnen vergelijken... Maar de resultaten zijn zo anders. De één is beter in dit, de ander is beter in dit. Dus bleef ik beide dragen. Uiteindelijk is de Fitbit wel veel beter.

Gegevens downloaden kon ik niet (meer), bij beide. Tenzij ik vooralsnog met die Google TakeOut aan de slag ging...

Er waren hitte dagen op komst, waarbij ik me weer zou moeten opsluiten in mijn living, wilde ik van mijn airco kunnen genieten en wat kon ik dan tijdens 'de opsluiting' doen? En ja, zo dook ik dan toch nog eens in die TakeOut gegevens. Dat was vanaf de 19de juli 2024. Ik schrijf dit nu op 18 augustus, ongeveer een maand later. Het was veel zoekwerk. Er zijn resultaten. Maar veel is nog niet helemaal duidelijk.
Als je bijvoorbeeld de grafieken voor eenzelfde periode in de oude en de nieuwe versie gaat vergelijken, zie je veel kleine verschillen en enkele grote.
Stel bijvoorbeeld: de oude en de nieuwe voor de langste periode waarover ze beiden beschikken (bij de oude versie stopt alles op 19-07-2023). Open deze hyperlinks in elk een Tab van je browser en switch dan tussen de twee, met alle andere instellingen telkens gelijk. Dan zie je zowat overal kleine verschillen. Maar bij "Hartslag actief" zie je voor de laatste periode, vanaf oktober 2022, grote verschillen.
De kleine verschillen zouden aan het feit kunnen liggen dat de csv van fitbit gemaakt werden via een andere computertaal(python?) dan mijn javascript die lichtjes anders getallen afronden. Een mogelijkheid. Maar niet echt overtuigend. Misschien verwerk ik de data toch iets anders? Die grote verschillen moet ik nog beter onderzoeken en daarover heb ik op dit moment nog geen enkel idee van, waaraan het zou kunnen liggen.

Google TakeOut

Je moet je data eerst aanvragen. Daarna krijg je een mail, van als de data klaar staan om downgeload te worden. Daar krijg je maar beperkte tijd voor. Ben je te laat, dan moet je ze opnieuw aanvragen. Dat gebeurde bij mij de eerste keer. Hun mail, waar ik ongeduldig op zat te wachten, bleek enkele dagen later in de ongewenste-mail-map terecht gekomen te zijn. Zo kan je lang wachten. Dat begon dus al goed.
Ik had het nochtans al eens eerder gedaan. Maar blijkbaar vond mijn mailserver er nu iets niet okay aan. De te downloaden files waren twee gezipte bestanden. Uitgepakt, tussen 2 en 3 Gigabyte. Na wat zoeken bleek de Google Export Data map deze te zijn waar het interessantste te vinden was. En zelfs in die map zat er nog van alles waar ik niks mee kon doen. Eens dat allemaal uitgezuiverd, bleef er nog 1,7 Gigabyte over die uitgepluisd en onderzocht moesten worden.
Ter vergelijking: de maandelijkse csv bestanden waren dus tussen 5 en 8 kB groot.
Dat geeft 5 x 89 maanden = 455 kB, of 8 * 89 = 712 kB. Dus sowieso nog geen megabyte.

View

De eerste stap bestond uit het exploreren van de data. Dat is de webpagina 'View' geworden. De oude csv-data waren mooi samen gebundeld, dag per dag en ik haalde ze op per maand, waardoor ik één csv-bestand had per maand. Wat Google levert zijn misschien de oorspronkelijke data waaruit fitbit die csv destilleerde. Maar dat is allesbehalve mooi opgedeeld en afgerond op gehelen. Een gegevensbestand kan halverwege een dag beginnen of eindigen. Om dan verder te gaan in het volgende. Maanden, jaren... Houdt men geen rekening mee. Soms ontbreken er gegevens. Als programmeur zou je het moeten weten, maar omdat ik daar specifiek nog niet mee te maken kreeg, dacht ik er niet aan. Namelijk het feit dat je ook nog eens rekening moet houden met het feit dat er één keer in het jaar een dag voorkomt met 25 uren en een dag met 23 uren, wanneer het uur verzet wordt. Het was zwoegen om routines te maken die met alles rekening houden en nog ben ik niet zeker of het nu allemaal juist geanalyseerd en gepresenteerd wordt in die View-pagina. Maar bruikbaar was het zeker genoeg om dan met de volgende stap te kunnen beginnen.

Convert

De tweede stap was: uit de data gelijkaardige csv-bestanden destilleren zoals vroeger, zodat ik het oude programma zou kunnen hergebruiken. Dan hoefde ik het wiel niet opnieuw uit te vinden. Ook al beschouw ik dat oude programma van mij nu nogal primitief. Intussen programmeer ik al een stuk beter.
Dat is de webpagina 'Convert' geworden.

Wat voor mij nieuw was, was het veelvuldig gebruik maken van asynchroon programmeren (in tegenstelling tot sequentieel of synchroon). Dat vraagt een andere manier van denken. In het begin ideaal om je kluts kwijt te geraken. Maar er was geen ontsnappen aan. Ik was nog eerst gestart in Visual Basic, omdat je daar tenminste een DoEvents() functie hebt, waarbij je bijvoorbeeld de voortgang van een proces kan weergeven. Er moeten 6000+ bestanden verwerkt worden. Je wil wel weten hoe ver je daarmee al zit, hoelang je nog zal moeten wachten op resultaat. Maar helaas, in VB waren er dan weer andere dingen te kort die je in Javascript wel hebt. In VB zat ik voor een bepaald deel aan meer dan een uur verwerkingstijd. Je test dan wel op korte stukken. Maar eens je denkt klaar te zijn, moet het op het geheel gebeuren. En daar bleken dan weer uitzonderingen op te duiken waar ik geen rekening mee kon houden in die kortere stukken. Eigenlijk onmogelijk om vlot te werken zo. Dan ben ik toch maar terug gekeerd naar javescript, maar dan moest ik asynchroon leren werken, al was het maar om de progress of voortgang weer te geven. Voor hetzelfde waar VB meer dan een uur over deed, doet Javascript er enkele minuten over. Dat kan tellen.

Een probleem waar ik ook nog niet eerder mee te maken kreeg en verband houdt met dat asynchroon programmeren, is dat de browser afhaakt wegens het overschreiden van de limiet op de resources (bronnen). Het geheugen van de browser zelf, maar ook het geheugen van het communicatiesysteem waarmee je bestanden opvraagt, het netwerk.
Het kan gebeuren in de huidige versie dat je foutmeldingen krijgt en de conversie stopt, als je alle bestanden tegelijk wilt converteren. De enige manier om dat goed te krijgen, is zorgen dat je browser vers opgestart is en eventueel zelfs je pc. Je mag ervan uitgaan dat vele webpagina's geheugenlekken hebben. Je browser vers opstarten, zorgt ervoor dat je met een schone lei kunt beginnen.
Vers opstarten helpt altijd thuis, met xampp. Online is het Neostrada, mijn website provider d ie waarschijnlijk ook een rol speelt in hoe de dingen verlopen. Maar de browsers zelf speelt ook een rol.
Daarnet heb ik het online met verse browsers geprobeerd alle Heart-data te converteren. Dat is de grootste opdracht. Op dit moment gaat dat over 2x 2660 bestanden die opgevraagd moeten worden. In Chrome en MS Edge liep het fout. Firefox geraakte er helemaal door en ook in een kortere tijd dan zelfs hier bij mij thuis met xampp. De vraag is nu nog of dat toeval is of niet. Daarvoor zou ik het verschillende keren opnieuw op andere momenten moeten proberen. Maar mijn vermoeden is toch dat Firefox op het vlak van netwerk communicatie het beter doet dan de andere. Opvallend is ook altijd dat alles veel sneller gaat op mijn iPad, in Safari. Maar niet in deze test. Je ziet al meteen aan de teller dat alles onregelmatiger en trager loopt. Ook dat zou ik meerdere keren moeten testen om toeval uit te sluiten... Ah... Maar dat was geen eerlijke vergelijking. De iPad werkt met wifi en hier in de living niet op volle signaal dan nog. Eens dichterbij de bron, op vol ontvangst, ging het vlugger, zij het nog altijd onregelmatig in snelheid. Maar hij geraakte er wel volledig door. Zelden dat ik Safari kan complimenteren, maar samen met Firefox verdienen ze nu wel gelijk een compliment.
Het probleem met beperkte resources zou ik ook kunnen oplossen door verschillende kleinere csv-bestanden te maken ipv één grote. Dat zou er dan wel voor zorgen dat ik toch weer een programmaatje in elkaar zou moeten knutselen om die verschillende bestanden dan weer in SQLite binnen te smokkelen. Dat zat in de oude versie. Maar daar geraak ik niet aan uit. Het zou meer werk kosten om dat weer helemaal uit te pluizen, dan om het opnieuw te maken. Misschien moeten er nog wat hittegolven komen?

Day by day

Een derde stap was: kijken wat er nog met de rest van de data te doen viel. Dat is de webpagina 'Day by day' geworden.

Je ziet er hart, activiteit en slaap onder elkaar in een grafiek. Dat ziet er niet slecht uit. Maar ook hier zitten nog twijfels in. Al heb ik er echt wel goed op gezocht. Het lijkt niet anders te zijn dan weergegeven. Maar dan zitten daar toch rare dingen in. Dan zou je denken dat ik terwijl ik slaap, ga slaapwandelen of zo, of toch zeer hard beweeg waardoor de fitbit stappen begint te registreren. Raar. Voorlopig kan ik dat niet verklaren.

Deze pagina staat min of meer los van de rest. Omdat het vroeger niet bestond is er geen sprake van omzetten van 't een naar 't ander. Het vertrekt meteen van de gegevens zoals ze door Google geleverd worden.

csv naar sqlite

Het lijkt wel een heel gedoe zo. Eerst iets maken om de Google data naar csv om te toveren. Dan die csv doorsluizen naar een SQLite database... Tja. Dat heb je als je met erfenissen zit. Dingen uit het verleden die je wilt behouden.

Zolang ik een totale csv - ttz met alle beschikbare dagen van heel de fitbit periode - in één bestand aanmaakte, kon ik dat met de import functie van de DB browser van SQLite gemakkelijk overnemen.
Ik weet nu nog niet hoe Google TakeOut de volgende portie data zal aanleveren. Maar sowieso, is zo'n totale csv genereren, het langst durende én met het risico dat er daarbij over de limieten van de webbrowser of het netwerk gegaan wordt.
Offline met xampp gaat alles nog redelijk vlot en werkt ook echt alles. Maar op het internet (Neostrada) is het trager en werkt zelfs niet alles... In die zin... Vroeg of laat moest er nog een programmaatje komen waarmee de csv's in een SQLite database gestoken kunnen worden, teneinde de nieuwe versie van mijn oude fitbit-pagina nog verder te kunnen gebruiken. Daartoe dient deze "csv naar sqlite" - pagina. Zoals ik al schreef, offline met xampp werkt alles. Online niet. Online zou je in principe elke csv apart moeten importen om de klus te klaren. Op zich niet zo erg. Dat is nu ook niet zo veel werk. Maar die import doe ik toch thuis offline waarne ik die nieuwe db upload naar mijn site. Die pagina staat online..., opdat je er naar zou kunnen kijken en er mee spelen. Dat mag, want je kan niks verkeerd doen... Ook dit is weer een stuk waar ik veel bijgeleerd heb. Het aantal basis routines die ik ook elders kan gebruiken, groeit zo wel.

En verder...

Ik ben benieuwd wat de volgende TakeOut zal opleveren. Maandelijks kan je dat niet aanvragen. Het is beperkt tot halfjaarlijks. Dus moet ik nu nog een tijd geduld uitoefenen. Afhankelijk van hoe dat eruit zal zien, zal ik weten of er hier nog veel verder aan gewerkt dient te worden, of dat het nu min of meer volstaat.