2 điểm bởi GN⁺ 2023-12-25 | 1 bình luận | Chia sẻ qua WhatsApp
  • Endurain là một dịch vụ theo dõi thể dục tự host được thiết kế để người dùng tự kiểm soát dữ liệu và môi trường lưu trữ, tương tự Strava nhưng tập trung vào quyền riêng tư và khả năng tùy biến
  • Frontend được xây dựng bằng Vue.js, backend dựa trên Python FastAPI, sử dụng PostgreSQL, Jaeger, Alembic, SQLAlchemy và nhiều công nghệ khác để quản lý dữ liệu hoạt động và theo dõi cơ bản
  • Hỗ trợ tích hợp với Strava và Garmin Connect, đồng thời cũng có thể tải hoạt động lên thủ công qua các tệp .gpx, .tcx, .fit
  • Có cung cấp Docker image và ví dụ docker-compose.yml.example, với cấu hình được xử lý qua biến môi trường để giúp việc triển khai và tùy biến trở nên dễ dàng
  • Kho GitHub là mirror chỉ đọc, còn hoạt động của dự án diễn ra trên Codeberg; hiện dự án đang ở trạng thái đóng băng tính năng tạm thời để tập trung củng cố nền tảng

Các tính năng Endurain cung cấp

  • Endurain là một dịch vụ theo dõi thể dục tự host, hướng tới việc để người dùng toàn quyền kiểm soát dữ liệu và môi trường lưu trữ
  • Đây là dịch vụ tương tự Strava, nhưng trọng tâm là quyền riêng tư và khả năng tùy biến
  • Dữ liệu hoạt động có thể được nhập vào thông qua tích hợp với dịch vụ bên ngoài hoặc tải tệp lên
    • Hỗ trợ tích hợp Strava
    • Hỗ trợ tích hợp Garmin Connect
    • Hỗ trợ tải thủ công các tệp .gpx, .tcx, .fit

Cấu trúc kỹ thuật

  • Frontend gồm Vue.js, Notivue, Bootstrap CSS
  • Backend được xây dựng xoay quanh Python FastAPI
    • Alembic
    • SQLAlchemy
    • Apprise
    • stravalib để tích hợp Strava
    • python-garminconnect để tích hợp Garmin Connect
    • gpxpy để nhập .gpx
    • tcxreader để nhập .tcx
    • fitdecode để nhập .fit
  • Cơ sở dữ liệu sử dụng PostgreSQL
  • Jaeger được dùng cho theo dõi và giám sát cơ bản

Triển khai và cấu hình

  • Có cung cấp Docker image để triển khai Endurain
  • Trong kho có tệp docker-compose.yml.example để tham khảo ví dụ triển khai
  • Cấu hình được xử lý qua biến môi trường, mang lại tính linh hoạt và thuận tiện cho việc tùy biến
  • Thông tin chi tiết có thể xem tại Endurain documentation

Môi trường demo

  • Có bản demo để trải nghiệm Endurain mà không cần cài đặt
  • Môi trường demo được đặt lại mỗi ngày vào lúc nửa đêm theo múi giờ Europe/Lisbon
  • Không nên lưu dữ liệu quan trọng trong môi trường demo

Trạng thái vận hành dự án và giấy phép

  • Kho GitHub là mirror chỉ đọc, còn issue, pull request và hoạt động dự án được quản lý trên Codeberg
  • Endurain hiện ở trạng thái đóng băng tính năng tạm thời
  • Có hỗ trợ đa ngôn ngữ và có thể đóng góp bản dịch qua Codeberg Translate
  • Giấy phép là AGPL-3.0
  • Endurain® là thương hiệu của João Vitória Silva
    • Việc tự host phi thương mại cho mục đích cá nhân, giáo dục, nghiên cứu và cộng đồng, cũng như sử dụng tên và logo, đều được cho phép
    • Việc sử dụng tên hoặc logo Endurain cho mục đích thương mại, như cung cấp hosting trả phí, sản phẩm hoặc dịch vụ, sẽ không được phép nếu không có chấp thuận trước bằng văn bản

