Och “ny” databasserver

När jag var färdig med den nya webbservern, så installerade jag om den gamla och flyttade sen över mina databaser dit.

  • Raspberrypi 2
  • Debian 11
  • Nginx 1.18
  • PHP 7.4
  • Mariadb 10

En del problem var det, inte med databsflytten i sig, men med databasanropen. Det visade sig att det API som jag använde för att anropa databasen från PHP inte längre stöddes i PHP 7. Jag fick alltså lov att byta ut alla databasanrop i koden. Men efter någon dags extra hackande så tror jag att allt funkar.

Nu är frågan bara vad jag gör med den gala databasservern som just har blivit över…

Så var det dags för uppsnyggning av träningsdagboken

Nu har jag bytt ut kurvpaketet också i träningsdagboken.

Lagt till några nya kurvor för löpningen, dels som en del av statistiksidan, dels i passbeskrivningarna.

Men framför allt så har jag jobbat med navigationen. Förut hade jag ett antal sidor som man kom åt från vänstermenyn. Om man inte var inloggad så fanns ett menyval för att lista passen och ett menyval för statistiksidan. Som inloggad så tillkom det två menyval till: redigera pass och skapa nytt pass.

Nu finns bara ett menyval kvar, listningen av passen. Därifrån finns en knapp för att komma till statistiken och om man är inloggad en knapp för att skapa ett nytt pass. Från passbeskrivningen kan man redigera passet om man är inloggad.

Från de kurvor på statistiksidan som visar enskilda pass (löpning och personbästan) så kan man klicka sig vidare direkt till passbeskrivningen.

Lite finslipning av navigationen återstår, då de olika sidorna inte har riktigt samma “look and feel”.

Kurvorna i temploggen

Nu har jag bytt ut kurvpaket i temperaturloggen.

Det nya kurvpaketet heter morris.js. Jag hade svårt att förstå hur det gamla paketet funkade vilket ledde till att jag drog mig för att lägga in nya kurvor. Det nya har inte samma funktionalitet och går inte att styra lika mycket i detalj, men det går lätt att konfigurera och det har fördelen att när man hovrar över kurvan så visar den de faktiska värdena. Det var när jag försökte få till det som jag gav upp med det gamla paketet.

Härnäst så ska jag byta ut kurvorna i träningsdagboken också, och sen har jag några idéer om ytterligare kurvor där, men mer om det senare!

TLS

Jag har dragit ut på det och jag har skjutit upp det. Men nu i julledigheten så har jag tagit mig samman och sett till att konfigurera TLS på min webbserver. Jag gissar att det tog mig ungefär 10 timmar att få till det, men nu så funkar det att lägga till det där lilla s:et i början på webbadressen. https://, alltså. Känns väl rimligt med 10 timmar för ett s, eller hur?

TLS står för Transport Layer Security, och det är det som är skillnaden mellan http:// och https://. Säkerheten består i att trafiken är autentiserad och krypterad. Du vet alltså att det verkligen är pnott.se i andra änden och att ingen annan kan läsa av trafiken.

Det här löses med ett certifikat som har utfärdats av extern part. Certifikatet ska förnyas med jämna mellanrum. I mitt fall var tredje månad.

Jag var tvungen att välja ett program för att sköta om det där med att få certifikatet. Det var inte så lätt med min gamla server, eftersom den inte klarar vad som helst. Dokumentationen för programmet som jag valde var väl inget under av klarhet, men efter ett antal timmars klurande så fick jag till det.

Sen så skulle webbservern konfigureras. Jag kan inte säga att instruktionerna var särskilt klargörande här heller. Åter igen så tog det flera timmar innan det funkade som det skulle.

Slutligen så skulle förnyandet av certifikat automatiseras. Nu efter två dagar så tror jag att det fungerar. Fast det var ju inte så värst många minuter per dag som jag lade ner förstås. Får se om ett par månader hur det går!

Träningsdagbok (4)

Så var inmatningsformuläret tillräckligt komplett för nu. Kan mata in grunddata, övningar och intervaller. Om man skickar med id för passet som POST så kan man redigera och ta bort.

Jag har lagt ut koden här: register.php

Några småändringar har tillkommit i browse-programmet. Koden till det är här: listtraining.php

Närmast så får det bli lite statistiknörderi.

Jag kommer inte att publicera hur jag låter koden interagera med WordPress.

Träningsdagbok (3)

Jag har kommit en bit till. Jag har gjort ett inmatningsformulär. Detta visar jag dock inte publikt, av naturliga skäl. Här är en skärmkopia:

Inmatningsformuläret är gjort i html5 med dess stöd för validering av inmatade data. Formuläret kan också användas för att ändra och ta bort pass.

