2 คะแนน โดย GN⁺ 2023-12-25 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • Endurain เป็นบริการติดตามฟิตเนสแบบโฮสต์เอง ออกแบบมาให้ผู้ใช้ควบคุมข้อมูลและสภาพแวดล้อมการโฮสต์ได้เอง คล้าย Strava แต่เน้นความเป็นส่วนตัวและการปรับแต่ง
  • ฟรอนต์เอนด์ใช้ Vue.js ส่วนแบ็กเอนด์ใช้ Python FastAPI และใช้ PostgreSQL, Jaeger, Alembic, SQLAlchemy ฯลฯ เพื่อจัดการข้อมูลกิจกรรมและการติดตามพื้นฐาน
  • รองรับการเชื่อมต่อกับ Strava และ Garmin Connect รวมถึงอัปโหลดกิจกรรมด้วยตนเองผ่านไฟล์ .gpx, .tcx, .fit
  • มี Docker image และตัวอย่าง docker-compose.yml.example ให้ใช้งาน โดยจัดการการตั้งค่าผ่าน environment variables เพื่อให้ deploy และปรับแต่งได้ง่าย
  • GitHub repository เป็น mirror แบบอ่านอย่างเดียว ส่วนกิจกรรมของโปรเจกต์ดำเนินการบน Codeberg และขณะนี้อยู่ในสถานะ หยุดเพิ่มฟีเจอร์ชั่วคราว เพื่อเน้นเสริมความแข็งแรงของฐานระบบมากกว่าฟีเจอร์ใหม่

ฟีเจอร์ที่ Endurain มีให้

  • Endurain เป็นบริการติดตามฟิตเนสแบบโฮสต์เอง โดยมีเป้าหมายให้ผู้ใช้ควบคุมข้อมูลและสภาพแวดล้อมการโฮสต์ได้อย่างเต็มที่
  • เป็นบริการที่คล้าย Strava แต่เน้นที่ ความเป็นส่วนตัว และการปรับแต่ง
  • สามารถนำเข้าข้อมูลกิจกรรมได้ผ่านการเชื่อมต่อกับบริการภายนอกหรือการอัปโหลดไฟล์
    • รองรับการเชื่อมต่อ Strava
    • รองรับการเชื่อมต่อ Garmin Connect
    • รองรับการอัปโหลดไฟล์ .gpx, .tcx, .fit ด้วยตนเอง

สแต็กเทคโนโลยี

  • ฟรอนต์เอนด์ประกอบด้วย Vue.js, Notivue, Bootstrap CSS
  • แบ็กเอนด์สร้างโดยมี Python FastAPI เป็นแกนหลัก
    • Alembic
    • SQLAlchemy
    • Apprise
    • stravalib สำหรับเชื่อมต่อ Strava
    • python-garminconnect สำหรับเชื่อมต่อ Garmin Connect
    • gpxpy สำหรับนำเข้า .gpx
    • tcxreader สำหรับนำเข้า .tcx
    • fitdecode สำหรับนำเข้า .fit
  • ฐานข้อมูลใช้ PostgreSQL
  • ใช้ Jaeger สำหรับการ tracing และ monitoring พื้นฐาน

การ deploy และการตั้งค่า

  • มี Docker image สำหรับ deploy Endurain
  • ใน repository มีไฟล์ docker-compose.yml.example เพื่อดูตัวอย่างการ deploy
  • การตั้งค่าจัดการผ่าน environment variables จึงให้ความยืดหยุ่นและสะดวกต่อการปรับแต่ง
  • ดูข้อมูลเพิ่มเติมได้ที่ เอกสาร Endurain

สภาพแวดล้อมเดโม

  • มีเดโมให้ทดลองใช้ Endurain โดยไม่ต้องติดตั้ง
  • สภาพแวดล้อมเดโมจะถูกรีเซ็ตทุกวันตอนเที่ยงคืนตามเขตเวลา Europe/Lisbon
  • ไม่ควรเก็บข้อมูลสำคัญไว้ในเดโม

