2 Punkte von GN⁺ 2023-12-25 | 1 Kommentare | Auf WhatsApp teilen
  • Endurain ist ein selbst hostbarer Fitness-Tracking-Dienst, der darauf ausgelegt ist, dass Nutzer ihre Daten und Hosting-Umgebung direkt kontrollieren; er ähnelt Strava, legt den Schwerpunkt aber auf Datenschutz und Anpassbarkeit
  • Das Frontend basiert auf Vue.js, das Backend auf Python FastAPI; für die Verwaltung von Aktivitätsdaten und grundlegendes Tracking werden unter anderem PostgreSQL, Jaeger, Alembic und SQLAlchemy eingesetzt
  • Unterstützt die Anbindung an Strava und Garmin Connect; Aktivitäten können außerdem manuell über .gpx-, .tcx- und .fit-Dateien hochgeladen werden
  • Es werden Docker-Images und ein Beispiel docker-compose.yml.example bereitgestellt; die Konfiguration erfolgt über Umgebungsvariablen, um Deployment und Anpassung zu erleichtern
  • Das GitHub-Repository ist ein schreibgeschützter Mirror, die Projektaktivität findet auf Codeberg statt; derzeit gilt ein vorübergehender Feature-Freeze, bei dem der Fokus stärker auf der technischen Basis als auf neuen Funktionen liegt

Welche Funktionen Endurain bietet

  • Endurain ist ein selbst hostbarer Fitness-Tracking-Dienst mit dem Ziel, dass Nutzer ihre Daten und Hosting-Umgebung vollständig kontrollieren
  • Es ist ein Dienst ähnlich wie Strava, der Fokus liegt jedoch auf Datenschutz und Anpassbarkeit
  • Aktivitätsdaten können über die Anbindung externer Dienste oder per Dateiupload importiert werden
    • Unterstützung für Strava-Anbindung
    • Unterstützung für Garmin-Connect-Anbindung
    • Unterstützung für manuellen Upload von .gpx-, .tcx- und .fit-Dateien

Technischer Aufbau

  • Das Frontend besteht aus Vue.js, Notivue und Bootstrap CSS
  • Das Backend ist rund um Python FastAPI aufgebaut
    • Alembic
    • SQLAlchemy
    • Apprise
    • stravalib für die Strava-Anbindung
    • python-garminconnect für die Garmin-Connect-Anbindung
    • gpxpy für den Import von .gpx
    • tcxreader für den Import von .tcx
    • fitdecode für den Import von .fit
  • Als Datenbank wird PostgreSQL verwendet
  • Für grundlegendes Tracking und Monitoring wird Jaeger eingesetzt

Deployment und Konfiguration

  • Für die Bereitstellung von Endurain werden Docker-Images angeboten
  • Das Repository enthält die Datei docker-compose.yml.example, an der sich ein Deployment-Beispiel orientieren lässt
  • Die Konfiguration erfolgt über Umgebungsvariablen und bietet dadurch Flexibilität und einfache Anpassbarkeit
  • Weitere Informationen finden sich in der Endurain documentation

Demo-Umgebung

  • Es gibt eine Demo, mit der sich Endurain ohne Installation ausprobieren lässt
  • Die Demo-Umgebung wird täglich um Mitternacht in der Zeitzone Europe/Lisbon zurückgesetzt
  • In der Demo sollten keine wichtigen Daten gespeichert werden

Projektstatus und Lizenz

  • Das GitHub-Repository ist ein schreibgeschützter Mirror; Issues, Pull Requests und Projektaktivitäten werden auf Codeberg verwaltet
  • Endurain befindet sich in einem vorübergehenden Feature-Freeze
  • Es gibt Mehrsprachenunterstützung, und über Codeberg Translate kann zur Übersetzung beigetragen werden
  • Die Lizenz ist AGPL-3.0
  • Endurain® ist eine Marke von João Vitória Silva
    • Nicht kommerzielles Self-Hosting sowie die Nutzung von Name und Logo für persönliche, Bildungs-, Forschungs- und Community-Zwecke sind erlaubt
    • Eine kommerzielle Nutzung des Namens oder Logos von Endurain, etwa für bezahltes Hosting, Produkte oder Dienstleistungen, ist ohne vorherige schriftliche Genehmigung nicht erlaubt

