Endurain: dịch vụ kiểu Strava có thể tự host
(github.com/joaovitoriasilva)- 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 Stravapython-garminconnectđể tích hợp Garmin Connectgpxpyđể nhập.gpxtcxreaderđể nhập.tcxfitdecodeđể 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
- https://demo.endurain.com
- Tên người dùng:
admin - Mật khẩu:
admin
- 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
- Dự án không bị ngừng lại, mà chỉ chuyển trọng tâm từ tính năng mới sang củng cố nền tảng
- Có thể xem giải thích liên quan tại Pausing new features so Endurain can keep growing
- 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
Ý 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
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
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...
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
Tôi nhớ Garmin cũng làm được, nhưng không rõ bản mới nhất thế nào
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à 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
Đ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
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
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ê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 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
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
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
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
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