Härnäst så ska jag lägga till möjlighet att mata in övningar och intervaller/varvtider. Sen tänker jag göra import av csv-fil från Garmin och diverse statistik.

Återkommer med kod när det hela är mer komplett.

Träningsdagbok (1)

FunBeat lägger ner. Dags att bygga en egen träningsdagbok.

Min tanke är att göra en personlig blogg som passar mig, inte något allmänt tillgängligt.

Jag har redan två RaspberryPi som snurrar där hemma, en med en MySQL-databas och en med en webbserver. Detta får bli grunden i min träningsdagbok.

Jag har beställt hem min data från FunBeat på denna adress:
https://funbeat-export.azurewebsites.net/

Det jag fick hem var följande filer:
• basic_info.json
• blog_postings.json
• equipment.json
• trainings.json
• trainings.xlsx

Det var också med en mapp ”details” med ett stort antal json och fit-filer.

Idag: import av data.

Första steget får bli att importera trainings.json till min MySQL-databas.
Det får bli tre tabeller:
• trainings – en tabell med alla träningsaktiviteter samlade
• exercises – alla övningar, med referens till träningsaktiviteten
• intervals – alla intervaller, med referens till träningsaktiviteten

Det här är de nycklar som jag hittade i min jsonfil, och som får bli kolumner i databasen. Jag namnger efter FunBeat för enkelhets skull.

Tabell: trainings
startDateTime
trainingTypeName
numberOfSeconds
creationDateTime
distance
description
pulse
pulseMax
kCal
routeId
importedDataFormat
importedDataId
hasTime
te
importedDataLocation
ascent
descent
intervals
exercises
pointsLocation
cadAvg
repetitions
isCompetition
equipment

Tabell: intervals
numberOfSeconds
distance
comment

Tabell: exercises
trainingExerciseTypeName
reps
weight
comment

Senare tänker jag mig att göra en import av csv-filer från Garmin, och då lär jag lägga till än del kolumner i intervals-tabellen, men det får komma sen.
Nu är det dags att gå in i MySql

Jag vill ha en egen databas för dagboken.
mysql> create database Diary;
mysql> show databases;
mysql> use Diary;

CREATE TABLE trainings
(id int NOT NULL,
startDateTime datetime NOT NULL DEFAULT ‘0000-00-00 00:00:00’,
trainingTypeName varchar(24) NOT NULL DEFAULT ”,
numberOfSeconds int NOT NULL DEFAULT ‘0’,
creationDateTime datetime NOT NULL DEFAULT ‘0000-00-00 00:00:00’,
distance float NOT NULL DEFAULT ‘0.0’,
description varchar(1200) DEFAULT ”,
pulse int NOT NULL DEFAULT ‘0’,
pulseMax int NOT NULL DEFAULT ‘0’,
kCal int NOT NULL DEFAULT ‘0’,
routeId int NOT NULL DEFAULT ‘0’,
importedDataFormat varchar(24) NOT NULL DEFAULT ”,
importedDataId varchar(24) NOT NULL DEFAULT ”,
hasTime int NOT NULL DEFAULT ‘0’,
te float NOT NULL DEFAULT ‘0.0’,
importedDataLocation int NOT NULL DEFAULT ‘0’,
ascent int NOT NULL DEFAULT ‘0’,
descent int NOT NULL DEFAULT ‘0’,
intervals int NOT NULL DEFAULT ‘0’,
exercises int NOT NULL DEFAULT ‘0’,
pointsLocation int NOT NULL DEFAULT ‘0’,
cadAvg int NOT NULL DEFAULT ‘0’,
repetitions int NOT NULL DEFAULT ‘0’,
isCompetition int NOT NULL DEFAULT ‘0’,
equipment varchar(240) DEFAULT ”,
PRIMARY KEY (id));

CREATE TABLE intervals
(id int NOT NULL,
number int NOT NULL,
numberOfSeconds int NOT NULL DEFAULT ‘0’,
distance float NOT NULL DEFAULT ‘0.0’,
comment varchar(240) DEFAULT ”,
PRIMARY KEY (id,number));

CREATE TABLE exercises
(id int NOT NULL,
number int NOT NULL,
trainingExerciseTypeName varchar(24) DEFAULT ”,
reps int NOT NULL DEFAULT ‘0’,
weight int NOT NULL DEFAULT ‘0’,
comment varchar(240) DEFAULT ”,
PRIMARY KEY (id,number));

mysql> show tables;

Så. Nu finns de tomma tabellerna på plats.

Dags att importera. Skrev ihop den här php-filen som gör tricket:

importjson.php

Nästa steg: att visa passen på ett enkelt sätt.

EDIT 2019-11-25:
Rättat create-satsen för exercises.