แอปที่ช่วยคาดการณ์สถิติการวิ่งแบบเรียลไทม์ - Pace Teller
(paceteller.tera.co.kr)สวัสดีครับ ผมเป็นนักพัฒนาเดี่ยว
ช่วงนี้ผมมีงานอดิเรกคือการวิ่ง แต่ในแอปดัง ๆ ที่มีอยู่เดิมไม่มีฟีเจอร์ที่ผมต้องการ เลยลองทำขึ้นมาเองครับ
พัฒนาด้วย Flutter โดยเวอร์ชันแรกสำหรับทดสอบคอนเซปต์ใช้เวลาทำประมาณ 2 สัปดาห์ แต่กว่าจะขัดเกลาและยกระดับให้พร้อมเปิดตัวใช้งานจริงก็ใช้เวลาราว 3~4 เดือน
ตอนนี้เปิดให้ดาวน์โหลดแล้วทั้งบน Apple และ Google Store โดยสามารถเข้าเว็บไซต์แล้วกดลิงก์ไปยังแต่ละสโตร์เพื่อดาวน์โหลดได้อย่างสะดวก
แนะนำบริการ
Pace Teller เป็นแอปที่บอกเวลาคาดการณ์ของการวิ่ง 10 กม., ฮาล์ฟมาราธอน และฟูลมาราธอนแบบเรียลไทม์ระหว่างที่คุณกำลังวิ่ง
ทำไมถึงสร้างขึ้นมา
- ตอนที่ผมกำลังทำชาเลนจ์ "วิ่งทุกวัน 5~6 กม." อยู่ จู่ ๆ ก็สงสัยขึ้นมาว่า ถ้าวิ่งต่อด้วยความเร็วช่วงท้ายแบบนี้ไปเรื่อย ๆ สถิติคาดการณ์สำหรับ 10 กม. จะออกมาเป็นเท่าไร
- แม้แอปวิ่งจะมีฟีเจอร์ให้ดูความเร็วเฉลี่ย แต่การคาดเดาสถิติจริงในหัวตามสภาพร่างกายช่วงท้ายไม่ใช่เรื่องง่าย
- คนที่วิ่งบ่อยอาจพอคาดได้คร่าว ๆ แต่ผมจึงพัฒนาแอปนี้ขึ้นมาเพื่อคนที่คำนวณเวลาคาดการณ์คร่าว ๆ ได้ยาก
- พอได้ฟังเวลาคาดการณ์ระหว่างวิ่งจริง ก็พบว่ามันช่วยเรื่องแรงจูงใจต่อเป้าหมายและการปรับสภาพการวิ่ง เช่น การผ่อนเพซ ได้มาก
- เดิมทีทำไว้ใช้คนเดียว แต่พอลองใช้แล้วดีมาก เลยรวบรวมความกล้ามาโพสต์ใน Show GN ครับ
วิธีคำนวณเวลาคาดการณ์
- ระยะทางที่วิ่งไปแล้วจะคำนวณด้วยความเร็วเฉลี่ย ส่วนระยะทางที่เหลือจะคำนวณโดยอิงเพซของช่วงล่าสุด 20% เพื่อแสดงเวลาคาดการณ์แบบเรียลไทม์
- นอกจากนี้ยังสามารถฟังสถิติผ่านการแจ้งเตือนด้วยเสียง (TTS) ได้
- อย่างไรก็ตาม ข้อจำกัดของวิธีคำนวณนี้คือ หากเพซช่วงท้ายดีมาก เวลาคาดการณ์ก็อาจออกมาดีเกินจริงได้
- ตอนนี้ยังไม่ได้คำนึงถึงกรณีที่เพซดีขึ้นหรือแย่ลงตามสภาพร่างกาย แต่ในอนาคตมีแผนจะปรับแก้ผ่านคำถามหลังจบการออกกำลังกายเพื่อสอบถามสภาพร่างกายของผู้ใช้
จุดเด่นของบริการ
- สามารถบันทึกตัวชี้วัดส่วนใหญ่ที่แอปรันนิ่งพื้นฐานทั่วไปมีให้ได้
- มีฟังก์ชันกรองตามการออกกำลังกาย มุมมองปฏิทิน และมุมมองสถิติ
- รองรับการนำเข้า/ส่งออกไฟล์ GPX (ทำไว้ให้ย้ายสถิติจากแอปนี้ไปบริการอื่นได้สะดวก)
- มีฟังก์ชันนำเข้าข้อมูลจาก Strava หรือส่งต่อไปยัง Strava แบบ (อัตโนมัติ)
- สำหรับบริการที่ส่งออก GPX ทั้งหมดให้เหมือน RunKeeper หากรับไฟล์มาแล้วแตกไฟล์บีบอัดเพื่อนำเข้า ก็สามารถใส่ข้อมูลทั้งหมดได้ในครั้งเดียว
- ผู้ใช้เครื่อง Galaxy สามารถนำเข้าข้อมูลสุขภาพและแมปข้อมูลอัตราการเต้นหัวใจกับข้อมูลการออกกำลังกายได้
- ใช้ SQLite DB ภายในแอป และไม่เก็บข้อมูลไว้บนเซิร์ฟเวอร์ภายนอก จึงทำงานได้รวดเร็ว
- หากผู้ใช้กรอก Open Weather Map API key ของตนเอง ระบบจะบันทึกข้อมูลอากาศให้อัตโนมัติด้วย (แต่ความแม่นยำอาจลดลงบ้าง)
- รองรับภาษาอังกฤษ/เกาหลี
ฟีเจอร์ที่วางแผนไว้ในอนาคต
- อยากลองทำแอปที่ทำงานบนสมาร์ตวอทช์
- โดยเฉพาะฟีเจอร์คาดการณ์เวลาฟูลมาราธอน มีคนบอกว่าผู้ใช้ Garmin สนใจกันมาก ถ้าจะทำก็น่าจะต้องสร้างแอป Garmin
- ตอนนี้ผมเปิดทั้งแอปบนนาฬิกาและแอปนี้ แล้วกดเริ่มสองแอปพร้อมกันก่อนออกวิ่ง
- มีแผนจะปรับปรุงจุดที่ยังไม่สมบูรณ์เกี่ยวกับ cadence และกราฟเพซ
- ฟังก์ชันเก็บข้อมูลไว้บนเซิร์ฟเวอร์ยังอยู่ระหว่างชั่งใจ แต่มีโอกาสสูงที่จะพัฒนา เพราะตอนนี้ถ้าไม่ส่งออกเป็นไฟล์ GPX ข้อมูลทั้งหมดอาจหายเมื่อถอนการติดตั้งแอป อย่างไรก็ตาม ถ้าตั้งค่าให้ส่งไป Strava อัตโนมัติ ข้อมูลก็จะถูกเก็บไว้ใน Strava จึงอุ่นใจได้
- กำลังพิจารณาเพิ่มฟีเจอร์โซเชียล เช่น ชุมชนหรือการอวดสถิติ แต่เพราะ Strava ทำส่วนนี้ไว้ดีอยู่แล้ว เลยยังลังเลว่าจำเป็นต้องเพิ่มหรือไม่
- การทำคอร์สวิ่งให้เป็น "Route" แล้วทำเป็นบริการแนวว่า "ย่านนี้มีคอร์สไหนน่าวิ่งบ้าง" ก็มีแอปอื่นทำอยู่แล้ว จึงยังลังเลในส่วนนี้เช่นกัน
ความรู้สึกหลังพัฒนา
- สิ่งที่รู้สึกระหว่างพัฒนาคือ... "ว้าว แอปแบบนี้ นักพัฒนาเดี่ยวทำได้เร็วขนาดนี้เลยเหรอ??" เป็นบริการที่ทำให้ผมได้สัมผัสความน่าทึ่งของการ 'พัฒนาด้วย AI' แบบที่หลายคนน่าจะเคยเจอเหมือนกัน
- เมื่อก่อนถ้าทำแอป iOS กับ Android แบบ native ทั้งสองฝั่ง พอทำอันหนึ่งเสร็จแล้วต้องไปทำอีกอัน มักจะมีช่วงหมดไฟอยู่บ่อย ๆ
- เลยลองเริ่มด้วย Flutter และในแง่ของ "ความเครียดทางจิตใจ" นั้นถือว่าพอใจมาก
- แต่แพ็กเกจและไลบรารีมีการอัปเกรดบ่อย ทำให้เกิดปัญหา dependency จนเหนื่อยพอสมควร และก็กังวลว่าจะเป็นแบบนี้ต่อไป
- ข้อมูลอย่างความเร็วที่ได้จาก GPS ไม่ได้สมบูรณ์แบบ จึงต้องลองหลายวิธีเพื่อเพิ่มความแม่นยำของสูตรคำนวณ ทำให้ใช้เวลามากในการยกระดับความสมบูรณ์ของแอป
- แน่นอนว่าผมพึ่งพา AI มากจนมีหลายครั้งที่วนไปวนมา แต่ก็ไม่สามารถไม่ใช้มันได้
- งานผูกระบบสมัครสมาชิกแบบรายเดือนเข้ากับทั้งสองสโตร์ยังคงเป็นเรื่องยากเสมอ
4 ความคิดเห็น
จริง ๆ แล้วเรื่องปัญหา dependency หรืออะไรทำนองนี้ ต่อให้ทำแบบเนทีฟก็ต้องกังวลเหมือนกันครับ.. ฮ่า
ไม่ทราบว่าพอจะแชร์ได้ไหมครับว่าเป็นแพ็กเกจไหน?
ใช่ครับ ก็เป็นอย่างนั้นแหละ ^^ หมายถึงแพ็กเกจไหนหรือครับ? กำลังจะบอกว่าคุณเจอปัญหา dependency ในแพ็กเกจไหนใช่ไหมครับ? มันเกิดขึ้นบ่อยมากด้วย แล้วก็เป็นปัญหาที่ผมเจอตอนที่ยังเข้าใจ Flutter ไม่มากนัก เลยจริง ๆ แล้วจำรายละเอียดไม่ค่อยได้ครับ ^^
Strava กำลังจะยุติการให้บริการในเกาหลีเร็วๆ นี้..!
ใช่ ตอนนี้ถูกถอดออกจากสโตร์ไปแล้ว แต่ไม่ได้หมายความว่าจะใช้งานบริการไม่ได้ ผู้ใช้เดิมยังใช้งานได้ และยังใช้งานผ่านเว็บได้ด้วย