1 bình luận

 
GN⁺ 2023-12-25
Ý kiến Hacker News
  • Đang dần chuyển sang dùng intervals.icu(https://intervals.icu/)
    Vì dựa trên quyên góp nên ở mức nào đó cảm giác “gần với mã nguồn mở” hơn, và thấy tốt hơn Strava rất nhiều

    • Tôi thật sự không hiểu “dựa trên quyên góp nên gần với mã nguồn mở” rốt cuộc có nghĩa là gì
    • Tôi không tìm thấy liên kết mã nguồn trên trang, nên muốn biết phải xem ở đâu
    • Cái đó hơi khác. Strava gần với một nền tảng mạng xã hội hơn, còn intervals.icu gần với nền tảng quản lý việc luyện tập và tiến độ hơn
      Lý do dùng Strava là vì bạn bè và gia đình tạo động lực, chứ không phải vì muốn có chỉ số công suất/nhịp tim cao hơn
  • Có một tính năng còn thiếu nếu là ứng dụng web, đó là tự động theo dõi hoạt động được đồng hồ thông minh ghi lại có lẽ sẽ khó
    Cách lách có vẻ là tự động nhập vào Strava trước rồi kết nối Strava với Endurain

    • Ứng dụng web cũng có thể tự động nhập hoạt động từ đồng hồ thông minh Garmin
      Garmin cung cấp giao diện REST cho Connect để nhập hoạt động FIT
      https://developer.garmin.com/gc-developer-program/activity-a...
    • Đồng hồ thông minh đâu có tải hoạt động trực tiếp lên Strava đúng không? Thường nó kết nối với dịch vụ đám mây của hãng như Garmin Connect, rồi Strava tích hợp API với bên đó
      Vậy nên phần còn thiếu có vẻ là tích hợp giữa Endurain và các nền tảng của những hãng lớn. Tôi chưa xem mã nên không chắc nó có thực sự thiếu hay không
    • Khi tôi dùng trước đây, ứng dụng Suunto có thể thiết lập tải lên dữ liệu tùy chỉnh, và hồi đó tải lên Strava cũng theo cách đó
      Tôi nhớ Garmin cũng làm được, nhưng không rõ bản mới nhất thế nào
    • Một hướng là tích hợp với RunGap, dịch vụ kết nối với nhiều nền tảng khác nhau
  • Nếu không phải là lập trình viên chuyên nghiệp và chỉ có mức kiến thức khái niệm lập trình học ở đại học từ 10 năm trước, thì làm ra được một hệ thống trông hoàn thiện thế này là rất đáng khen
    Chỉ là không rõ có phải lập trình viên gốc hay không, nhưng tôi tò mò liệu bạn có sợ rằng mình đã mắc những sai lầm sẽ cản trở về sau không. Ví dụ như vấn đề bảo mật hoặc các lỗi khó sửa sau này

    • Tôi đã là lập trình viên nghiệp dư trong thời gian dài, nhưng chưa bao giờ có thời gian để thực sự giỏi viết code
      Tôi là kiểu người có thể mất cả tiếng vì lỗi gõ nhầm nhỏ hoặc bug lẽ ra phải tìm ra dễ dàng
      Tôi dùng ChatGPT để hỗ trợ dự án, sinh code và chỉ ra vấn đề trong code
      Đặc biệt khi triển khai các chức năng phổ biến, nó thường xử lý trường hợp biên tốt hơn so với khi tôi tự làm một mình, và cả khi nhờ nó vá lỗ hổng bảo mật thì kết quả cũng vẫn tốt hơn trình độ của tôi
      Hôm qua nó còn đề xuất 7 chiến lược để chặn bot điền form, và chỉ sau vài phút áp dụng vài cái trong số đó thì vấn đề bot đã dừng hẳn
      Sai sót tất nhiên vẫn xảy ra, nhưng công cụ AI, nếu dùng cùng với tư duy phản biện của bản thân, sẽ giúp giảm những sai sót đó. Nếu thường xuyên chỉnh lại AI, nhờ nó hỗ trợ theo góc nhìn ngăn chặn một loại vấn đề cụ thể, hoặc viết prompt dựa trên kiến thức sẵn có, thì bạn sẽ nhận được câu trả lời tốt hơn nhiều
    • Mọi lập trình viên đều mắc sai lầm. Kinh nghiệm chỉ chuyển đường cơ sở của những lỗi hiển nhiên sang phía những lỗi kém hiển nhiên hơn mà thôi
      Điều ấn tượng là bạn đã xây dựng được cả hệ thống và có lẽ còn mở nó ra cho phản hồi từ cộng đồng, điều này có thể dẫn tới kết quả tốt hơn so với một lập trình viên giàu kinh nghiệm lo về bảo mật rồi tự làm một mình suốt nhiều năm
      Quan trọng hơn bản thân sai lầm là tốc độ phát hiện và sửa chữa. Và điều quan trọng là dựng nên các hệ thống tự củng cố như linter, kiểm thử đơn vị, hệ thống kiểu, CI/CD để chuyện tương tự không lặp lại. Tôi đùa gọi đó là phát triển dựa trên sự khiêm tốn
    • Nếu để nỗi sợ này chi phối thì trên thực tế bạn sẽ chẳng làm được gì cả
      Ngay cả những lập trình viên nhiều kinh nghiệm nhất cũng mắc những lỗi như vậy. Nếu bạn nghĩ mình đã qua giai đoạn đó rồi, thì để nhìn ra sự thật bạn cần thêm nhiều kinh nghiệm hơn nữa
      Cách học tốt nhất là làm dự án, mắc lỗi, rồi tìm cách sửa. Càng khó sửa thì ở dự án sau bạn sẽ càng tính đến điều đó ngay từ khâu thiết kế ban đầu
    • Tôi lướt qua PHP thì có vẻ họ đang dùng SHA-2 để băm mật khẩu, nên khả năng có kiểu vấn đề đó là khá cao
      Dù là AI hay người mới bắt đầu thì rốt cuộc cũng chỉ là khác nhau ở mức độ sai bao nhiêu mà thôi
    • Tôi không biết cần phải sợ điều gì. Rủi ro thực tế là gì?
  • Tên gọi rất hay. Có vẻ là một cách chơi chữ ghép giữa endurance và tên nhà vô địch đua xe đạp vĩ đại của Tây Ban Nha Miguel Induráin
    https://en.m.wikipedia.org/wiki/Miguel_Indur%C3%A1in

    • Ông ấy là số một trong số những người xuất sắc nhất ở thời kỳ mà ai cũng doping điên cuồng
      Ông từng làm việc với người tiên phong về EPO là Dr. Conconi, và dù chưa từng bị phát hiện, khả năng ông ấy trong sạch có vẻ không cao
  • Cái này chẳng phải gần với một frontend thay thế có kèm chức năng sao lưu hơn sao?
    Xét cho cùng, có vẻ bạn vẫn phải đưa dữ liệu vào Strava trước rồi công cụ này mới dùng được

    • Có vẻ vậy. Vấn đề là thỏa thuận API của Strava (https://www.strava.com/legal/api) nêu rõ việc sao chép các chức năng mà Strava có là bị cấm một cách minh thị
  • Tôi cũng có một giải pháp thay thế khá thô do tự làm, hoàn toàn không cần Strava: https://github.com/cfe84/gpx-tools/blob/main/README.md
    Đây là một lệnh CLI chạy trong thư mục có chứa các track GPX, và có thể định nghĩa segment trực tiếp trong file JSON rồi liệt kê thành tích theo từng segment
    Tôi ghi lại hoạt động bằng OsmAnd, đồng bộ qua syncthing bằng foldersync, rồi chạy nó trong thư mục đích để sử dụng
    Có thể tham khảo logic tính toán segment. Tôi không dám nói nó xuất sắc, nhưng biết đâu có thể là một tính năng bổ sung phù hợp để đưa lên server

  • Tôi nghĩ tính năng sát thủ của Strava là segment
    Ngay cả khi không quan tâm đến thành tích nhanh nhất trong toàn bộ người dùng, tức KOM, thì việc có thể so sánh tiến bộ của bản thân theo thời gian trên một đoạn đường cụ thể vẫn rất có giá trị
    Nếu xem cùng nhịp tim và mức gắng sức cảm nhận được, bạn có thể ước lượng thể lực hiện tại đang ở mức nào, hoặc đã giảm bao nhiêu so với lúc đạt phong độ đỉnh cao

    • Chỉ cần ai đó tạo ra một trung tâm mở, tập trung cho segment và bảng xếp hạng theo từng loại hoạt động
      Sau đó sẽ cần cách chặn hoặc xóa các segment xấu và người gửi chúng, và cũng có thể dùng hệ thống bỏ phiếu
      Việc phát hiện segment trong lúc hoạt động khá phức tạp nên tôi muốn tìm hiểu thêm. Có lẽ có thể mượn phần giải thích của ChatGPT, nhưng tôi chỉ biết đại khái là nó liên quan đến hộp giới hạn vĩ độ/kinh độ và cách phát hiện điểm bắt đầu·kết thúc bên trong đó
      Tôi nhớ mang máng rằng Strava từng có một số bằng sáng chế liên quan đến segment
    • Đúng là một tính năng rất hay, nhưng Strava quảng bá nó khá mạnh khiến người ta muốn trả 80 USD mỗi năm
  • Tôi tò mò không biết có thể dùng cùng với các công cụ di động như Gadgetbridge[0] thế nào
    Ứng dụng này giúp bỏ qua app độc quyền của đồng hồ thông minh và tránh đưa dữ liệu sức khỏe·vị trí lên các dịch vụ thương mại
    Nhưng nó không hỗ trợ các đồng hồ thể thao chủ lực của Garmin mà chỉ hỗ trợ một số thiết bị[1]. Vì vậy phải kết nối đồng hồ qua USB để chuyển track và truy cập trên máy tính, chứ không có hỗ trợ di động
    [0] https://f-droid.org/en/packages/nodomain.freeyourgadget.gadg...
    [1] https://gadgetbridge.org/gadgets/

  • Có tích hợp với Fediverse không? Lý do chính để dùng Strava là vì tính chất mạng xã hội của nó
    Garmin Connect có công cụ phân tích tốt hơn Strava. Tôi vẫn chưa thử Endurain

    • Tôi muốn có một phiên bản FOSS ActivityPub của Strava
  • Thật tiếc là Runalyze không còn là mã nguồn mở nữa, nhưng các phiên bản cũ vẫn còn
    https://github.com/Runalyze/Runalyze