2 pontos por GN⁺ 2023-12-25 | 1 comentários | Compartilhar no WhatsApp
  • Endurain é um serviço de rastreamento fitness auto-hospedável projetado para que o usuário controle diretamente seus dados e o ambiente de hospedagem; é semelhante ao Strava, mas com foco em privacidade e personalização
  • O frontend é baseado em Vue.js e o backend em Python FastAPI; usa PostgreSQL, Jaeger, Alembic, SQLAlchemy e outros para gerenciar dados de atividades e compor o rastreamento básico
  • Oferece integração com Strava e Garmin Connect, além de permitir o upload manual de atividades por arquivos .gpx, .tcx e .fit
  • Imagens Docker e um exemplo de docker-compose.yml.example são fornecidos, com configuração via variáveis de ambiente para facilitar a implantação e a personalização
  • O repositório no GitHub é um espelho somente leitura; a atividade do projeto acontece no Codeberg e, no momento, ele está em congelamento temporário de funcionalidades, com foco em fortalecer a base em vez de adicionar novos recursos

O que o Endurain oferece

  • Endurain é um serviço de rastreamento fitness auto-hospedável, com o objetivo de dar ao usuário controle total sobre seus dados e ambiente de hospedagem
  • É um serviço semelhante ao Strava, mas o foco está em privacidade e personalização
  • Os dados de atividades podem ser importados por integração com serviços externos ou por upload de arquivos
    • Suporte à integração com Strava
    • Suporte à integração com Garmin Connect
    • Suporte a upload manual de arquivos .gpx, .tcx e .fit

Composição técnica

  • O frontend é composto por Vue.js, Notivue e Bootstrap CSS
  • O backend é centrado em Python FastAPI
    • Alembic
    • SQLAlchemy
    • Apprise
    • stravalib para integração com Strava
    • python-garminconnect para integração com Garmin Connect
    • gpxpy para importar .gpx
    • tcxreader para importar .tcx
    • fitdecode para importar .fit
  • O banco de dados usado é PostgreSQL
  • Jaeger é usado para rastreamento e monitoramento básicos

Implantação e configuração

  • São fornecidas imagens Docker para implantar o Endurain
  • O repositório inclui o arquivo docker-compose.yml.example, que permite consultar um exemplo de implantação
  • A configuração é feita por variáveis de ambiente, oferecendo flexibilidade e facilidade de personalização
  • Mais informações estão disponíveis na documentação do Endurain

Ambiente de demonstração

  • Há uma demonstração disponível para experimentar o Endurain sem instalação
  • O ambiente de demonstração é redefinido diariamente à meia-noite, no fuso horário Europe/Lisbon
  • Dados importantes não devem ser armazenados na demonstração

Status de operação do projeto e licença

  • O repositório no GitHub é um espelho somente leitura, e issues, pull requests e atividades do projeto são gerenciados no Codeberg
  • O Endurain está em congelamento temporário de funcionalidades
  • Há suporte multilíngue, e é possível contribuir com traduções pelo Codeberg Translate
  • A licença é AGPL-3.0
  • Endurain® é uma marca registrada de João Vitória Silva
    • Auto-hospedagem não comercial e uso do nome e do logotipo para fins pessoais, educacionais, de pesquisa e comunitários são permitidos
    • O uso comercial do nome ou logotipo Endurain, como em hospedagem paga, produtos ou prestação de serviços, não é permitido sem autorização prévia por escrito

