MigMikael / CodeRoomService

web service for coderoom backend
0 stars 0 forks source link

การอัพเดท progress เมื่อมีการเพิ่มโจทย์ใหม่ #11

Open MigMikael opened 7 years ago

MigMikael commented 7 years ago

สมมติว่าตอนนี้ใน Lesson มี Problem ทั้งหมด 2 ข้อ นักศึกษาส่งแล้วถูกต้องหนึ่งข้อ ดังนั้น progress ของนักศึกษาใน Lesson นั้นจึงเป็น 50% (1/2)

ต่อมาอาจารย์ได้เพิ่ม problem เข้ามาอีกหนึ่งข้อรวมเป็น 3 ข้อ แต่ progress ของนักศึกษาไม่อัพเดทตาม กล่าวคือยังเป็น 50% อยู่เช่นเดิม

progress ที่ถูกต้องควรจะเป็น 33.33% (1/3)

pinyotae commented 7 years ago

ปัญหาทำนองนี้ ค่อนข้างจะซับซ้อนทีเดียวในกรณีที่เราจะคำนวณค่า Progress เก็บไว้ แต่โดยรวมแล้วผมคิดว่าการคิดค่า progress เก็บไว้ตั้งแต่แรกแบบที่คุณคิดจะทำก็ดีกว่า query มาคำนวณใหม่ทุกครั้ง

แนวทางที่ควรเป็นก็คือทุกครั้งที่มีการเพิ่ม ลดโจทย์ เราจะต้องสั่งเรียก function คำนวณค่าพวกนี้ในบทเรียนใหม่ทุกครั้ง เรื่องที่ซับซ้อนกว่าก็คือว่า มันมี progress ระดับวิชาด้วย (เข้าใจว่าเราเคยพูดว่ามีการดูความก้าวหน้าแบบรวมในรายวิชา) ดังนั้นมันจะต้องเรียกการคำนวณ progress ระดับวิชาซ้าอีกต่อหนึ่ง

ดูเหมือนจะคำนวณนาน แต่เนื่องจากในแต่ละวิชาผู้เรียนเราคงมีไม่เกินพัน โจทย์มีไม่เกิน 200 รวมแล้วก็คำนวณกันมากสุดที่ 1000 x 200 = 200,000 records น่าจะทำเสร็จใน 1 - 2 วินาที ไม่น่าจะสร้างปัญหาเรื่อง performance

MigMikael commented 7 years ago

[อัพเดทความคืบหน้า] ปัญหานี้เกิดจากการเรียกใช้เมธอด updateProgress เฉพาะตอนที่นักศึกษาส่งคำตอบเท่านั้น ทำให้เมื่ออาจารย์เพิ่มโจทย์ใหม่ progress ของนักศึกษาไม่มีการเปลี่ยนแปลงตามไปด้วย . ผมแก้ปัญหานี้โดยการแยกเมธอด updateProgress ออกมาจาก SubmissionController เดิม ไปไว้ใน Trait ที่สร้างมาใหม่เพื่อให้เมธอดนี้สามารถเรียกใช้ได้ในหลายๆ คอนโทรลเลอร์ . จากนั้นเพิ่มการเรียกใช้เมธอด updateProgress ใน ProblemController ที่รับผิดชอบในการเพิ่มโจทย์เข้าในระบบ . ผมทดลองโดยการเพิ่มโจทย์ลงระบบ จากเดิมที่มีโจทย์ 3 ข้อนักศึกษาทำได้ 2 ข้อ ทำให้ progress เป็น 66.66% screenshot 214 . จากนั้นเพิ่มโจทย์เข้าไปอีกหนึ่งข้อ เป็น 4ข้อ ทำให้ progress เป็น 50% screenshot 215

MigMikael commented 7 years ago

@Thanadej8 ตรงนี้ไงที่พี่เคยบอกว่า พอ Progress มันเป็นทศนิยมแล้วมันล้นๆ วง ใน UI ใหม่ยังเป็นวงๆ แบบนี้อยู่มะ

Thanadej8 commented 7 years ago

เมื่อ พ. 2 ส.ค. 2560 เวลา 11:24 Chanachai Puttaruksa < notifications@github.com> เขียนว่า:

@Thanadej8 https://github.com/thanadej8 ตรงนี้ไงที่พี่เคยบอกว่า พอ Progress มันเป็นทศนิยมแล้วมันล้นๆ วง ใน UI ใหม่ยังเป็นวงๆ แบบนี้อยู่มะ

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/MigMikael/CodeRoomService/issues/11#issuecomment-319563549, or mute the thread https://github.com/notifications/unsubscribe-auth/ANY2H1-YaroQjqWF8KgKwAOZh1JHjYWaks5sT_njgaJpZM4Opk2k .

ไม่เป็นแล้ววว

pinyotae commented 7 years ago

Progress ไม่ควรจะมีทศนิยมเกิน 1 ตำแหน่ง จะไม่ให้มีทศนิยมแล้วใช้การปัดเศษทิ้งก็ได้

โดยส่วนตัวผมเห็นว่าถ้าจะใช้วงกลม เรามีเลขนัยสำคัญ 2 ตำแหน่งก็พอดังนี้

  1. ถ้าหากว่า progress น้อยกว่า 10% ให้เขียนเป็น 9.3% อะไรทำนองนี้
  2. ถ้าหากว่า progress มีถึง 10% ให้เขียนเป็น 93% อะไรทำนองนี้
  3. สำหรับกรณีที่ความก้าวหน้าน้อยกว่า 1% เราต้องทดลองเพิ่มเติมว่าจะเขียนเป็น 0.93% หรือ 0.9% ทั้งนี้ขึ้นอยู่กับว่าการเขียน 0.93% ทำให้มันดูรกเกินไปหรือว่าละเอียดเกินไปหรือไม่ ซึ่งโดยรวมแล้วโจทย์มีไม่เกิน 200 ข้อ ดังนั้นแตละข้อเฉลี่ยแล้วจะทำให้ progress ขยับไปทีละ 0.5% การใช้ทศนิยมตำแหน่งเดียวเป็น 0.9% ดูแล้วน่าจะมีภาษีดีกว่า
MigMikael commented 7 years ago

ตอนนี้ผมแก้ไขให้ progress เป็นแบบที่อาจารย์ต้องการแล้วครับ ก็คือถ้า progress < 10% จะมีทศนิยม 1 ตำแหน่ง ถ้า progress >= 10% จะไม่มีทศนิยมครับ