2 puntos por GN⁺ 2023-12-25 | 1 comentarios | Compartir por WhatsApp
  • Endurain es un servicio de seguimiento fitness autoalojado, diseñado para que los usuarios controlen directamente sus datos y su entorno de alojamiento; es similar a Strava, pero enfocado en la privacidad y la personalización
  • El frontend está basado en Vue.js y el backend en Python FastAPI; usa PostgreSQL, Jaeger, Alembic, SQLAlchemy y más para gestionar datos de actividad y el seguimiento básico
  • Soporta integración con Strava y Garmin Connect, y también permite la carga manual de actividades mediante archivos .gpx, .tcx y .fit
  • Se ofrecen imágenes de Docker y un ejemplo de docker-compose.yml.example, y la configuración se maneja con variables de entorno para facilitar el despliegue y la personalización
  • El repositorio de GitHub es un espejo de solo lectura y la actividad del proyecto se lleva en Codeberg; actualmente está en una pausa temporal de nuevas funciones para enfocarse más en fortalecer la base

Funciones que ofrece Endurain

  • Endurain es un servicio de seguimiento fitness autoalojado cuyo objetivo es que el usuario tenga control total sobre sus datos y su entorno de alojamiento
  • Es un servicio similar a Strava, pero su enfoque está en la privacidad y la personalización
  • Los datos de actividad pueden importarse mediante integración con servicios externos o por carga de archivos
    • Soporte para integración con Strava
    • Soporte para integración con Garmin Connect
    • Soporte para carga manual de archivos .gpx, .tcx y .fit

Stack tecnológico

  • El frontend está construido con Vue.js, Notivue y Bootstrap CSS
  • El backend está centrado en Python FastAPI
    • Alembic
    • SQLAlchemy
    • Apprise
    • stravalib para la integración con Strava
    • python-garminconnect para la integración con Garmin Connect
    • gpxpy para importar .gpx
    • tcxreader para importar .tcx
    • fitdecode para importar .fit
  • La base de datos usa PostgreSQL
  • Para trazabilidad y monitoreo básicos se utiliza Jaeger

Despliegue y configuración

  • Se ofrecen imágenes de Docker para desplegar Endurain
  • El repositorio incluye el archivo docker-compose.yml.example, con un ejemplo de despliegue
  • La configuración se maneja mediante variables de entorno, lo que da flexibilidad y facilita la personalización
  • Más información en la documentación de Endurain

Entorno de demostración

  • Hay una demo disponible para probar Endurain sin instalar nada
  • El entorno de demo se reinicia todos los días a la medianoche según la zona horaria Europe/Lisbon
  • No se deben guardar datos importantes en la demo

Estado operativo del proyecto y licencia

  • El repositorio de GitHub es un espejo de solo lectura, y los issues, pull requests y la actividad del proyecto se gestionan en Codeberg
  • Endurain está en una pausa temporal de nuevas funciones
  • Tiene soporte multilingüe y se puede contribuir con traducciones a través de Codeberg Translate
  • La licencia es AGPL-3.0
  • Endurain® es una marca registrada de João Vitória Silva
    • Se permite el autoalojamiento no comercial con fines personales, educativos, de investigación y comunitarios, así como el uso del nombre y el logo
    • No se permite el uso comercial del nombre o logo de Endurain, como hosting de pago, productos o servicios, sin autorización previa por escrito