1 comentários

 
GN⁺ 2023-12-25
Opiniões no Hacker News
  • Estou migrando aos poucos para o intervals.icu (https://intervals.icu/)
    Por ser baseado em doações, é meio que “open source”, e sinto que é muito melhor que o Strava

    • Não faço ideia do que quer dizer “por ser baseado em doações, é próximo de open source”
    • Não consegui encontrar no site um link para o código-fonte; queria saber onde devo procurar
    • Isso é um pouco diferente. O Strava está mais para uma plataforma social, enquanto o intervals.icu está mais para uma plataforma de treino e acompanhamento de progresso
      O motivo de usar o Strava é que amigos e família dão motivação, não porque eu queira obter números maiores de potência/frequência cardíaca
  • Como web app, há uma funcionalidade que falta, e acho difícil fazer rastreamento automático de atividades registradas por smartwatch
    A alternativa parece ser importar automaticamente para o Strava e depois conectar o Strava ao Endurain

    • Um web app também consegue importar automaticamente atividades de smartwatches Garmin
      A Garmin oferece uma interface REST do Connect para importar atividades FIT
      https://developer.garmin.com/gc-developer-program/activity-a...
    • Smartwatches não enviam atividades diretamente para o Strava, não é? Normalmente eles se conectam a um serviço de nuvem do fabricante, como o Garmin Connect, e o Strava faz uma integração via API com esse serviço
      Então o que parece faltar é uma integração entre o Endurain e as principais plataformas dos fabricantes. Não verifiquei o código para saber se isso realmente falta
    • Quando eu usava antes, no app da Suunto dava para configurar upload de dados personalizado, e na época o upload para o Strava também era feito desse jeito
      Lembro que a Garmin também permitia isso, mas não sei como está nas versões atuais
    • Um caminho possível seria integrar ao RunGap, que se conecta a vários serviços
  • Se a pessoa não é desenvolvedora profissional e só tem conceitos de desenvolvimento aprendidos na faculdade há 10 anos, criar um sistema que parece tão completo é um bom trabalho
    Mas, não sei se é o desenvolvedor original, fico curioso se ela não tem medo de ter cometido erros que a prejudiquem mais tarde. Por exemplo, problemas de segurança ou erros difíceis de corrigir depois

    • Sou programador amador há muito tempo, mas nunca tive tempo para ficar realmente bom em programar
      Sou do tipo que perde uma hora com um erro de digitação bobo ou um bug que deveria ser fácil de encontrar
      Uso o ChatGPT como assistente de projeto, para gerar código e apontar problemas no código
      Especialmente ao implementar funcionalidades comuns, ele costuma cuidar melhor dos casos de borda do que eu faria sozinho e, quando peço para fechar brechas de segurança, também faz melhor do que o meu nível permitiria
      Ainda ontem ele sugeriu sete estratégias para impedir bots de preencher formulários e, depois que apliquei algumas delas em poucos minutos, o problema com bots parou imediatamente
      Erros obviamente acontecem, mas ferramentas de IA, usadas junto com o próprio pensamento crítico, ajudam a reduzi-los. Quando você corrige a IA com frequência, pede ajuda pensando em evitar certos tipos de problema, ou monta prompts com base no conhecimento que já tem, obtém respostas muito melhores
    • Todo desenvolvedor comete erros. A experiência apenas desloca a linha de base dos erros óbvios para erros menos óbvios
      O impressionante é que ele criou um sistema e provavelmente o abriu para feedback da comunidade, o que pode levar a resultados melhores do que um desenvolvedor experiente passar anos criando sozinho, preocupado com segurança
      Acho que mais importante do que o erro em si é a velocidade de descobrir e corrigir. E é importante criar sistemas de autorreforço, como linters, testes unitários, sistema de tipos e CI/CD, para que a mesma coisa não volte a acontecer. De brincadeira, chamo isso de desenvolvimento baseado em humildade
    • Se você se deixa dominar por esse tipo de medo, na prática não consegue construir nada
      Até os desenvolvedores mais experientes cometem esses erros. Se você acha que já passou dessa fase, precisa de mais experiência para enxergar a verdade
      A melhor forma de aprender é criar projetos, errar e descobrir como corrigir. Quanto mais difícil for corrigir, mais você vai considerar isso desde o design inicial no próximo projeto
    • Dei uma olhada rápida no PHP e parece que ele usa SHA-2 para hashing de senhas, então a possibilidade de haver esse tipo de problema parece bem alta
      Seja IA ou iniciante, no fim é só uma diferença de grau em relação ao quanto está errado
    • Não sei do que se deve ter medo. Qual é o risco real?
  • O nome é excelente. Parece um trocadilho combinando endurance com o nome do grande campeão espanhol de ciclismo Miguel Induráin
    https://en.m.wikipedia.org/wiki/Miguel_Indur%C3%A1in

    • Foi o melhor dos melhores numa época em que todo mundo se dopava loucamente
      Trabalhou com o pioneiro da EPO, Dr. Conconi, e embora nunca tenha sido pego, parece pouco provável que fosse limpo
  • Isto não está mais para um front-end alternativo com recurso de backup?
    No fim, parece uma estrutura em que você precisa primeiro entregar os dados ao Strava antes que eles cheguem a esta ferramenta

    • Parece que sim. O problema é que o contrato da API do Strava (https://www.strava.com/legal/api) proíbe explicitamente replicar funcionalidades que o Strava possui
  • Também tenho uma alternativa bem tosca que criei e que não precisa do Strava de jeito nenhum: https://github.com/cfe84/gpx-tools/blob/main/README.md
    É um comando CLI que roda em uma pasta com trilhas GPX; os segmentos são definidos diretamente em um arquivo JSON e depois é possível listar o desempenho por segmento
    Registro as atividades com o OsmAnd, sincronizo via syncthing usando foldersync e então rodo o comando na pasta de destino
    A lógica de cálculo de segmentos pode servir de referência. Não vou dizer que é excelente, mas pode ser um bom recurso adicional para colocar em um servidor

  • Acho que o recurso matador do Strava são os segmentos
    Mesmo que você não se importe com o melhor tempo entre todos os usuários, ou seja, o KOM, é valioso poder comparar seu progresso ao longo do tempo em determinados trechos de estrada
    Ao olhar a frequência cardíaca junto com a percepção de esforço, dá para estimar em que nível está sua forma física atual, ou o quanto você está abaixo do seu melhor condicionamento

    • Alguém poderia criar um hub central aberto para segmentos e rankings por tipo de atividade
      Depois seria necessário haver uma forma de bloquear ou remover segmentos maliciosos e seus remetentes, e talvez um sistema de votação fosse possível
      Detectar segmentos durante uma atividade é complicado, então eu queria pesquisar mais. Talvez eu pudesse pegar emprestada uma explicação do ChatGPT, mas sei pelo menos que isso envolve caixas delimitadoras de latitude/longitude e a detecção de pontos de início e fim dentro delas
      Tenho uma lembrança vaga de que a Strava tinha alguma patente relacionada a segmentos
    • É de fato um recurso legal, mas a Strava o empurra com bastante força, a ponto de fazer você querer pagar 80 dólares por ano
  • Fico curioso para saber como isso poderia ser usado junto com ferramentas móveis como o Gadgetbridge[0]
    Esse app permite contornar os apps proprietários dos smartwatches e evita que dados de saúde e localização sejam enviados para serviços comerciais
    Mas ele não dá suporte aos principais relógios esportivos da Garmin, apenas a alguns dispositivos[1]. Então é preciso conectar o relógio por USB para transferir os trajetos e acessá-los no computador; não há suporte móvel
    [0] https://f-droid.org/en/packages/nodomain.freeyourgadget.gadg...
    [1] https://gadgetbridge.org/gadgets/

  • Integra com o Fediverse? O principal motivo para usar o Strava é seu caráter de rede social
    O Garmin Connect tem ferramentas de análise melhores que as do Strava. Ainda não experimentei o Endurain

    • Quero uma versão FOSS ActivityPub do Strava
  • É uma pena que o Runalyze não seja mais open source, mas as versões antigas ainda estão lá
    https://github.com/Runalyze/Runalyze