สถานะการดำเนินงานของโปรเจกต์และไลเซนส์

  • GitHub repository เป็น mirror แบบอ่านอย่างเดียว ส่วน issue, pull request และกิจกรรมของโปรเจกต์จัดการบน Codeberg
  • Endurain อยู่ในสถานะ หยุดเพิ่มฟีเจอร์ชั่วคราว
    • โปรเจกต์ไม่ได้หยุดพัฒนา แต่เปลี่ยนโฟกัสจากฟีเจอร์ใหม่ไปสู่การเสริมความแข็งแรงของฐานระบบ
    • ดูคำอธิบายที่เกี่ยวข้องได้ที่ Pausing new features so Endurain can keep growing
  • รองรับหลายภาษา และสามารถร่วมแปลได้ผ่าน Codeberg Translate
  • ไลเซนส์คือ AGPL-3.0
  • Endurain® เป็นเครื่องหมายการค้าของ João Vitória Silva
    • อนุญาตให้โฮสต์เองแบบไม่เชิงพาณิชย์และใช้ชื่อกับโลโก้เพื่อวัตถุประสงค์ส่วนบุคคล การศึกษา การวิจัย และชุมชน
    • ไม่อนุญาตให้ใช้ชื่อหรือโลโก้ Endurain ในเชิงพาณิชย์ เช่น การให้บริการโฮสติ้งแบบเสียเงิน ผลิตภัณฑ์ หรือบริการ โดยไม่ได้รับอนุญาตเป็นลายลักษณ์อักษรล่วงหน้า