1 comentarios

 
GN⁺ 2023-12-25
Comentarios en Hacker News
  • Me estoy pasando poco a poco a intervals.icu(https://intervals.icu/)
    Como se basa en donaciones, se siente en cierto modo más “open source”, y me parece mucho mejor que Strava

    • No entiendo qué significa exactamente eso de “como se basa en donaciones, es más cercano al open source”
    • No encuentro un enlace al código fuente en el sitio; me pregunto dónde habría que buscar
    • Eso es algo distinto. Strava se parece más a una plataforma social, mientras que intervals.icu se parece más a una plataforma de entrenamiento y seguimiento del progreso
      La razón por la que uso Strava es porque mis amigos y mi familia me motivan, no porque quiera obtener números más altos de potencia o frecuencia cardíaca
  • Como app web, hay una función que falta, y es el seguimiento automático de actividades registradas por un smartwatch, lo cual parece difícil
    La forma de rodearlo parece ser importar automáticamente a Strava primero y luego conectar Strava con Endurain

    • Una app web también puede importar automáticamente actividades de smartwatch Garmin
      Garmin ofrece una interfaz REST de Connect para importar actividades FIT
      https://developer.garmin.com/gc-developer-program/activity-a...
    • ¿El smartwatch realmente sube actividades directamente a Strava? ¿No suele conectarse más bien a un servicio en la nube del fabricante, como Garmin Connect, y luego Strava hace la integración por API con ese servicio?
      Entonces, lo que falta parecería ser la integración entre Endurain y las principales plataformas de fabricantes. No revisé el código para confirmar si realmente falta
    • Cuando lo usé hace tiempo, la app de Suunto permitía configurar cargas de datos personalizadas, y en ese entonces la subida a Strava funcionaba así
      Recuerdo que Garmin también podía hacerlo, pero no sé cómo esté la versión más reciente
    • Una opción podría ser integrarlo con RunGap, que ya se conecta con varios servicios
  • Si no eres desarrollador profesional y solo tienes más o menos los conceptos de desarrollo que aprendiste en la universidad hace 10 años, entonces hiciste un buen trabajo al crear un sistema que se ve tan completo
    Pero no sé si eres el desarrollador original; me da curiosidad si no te preocupa haber cometido algún error que luego te pase factura, por ejemplo problemas de seguridad o fallas difíciles de corregir más adelante

    • He sido programador amateur durante mucho tiempo, pero nunca he tenido el tiempo para volverme realmente hábil programando
      Soy del tipo que pierde una hora por un pequeño error de dedo o por un bug que debería ser fácil de encontrar
      Uso ChatGPT como apoyo para el proyecto, para generar código y señalar problemas en el código
      Sobre todo al implementar funciones comunes, suele cubrir mejor los casos límite que yo por mi cuenta, y si le pido que cierre huecos de seguridad, normalmente lo hace mejor que yo
      Ayer mismo propuso 7 estrategias para bloquear bots que llenan formularios, y después de aplicar algunas en pocos minutos, el problema de bots se detuvo de inmediato
      Claro que siguen ocurriendo errores, pero las herramientas de IA ayudan a reducirlos si se usan junto con el propio pensamiento crítico. Si corriges a la IA con frecuencia, pides ayuda desde la perspectiva de prevenir cierto tipo de problemas, o armas prompts basados en conocimiento previo, obtienes respuestas mucho mejores
    • Todos los desarrolladores cometen errores. La experiencia solo mueve la línea base de los errores obvios hacia errores menos obvios
      Lo impresionante es que construyó un sistema y aparentemente lo dejó abierto a la retroalimentación de la comunidad, y eso podría dar un mejor resultado que el de un desarrollador con mucha experiencia trabajando solo durante años por preocupación de seguridad
      Más que los errores en sí, lo importante es la velocidad para detectarlos y corregirlos. Y es importante construir sistemas de refuerzo propio, como linters, pruebas unitarias, sistemas de tipos y CI/CD, para evitar que vuelva a pasar lo mismo. En broma, a esto le llamo desarrollo basado en la humildad
    • Si te dejas dominar por ese miedo, en la práctica no vas a construir nada
      Incluso los desarrolladores con más experiencia cometen ese tipo de errores. Si crees que ya superaste esa etapa, necesitas más experiencia para ver la realidad
      La mejor forma de aprender es crear proyectos, equivocarte y encontrar cómo corregirlos. Cuanto más difícil sea corregirlos, más lo vas a considerar desde el diseño inicial en tu siguiente proyecto
    • Le di una revisada rápida al PHP y parece que usa SHA-2 para el hash de contraseñas, así que sí parece bastante probable que existan ese tipo de problemas
      Ya sea IA o un principiante, al final solo es una diferencia de cuánto se equivocan
    • No sé qué habría que temer. ¿Cuál sería el riesgo real?
  • El nombre es excelente. Parece un juego de palabras entre endurance y el gran campeón ciclista español Miguel Induráin
    https://en.m.wikipedia.org/wiki/Miguel_Indur%C3%A1in

    • Fue el mejor de los mejores en una época en la que todos se dopaban como locos
      Trabajó con el pionero de la EPO, el Dr. Conconi; nunca dio positivo, pero parece poco probable que haya estado limpio
  • ¿Esto no se parece más a un frontend alternativo con función de respaldo?
    Al final, parece que primero tienes que darle los datos a Strava antes de poder usar esta herramienta

    • Eso parece. El problema es que el acuerdo del API de Strava (https://www.strava.com/legal/api) prohíbe explícitamente replicar funcionalidades que Strava ya tiene
  • También hay una alternativa bastante rústica que hice yo, y que no necesita Strava para nada: https://github.com/cfe84/gpx-tools/blob/main/README.md
    Es un comando CLI que se ejecuta en una carpeta con tracks GPX, y los segmentos se pueden definir directamente en un archivo JSON para luego listar los resultados por segmento
    Registro las actividades con OsmAnd, las sincronizo con syncthing usando foldersync, y luego lo ejecuto en la carpeta de destino
    Quizá te sirva como referencia para la lógica de cálculo de segmentos. No diría que sea excelente, pero podría ser una función adicional útil para meter en el servidor

  • Creo que la función estrella de Strava son los segmentos
    Incluso si no te interesa el mejor tiempo entre todos los usuarios, es decir, el KOM, sigue siendo valioso poder comparar mi progreso con el paso del tiempo en un tramo específico de carretera
    Si lo miras junto con la frecuencia cardíaca y el esfuerzo percibido, puedes estimar más o menos cuál es tu estado físico actual o cuánto has caído respecto a tu mejor forma

    • Bastaría con que alguien hiciera un hub central abierto para segmentos y tablas de clasificación por tipo de actividad
      Después haría falta alguna forma de bloquear o eliminar segmentos maliciosos y a quienes los envían, y quizá podría funcionar un sistema de votos
      Detectar segmentos durante una actividad es complicado, así que me habría gustado investigarlo más. Probablemente podría apoyarme en una explicación de ChatGPT, pero al menos sé que tiene que ver con cuadros delimitadores de latitud/longitud y con detectar los puntos de inicio y fin dentro de ellos
      Recuerdo vagamente que Strava tenía alguna patente relacionada con los segmentos
    • Sin duda es una función genial, pero Strava la impulsa bastante para hacerte querer pagar 80 dólares al año
  • Me pregunto cómo podría usarse junto con herramientas móviles como Gadgetbridge[0]
    Esta app evita las aplicaciones propietarias del smartwatch y permite no subir datos de salud y ubicación a servicios comerciales
    Pero no es compatible con los principales relojes deportivos de Garmin, solo con algunos dispositivos[1]. Así que tienes que conectar el reloj por USB para transferir las rutas y acceder a ellas desde la computadora; no hay soporte móvil
    [0] https://f-droid.org/en/packages/nodomain.freeyourgadget.gadg...
    [1] https://gadgetbridge.org/gadgets/

  • ¿Se integra con el Fediverse? La razón principal por la que uso Strava es por su aspecto de red social
    Garmin Connect tiene mejores herramientas de análisis que Strava. Todavía no he probado Endurain

    • Quiero una versión FOSS ActivityPub de Strava
  • Es una pena que Runalyze ya no sea de código abierto, pero las versiones anteriores todavía siguen ahí
    https://github.com/Runalyze/Runalyze