1 Kommentare

 
GN⁺ 2023-12-25
Meinungen auf Hacker News
  • Ich wechsle nach und nach zu intervals.icu(https://intervals.icu/)
    Da es spendenbasiert ist, fühlt es sich gewissermaßen eher nach „Open Source“ an, und ich finde es deutlich besser als Strava

    • Was soll „spendenbasiert, also nahe an Open Source“ überhaupt bedeuten?
    • Ich finde auf der Website keinen Link zum Quellcode; wo sollte man da nachsehen?
    • Das ist etwas anderes. Strava ist eher eine Social Platform, während intervals.icu eher eine Plattform für Training und Fortschrittsmanagement ist.
      Ich nutze Strava, weil Freunde und Familie mich motivieren, nicht weil ich höhere Leistungs-/Herzfrequenzwerte bekommen will
  • Als Web-App fehlt eine Funktion: automatisches Tracking von Aktivitäten, die von einer Smartwatch aufgezeichnet wurden, halte ich für schwierig
    Der Workaround scheint zu sein, erst automatisch in Strava zu importieren und dann Strava mit Endurain zu verbinden

    • Auch eine Web-App kann Aktivitäten von Garmin-Smartwatches automatisch importieren
      Garmin bietet eine REST-Schnittstelle für Connect an, um FIT-Aktivitäten zu importieren
      https://developer.garmin.com/gc-developer-program/activity-a...
    • Laden Smartwatches Aktivitäten überhaupt direkt zu Strava hoch? Normalerweise werden sie mit einem Hersteller-Cloud-Dienst wie Garmin Connect verbunden, und Strava hat dann eine API-Integration damit
      Was fehlt, scheint also eher die Integration zwischen Endurain und den großen Herstellerplattformen zu sein. Ob sie tatsächlich fehlt, habe ich im Code nicht geprüft
    • Als ich es früher genutzt habe, konnte man in der Suunto-App einen benutzerdefinierten Daten-Upload konfigurieren, und der Strava-Upload lief damals ebenfalls so
      Ich meine, dass das auch bei Garmin möglich war, bin mir bei den aktuellen Versionen aber nicht sicher
    • Ein Weg könnte sein, es in RunGap zu integrieren, das mit mehreren Diensten zusammenarbeitet
  • Wenn man kein professioneller Entwickler ist und nur die Entwicklungskonzepte kennt, die man vor 10 Jahren an der Uni gelernt hat, ist es beachtlich, ein so ausgereift wirkendes System gebaut zu haben
    Trotzdem frage ich mich, ob man keine Angst hat, später über Fehler zu stolpern, die einen ausbremsen — ich weiß nicht, ob es der ursprüngliche Entwickler ist. Zum Beispiel Sicherheitsprobleme oder Fehler, die später schwer zu beheben sind

    • Ich war lange Hobbyprogrammierer, hatte aber nie wirklich die Zeit, richtig gut im Coden zu werden
      Ich bin der Typ, der wegen eines kleinen Tippfehlers oder eines Bugs, der leicht zu finden sein sollte, eine Stunde verliert
      Ich nutze ChatGPT als Projektassistent, zum Generieren von Code und zum Aufzeigen von Problemen im Code
      Besonders bei der Implementierung gängiger Funktionen achtet es besser auf Randfälle, als ich es allein tun würde, und wenn ich es bitte, Sicherheitslücken zu schließen, macht es das besser als ich auf meinem Niveau
      Erst gestern hat es sieben Strategien vorgeschlagen, um Bots am Ausfüllen eines Formulars zu hindern; nachdem ich einige davon in wenigen Minuten umgesetzt hatte, hörte das Bot-Problem sofort auf
      Fehler passieren natürlich, aber AI-Tools helfen dabei, solche Fehler zu reduzieren, wenn man sie zusammen mit dem eigenen kritischen Denken einsetzt. Man bekommt deutlich bessere Antworten, wenn man die AI häufig korrigiert, gezielt um Hilfe aus der Perspektive bittet, bestimmte Problemklassen zu verhindern, oder Prompts auf Basis des eigenen Vorwissens formuliert
    • Alle Entwickler machen Fehler. Erfahrung verschiebt nur die Messlatte von offensichtlichen Fehlern hin zu weniger offensichtlichen
      Beeindruckend ist, dass hier ein System gebaut und vermutlich für Community-Feedback geöffnet wurde; das kann zu besseren Ergebnissen führen, als wenn ein erfahrener Entwickler aus Sicherheitsbedenken jahrelang allein daran baut
      Wichtiger als der Fehler selbst ist meiner Ansicht nach die Geschwindigkeit, mit der man ihn findet und behebt. Und wichtig ist, selbstverstärkende Systeme wie Linter, Unit-Tests, Typsysteme und CI/CD aufzubauen, damit dasselbe nicht wieder passiert. Im Scherz nenne ich das Demut-getriebene Entwicklung
    • Wenn man sich von solchen Ängsten leiten lässt, baut man in der Praxis gar nichts
      Selbst die erfahrensten Entwickler machen solche Fehler. Wenn man glaubt, über diese Phase hinaus zu sein, braucht man mehr Erfahrung, um die Wahrheit zu sehen
      Am besten lernt man, indem man Projekte baut, Fehler macht und herausfindet, wie man sie behebt. Je schwerer etwas zu reparieren ist, desto eher berücksichtigt man es beim nächsten Projekt schon im ursprünglichen Design
    • Ich habe das PHP nur grob überflogen, aber es sieht so aus, als würde für Passwort-Hashing SHA-2 verwendet; die Wahrscheinlichkeit für solche Probleme scheint also ziemlich hoch
      Ob AI oder Anfänger — am Ende ist es meiner Meinung nach nur ein Unterschied im Ausmaß dessen, wie falsch man liegt
    • Ich verstehe nicht, wovor man Angst haben sollte. Was ist das konkrete Risiko?
  • Der Name ist großartig. Sieht nach einem Wortspiel aus endurance und dem Namen des großen spanischen Radchampions Miguel Induráin aus
    https://en.m.wikipedia.org/wiki/Miguel_Indur%C3%A1in

    • Er war der Beste der Besten in einer Zeit, in der alle wie verrückt gedopt haben
      Er arbeitete mit dem EPO-Pionier Dr. Conconi zusammen und wurde nie erwischt, aber die Wahrscheinlichkeit, dass er sauber war, scheint gering
  • Ist das nicht eher ein alternatives Frontend mit Backup-Funktion?
    Am Ende scheint die Struktur zu sein, dass man die Daten zuerst an Strava geben muss, bevor sie in dieses Tool kommen

    • Sieht so aus. Das Problem ist, dass der Strava-API-Vertrag (https://www.strava.com/legal/api) ausdrücklich verbietet, Funktionen zu replizieren, die Strava anbietet
  • Es gibt auch eine ziemlich grobe Alternative von mir, die Strava überhaupt nicht braucht: https://github.com/cfe84/gpx-tools/blob/main/README.md
    Das ist ein CLI-Befehl, den man in einem Ordner mit GPX-Tracks ausführt; Segmente definiert man selbst in einer JSON-Datei und kann dann die Leistungen pro Segment auflisten
    Ich zeichne Aktivitäten mit OsmAnd auf, synchronisiere per foldersync über syncthing und führe es dann im Zielordner aus
    Die Segment-Berechnungslogik kann als Referenz dienen. Ich behaupte nicht, dass sie großartig ist, aber sie könnte ein gutes Zusatzfeature für einen Server sein

  • Ich denke, das Killer-Feature von Strava sind die Segmente.
    Selbst wenn man sich nicht für die schnellste Zeit aller Nutzer, also den KOM, interessiert, ist es wertvoll, den eigenen Fortschritt auf einem bestimmten Straßenabschnitt im Lauf der Zeit vergleichen zu können.
    Wenn man Herzfrequenz und subjektive Belastung zusammen betrachtet, kann man einschätzen, wie gut die aktuelle Fitness ist oder wie weit man von der Bestform entfernt ist.

    • Jemand müsste einen offenen, zentralen Hub für Segmente und Bestenlisten nach Aktivitätstyp bauen.
      Danach bräuchte es Möglichkeiten, bösartige Segmente und Einreicher zu blockieren oder zu entfernen; eventuell wäre auch ein Abstimmungssystem denkbar.
      Segmente während einer Aktivität zu erkennen, ist knifflig, und ich wollte dazu noch mehr recherchieren. Vielleicht könnte man sich auch eine Erklärung von ChatGPT zunutze machen, aber ich weiß zumindest, dass dabei wohl Bounding Boxes für Breiten-/Längengrade und die Erkennung von Start- und Endpunkten darin eine Rolle spielen.
      Ich erinnere mich vage, dass Strava irgendwelche Patente zu Segmenten hatte.
    • Es ist definitiv ein cooles Feature, aber Strava pusht es ziemlich aggressiv, sodass man Lust bekommt, 80 Dollar pro Jahr zu zahlen.
  • Ich frage mich, wie sich das mit mobilen Tools wie Gadgetbridge[0] verwenden ließe.
    Diese App umgeht die proprietären Apps von Smartwatches und verhindert, dass Gesundheits- und Standortdaten bei kommerziellen Diensten hochgeladen werden.
    Allerdings unterstützt sie die wichtigsten Sportuhren von Garmin nicht, sondern nur einige Geräte[1]. Deshalb muss man die Uhr per USB anschließen, Tracks übertragen und sie am Computer auslesen; mobile Unterstützung gibt es nicht.
    [0] https://f-droid.org/en/packages/nodomain.freeyourgadget.gadg...
    [1] https://gadgetbridge.org/gadgets/

  • Gibt es eine Integration mit dem Fediverse? Der Hauptgrund, Strava zu nutzen, ist der Social-Network-Charakter.
    Garmin Connect hat bessere Analyse-Tools als Strava. Endurain habe ich noch nicht ausprobiert.

    • Ich wünsche mir eine FOSS-ActivityPub-Version von Strava.
  • Schade, dass Runalyze nicht mehr Open Source ist, aber die alte Version ist noch vorhanden.
    https://github.com/Runalyze/Runalyze