1 ความคิดเห็น

 
GN⁺ 2023-12-25
ความคิดเห็นจาก Hacker News
  • กำลังค่อย ๆ ย้ายไปทาง intervals.icu(https://intervals.icu/)
    เพราะอิงกับการบริจาค เลยรู้สึกว่าค่อนข้างใกล้เคียงกับ “โอเพนซอร์ส” ในระดับหนึ่ง และรู้สึกว่าดีกว่า Strava มาก

    • “เพราะอิงกับการบริจาค เลยใกล้เคียงกับโอเพนซอร์ส” นี่หมายความว่ายังไงกันแน่ ไม่เข้าใจ
    • หา ลิงก์ซอร์สโค้ด บนเว็บไม่เจอ อยากรู้ว่าควรดูตรงไหน
    • อันนั้นต่างกันอยู่หน่อย Strava ใกล้เคียงกับ แพลตฟอร์มโซเชียล มากกว่า ส่วน intervals.icu ใกล้เคียงกับแพลตฟอร์มจัดการการฝึกซ้อมและความคืบหน้ามากกว่า
      เหตุผลที่ใช้ Strava คือเพื่อนกับครอบครัวช่วยสร้างแรงจูงใจ ไม่ใช่เพราะอยากได้ค่าพาวเวอร์/อัตราการเต้นหัวใจที่สูงขึ้น
  • ในฐานะเว็บแอปมีฟีเจอร์หนึ่งที่ขาดไป และคิดว่า การติดตามกิจกรรมที่สมาร์ตวอทช์บันทึกโดยอัตโนมัติ น่าจะทำได้ยาก
    วิธีอ้อมดูเหมือนจะเป็นการนำเข้าอัตโนมัติไปที่ Strava ก่อน แล้วค่อยเชื่อม Strava เข้ากับ Endurain

    • เว็บแอปก็นำเข้ากิจกรรมจากสมาร์ตวอทช์ Garmin โดยอัตโนมัติได้
      Garmin มีอินเทอร์เฟซ REST สำหรับ Connect เพื่อดึงกิจกรรม FIT
      https://developer.garmin.com/gc-developer-program/activity-a...
    • สมาร์ตวอทช์ไม่ได้อัปโหลดกิจกรรมไปที่ Strava โดยตรงไม่ใช่เหรอ? ปกติจะเชื่อมกับบริการคลาวด์ของผู้ผลิตอย่าง Garmin Connect แล้ว Strava ค่อยทำ การเชื่อมต่อผ่าน API กับฝั่งนั้นมากกว่า
      ดังนั้นสิ่งที่ขาดน่าจะเป็นการเชื่อมต่อระหว่าง Endurain กับแพลตฟอร์มของผู้ผลิตรายหลัก ๆ มากกว่า ส่วนขาดจริงไหมผมยังไม่ได้ดูโค้ด
    • ตอนเคยใช้เมื่อก่อน แอป Suunto ตั้งค่า อัปโหลดข้อมูลแบบกำหนดเอง ได้ และตอนนั้นการอัปโหลดไป Strava ก็ทำแบบนั้น
      จำได้ว่า Garmin ก็น่าจะทำได้เหมือนกัน แต่เวอร์ชันล่าสุดไม่แน่ใจ
    • แนวทางหนึ่งอาจเป็นการผสานเข้ากับ RunGap ซึ่งเชื่อมต่อกับหลายบริการ
  • ถ้าไม่ใช่นักพัฒนาอาชีพ และมีพื้นฐานแนวคิดการพัฒนาที่เรียนจากมหาวิทยาลัยเมื่อ 10 ปีก่อนประมาณนั้น การทำระบบที่ดูสมบูรณ์ขนาดนี้ได้ถือว่าทำได้ดี
    แต่ไม่รู้ว่าเป็นนักพัฒนาต้นฉบับหรือเปล่า แค่อยากรู้ว่าไม่กลัวว่าจะทำพลาดแบบที่จะย้อนมาขัดขาในภายหลังหรือ เช่น ปัญหาความปลอดภัย หรือข้อผิดพลาดที่แก้ยากในอนาคต

    • ผมเป็นโปรแกรมเมอร์สมัครเล่นมานาน แต่ไม่เคยมีเวลาพอที่จะเขียนโค้ดให้ชำนาญจริง ๆ
      เป็นประเภทที่เสียเวลาเป็นชั่วโมงกับ typo เล็ก ๆ หรือบั๊กที่ควรหาเจอง่าย ๆ
      ผมใช้ ChatGPT เป็นผู้ช่วยโครงการ ใช้สร้างโค้ด และช่วยชี้ปัญหาในโค้ด
      โดยเฉพาะเวลาทำฟีเจอร์ทั่วไป มันมักดูแล edge cases ได้ดีกว่าตอนผมทำคนเดียว และถ้าขอให้ช่วยอุดช่องโหว่ความปลอดภัย ก็ทำได้ดีกว่าระดับของผม
      เมื่อวานมันเสนอ 7 กลยุทธ์เพื่อกันบอตที่กรอกฟอร์ม และพอเอาบางข้อไปใช้ภายในไม่กี่นาที ปัญหาบอตก็หยุดทันที
      ความผิดพลาดย่อมเกิดขึ้นได้อยู่แล้ว แต่เครื่องมือ AI เมื่อใช้ควบคู่กับการคิดเชิงวิพากษ์ของตัวเอง ก็ช่วยลดความผิดพลาดเหล่านั้นได้ ถ้าคอยแก้ AI บ่อย ๆ ขอให้ช่วยในมุมมองการป้องกันปัญหาบางประเภท หรือเขียนพรอมป์จากความรู้เดิมที่มี ก็จะได้คำตอบที่ดีกว่ามาก
    • นักพัฒนาทุกคนทำพลาด ประสบการณ์แค่ย้ายเส้นฐานของความผิดพลาดจากแบบที่ชัดเจน ไปสู่แบบที่ชัดเจนน้อยลงเท่านั้น
      สิ่งที่น่าประทับใจคือเขาสร้างระบบขึ้นมา และน่าจะเปิดรับฟีดแบ็กจากชุมชน ซึ่งอาจนำไปสู่ผลลัพธ์ที่ดีกว่านักพัฒนามีประสบการณ์ที่กังวลเรื่องความปลอดภัยแล้วทำคนเดียวอยู่หลายปี
      ผมคิดว่าสิ่งที่สำคัญกว่าความผิดพลาดเองคือ ความเร็วในการค้นพบและแก้ไข และสิ่งสำคัญคือการสร้างระบบที่เสริมความแข็งแรงให้ตัวเอง เช่น linter, unit test, type system, CI/CD เพื่อไม่ให้เรื่องเดิมเกิดซ้ำ พูดเล่น ๆ ว่านี่คือการพัฒนาแบบตั้งอยู่บนความถ่อมตัว
    • ถ้าถูกความกลัวแบบนี้ครอบงำ ในทางปฏิบัติก็จะสร้างอะไรไม่ได้เลย
      นักพัฒนาที่มีประสบการณ์มากที่สุดก็ยังทำพลาดแบบนี้ ถ้าคิดว่าตัวเองพ้นขั้นนั้นไปแล้ว ก็ต้องมีประสบการณ์มากกว่านี้ถึงจะเห็นความจริง
      วิธีเรียนรู้ที่ดีที่สุดคือสร้างโปรเจกต์ ทำพลาด แล้วหาวิธีแก้ ยิ่งแก้ยากเท่าไร โปรเจกต์ถัดไปก็จะยิ่งคิดเรื่องนั้นตั้งแต่การออกแบบแรกเริ่ม
    • ลองกวาดดู PHP คร่าว ๆ เหมือนว่าจะใช้ SHA-2 สำหรับแฮชรหัสผ่าน ดังนั้นโอกาสมีปัญหาแบบนั้นก็ดูค่อนข้างสูง
      ไม่ว่าจะเป็น AI หรือมือใหม่ สุดท้ายก็แค่ต่างกันที่ระดับว่าผิดมากแค่ไหนเท่านั้น
    • ไม่รู้ว่าควรกลัวอะไร ความเสี่ยงจริง ๆ คืออะไร?
  • ชื่อนี้ยอดเยี่ยม ดูเหมือนเป็นการเล่นคำที่ผสม endurance กับชื่อของแชมป์จักรยานผู้ยิ่งใหญ่ชาวสเปน Miguel Induráin
    https://en.m.wikipedia.org/wiki/Miguel_Indur%C3%A1in

    • เขาคือสุดยอดในหมู่สุดยอดของยุคที่ทุกคนโด๊ปกันอย่างบ้าคลั่ง
      เคยทำงานกับ Dr. Conconi ผู้บุกเบิก EPO และแม้ไม่เคยถูกจับได้ แต่ก็ดูไม่น่าเป็นไปได้ว่าจะสะอาด
  • นี่ไม่ใช่แค่ ฟรอนต์เอนด์ทางเลือก ที่มีฟีเจอร์สำรองข้อมูลติดมาด้วยมากกว่าเหรอ?
    สุดท้ายดูเหมือนว่าต้องให้ข้อมูลกับ Strava ก่อน แล้วค่อยส่งมาที่เครื่องมือนี้

    • ดูเหมือนอย่างนั้น ปัญหาคือสัญญา Strava API (https://www.strava.com/legal/api) ระบุห้ามอย่างชัดเจนไม่ให้ทำซ้ำฟีเจอร์ที่ Strava มี
  • ผมก็มีทางเลือกที่ค่อนข้างหยาบ ๆ ที่ทำเองและไม่ต้องใช้ Strava เลย: https://github.com/cfe84/gpx-tools/blob/main/README.md
    เป็น คำสั่ง CLI ที่รันในโฟลเดอร์ที่มีแทร็ก GPX และสามารถนิยามเซกเมนต์เองในไฟล์ JSON แล้วแสดงผลลัพธ์ตามแต่ละเซกเมนต์ได้
    ผมบันทึกกิจกรรมด้วย OsmAnd ใช้ foldersync ซิงก์ผ่าน syncthing แล้วรันในโฟลเดอร์ปลายทาง
    อาจเอา logic การคำนวณเซกเมนต์ไปอ้างอิงได้ ผมไม่ได้อ้างว่ามันยอดเยี่ยม แต่ก็อาจเป็นฟีเจอร์เสริมที่เหมาะจะใส่ในเซิร์ฟเวอร์

  • คิดว่าฟีเจอร์เด็ดของ Strava คือ เซกเมนต์
    แม้จะไม่ได้สนใจสถิติที่เร็วที่สุดในบรรดาผู้ใช้ทั้งหมด หรือ KOM แต่การได้เปรียบเทียบความก้าวหน้าของตัวเองในช่วงถนนหนึ่ง ๆ เมื่อเวลาผ่านไปก็มีคุณค่า
    หากดูอัตราการเต้นหัวใจร่วมกับระดับความหนักที่รู้สึกได้ ก็พอประเมินได้ว่าฟิตเนสปัจจุบันอยู่ประมาณไหน หรือห่างจากช่วงสภาพร่างกายดีที่สุดแค่ไหน

    • น่าจะมีใครสักคนทำฮับกลางแบบเปิดสำหรับ เซกเมนต์และตารางอันดับ แยกตามประเภทกิจกรรม
      จากนั้นก็ต้องมีวิธีบล็อกหรือลบเซกเมนต์และผู้ส่งที่เป็นอันตราย และอาจทำระบบโหวตได้ด้วย
      การตรวจจับเซกเมนต์ระหว่างทำกิจกรรมนั้นยุ่งยาก เลยอยากศึกษาต่อ บางทีอาจยืมคำอธิบายจาก ChatGPT ได้ แต่เท่าที่รู้คือเกี่ยวข้องกับวิธีใช้กรอบขอบเขตละติจูด/ลองจิจูด แล้วตรวจจับจุดเริ่มต้นและจุดสิ้นสุดภายในกรอบนั้น
      จำได้เลือน ๆ ว่า Strava เคยมีสิทธิบัตรบางอย่างเกี่ยวกับเซกเมนต์
    • ยอมรับว่าเป็นฟีเจอร์ที่เจ๋ง แต่ Strava ก็ผลักดันมันค่อนข้างหนักจนทำให้อยากจ่าย 80 ดอลลาร์ ต่อปี
  • สงสัยว่าจะใช้งานร่วมกับเครื่องมือบนมือถืออย่าง Gadgetbridge[0] ได้อย่างไร
    แอปนี้ช่วยเลี่ยงการใช้แอปปิดของสมาร์ตวอตช์ และไม่ต้องอัปโหลดข้อมูลสุขภาพ/ตำแหน่งไปยังบริการเชิงพาณิชย์
    แต่ไม่รองรับนาฬิกาสปอร์ตหลัก ๆ ของ Garmin และรองรับเพียงอุปกรณ์บางส่วนเท่านั้น[1] ดังนั้นจึงต้องเชื่อมนาฬิกาผ่าน USB เพื่อย้ายแทร็ก แล้วเข้าถึงจากคอมพิวเตอร์ และไม่มีการรองรับบนมือถือ
    [0] https://f-droid.org/en/packages/nodomain.freeyourgadget.gadg...
    [1] https://gadgetbridge.org/gadgets/

  • เชื่อมกับ Fediverse ได้ไหม? เหตุผลหลักที่ใช้ Strava คือความเป็นโซเชียลเน็ตเวิร์ก
    Garmin Connect มีเครื่องมือวิเคราะห์ที่ดีกว่า Strava ส่วน Endurain ยังไม่เคยลองใช้

    • อยากได้ Strava เวอร์ชัน FOSS ActivityPub
  • เสียดายที่ Runalyze ไม่เป็นโอเพนซอร์สอีกต่อไป แต่เวอร์ชันเก่ายังอยู่
    https://github.com/Runalyze/Runalyze