หาบั๊กด้วย git กับคำสั่ง git bisect

Screenshot from 2016-06-12 18-12-29

ถ้าใครใช้ Twitica Desktop 3 (ชื่อชั่วคราว) อาจจะเห็นบั๊กในรุ่นใหม่ว่า tweet ที่มีข้อความซ้อนกันมันจะไม่ซ่อนภาพประกอบ ซึ่งปกติถ้าเลื่อนออกไปแล้วมันจะซ่อนเอง

ทีนี้พอจะแก้ผมก็ตั้งสมมุติฐานไว้ว่า commit สุดท้ายก่อนจะออก คือระบบ action มันทำพัง แต่คิดไปคิดมาแล้วก็ไม่น่าจะเกี่ยวกัน คิดไปคิดมาแล้วก็เลยอยากแนะนำให้รู้จักเครื่องมือช่วยงานอย่าง git bisect ครับ

วิธีใช้งานมีดังนี้ครับ


เปิดใช้ bisect

ก่อนอื่นให้สั่ง git bisect start เพื่อเริ่มกระบวนการ bisect ก่อนครับ จากนั้นเราจะต้องแนะนำให้มันรู้สถานะต่างๆ ก่อน

Screenshot from 2016-06-12 18-16-00

คำสั่งแรกคือ git bisect bad แล้วตามด้วยเลข commit (หรือถ้าไม่ใส่จะใช้เป็น commit ปัจจุบัน) เพื่อบอกว่า commit นี้มีบั๊กอยู่

คำสั่งถัดมาคือ git bisect good v0.4.1 ด้านหลังนี้ให้ระบุเป็นเลข commit ครับ หรืออย่างผมได้ tag v0.4.1 ไว้ใน commit ของรุ่นที่แล้ว (ที่ผมมั่นใจว่ามันไม่มีบั๊ก)

พอ git มีช่วงให้ทำงานแล้วก็จะกรอกลับไปตรงกลาง (แบบ Binary search) ระหว่าง 2 commit นั้นครับ

เทส

หลังจากนั้นแล้วให้เทส commit นั้นครับ จะเป็น unit testing ก็ได้ หรือผมไม่มี unit test ก็ compile-run ดูเลยก็ได้ว่ายังบั๊กอยู่ไหม เสร็จแล้วก็รายงานผลด้วยคำสั่งเดิมครับ git bisect good หรือ git bisect bad ทำซ้ำจนกระทั่ง bisect เสร็จ

Screenshot from 2016-06-12 18-23-07

เมื่อล้อมเข้ามาถึงขั้นสุดท้ายแล้ว bisect ก็จะแสดงผล commit ที่ทำให้เกิดบั๊กขึ้นมาครับ จะเปิด diff ดูก็ได้ครับ

Screenshot from 2016-06-12 18-24-29

(ในภาพนี้ใช้คำสั่ง git show ตามด้วยเลข commit)

ดู diff แป๊บเดียวเห็นเลยว่าผมแอบเพิ่ม shouldComponentUpdate ไป (แถม commit message ก็ไม่ได้บอกด้วยนะ) แล้วมันทำให้ tweet ที่ซ้อนอยู่ไม่อัพเดต

แก้บั๊ก

เมื่อเจอแล้วอย่าลืม git bisect reset เพื่อออกจาก bisect ก่อนนะครับ ไม่อย่างนั้นเราจะทำงานใน commit ที่บั๊กอยู่ ก่อนจะ reset จะสั่ง git bisect log เพื่อเก็บ log ไว้ดูเล่นก็ได้ครับ

Screenshot from 2016-06-12 18-26-31

สรุปแล้วคำสั่ง git bisect จะช่วยย้อน commit ให้เรา โดยกระโดดเป็นช่วงๆ เพื่อให้สามารถหาต้นตอของบั๊กได้อย่างสะดวกครับ ในเคสของผมนี่ถ้าไปนั่งไล่โค้ดคงจะอีกนานกว่าจะเจอสาเหตุ

New Year Resolution

ผ่านไปไม่ถึงครึ่งปีก็ลืมแล้วว่าเขียน New Year Resolution ไว้ว่าอะไร

ทั้งๆ ที่ปีก่อนจำบางอันได้จนจบปี

พบว่า goal ปีนี้เขียนไว้แบบไม่มีวิสัยทัศน์มาก เหมือนเขียนว่าพรุ่งนี้จะทำอะไร และเหมือนจะเป็นแบบนี้มาหลายปี

จริงๆ น่าจะเป็นความกลัวส่วนตัวมากกว่า คือไม่กล้าเขียนอะไรแบบ Mark Zuckerberg เพราะรู้ว่าเขียนไปมันจะลืมและจะเฟลแน่นอน

ดูง่ายๆ ก็ Twitica ที่เขียนว่าจะทำตั้งแต่ 2012-2013 ก็ไม่ได้ทำสักที สุดท้ายก็ไม่กล้าเอาขึ้นเป็น goal แล้ว

หลายสัปดาห์ที่ผ่านมาก็เริ่มมีความรู้สึกว่า อยากตั้ง goal ใหม่ อะไรที่มันน่าสนใจกว่านี้

อยากสตรีมเกม

จริงๆ มีความคิดมาหลายปีแล้วว่าภาษาไทยไม่ค่อยมี content เกมที่อยากดูเท่าไร

  • อยากดูแค่รีวิวเหมือนซีรีส์ WTF is หรือแบบ LGR ก็ดี ไม่ได้อยากดูคนเล่นให้ต้นจนจบ
  • อยากฟังแบบมีสาระ ไม่ใช่โหวกเหวกโวยวาย สมัยนึงก็คิดว่าถ้าชุดนอนทำ content แนวข้อข้างบนนี่คงจะเพอร์เฟกท์มาก แต่สุดท้ายก็ไปนั่งทำ content Dota 2
  • อยากดูเกมที่ไม่ได้ตามกระแส Dota 2, The Walking Dead นี่ช่องไหนก็มีดู แต่ถ้าอยากดู Firewatch ล่ะ? หรือถ้าจะย้อนยุคไปอย่างเกมฟาโรห์จะดูกับใคร
  • game design ก็อยากฟัง บางทีเกมมันรู้สึกว่า “ใช่” แต่บอกไม่ถูกว่าทำไม ต้องมานั่งฟังการออกแบบของเค้านี่แหละว่าทำไมเกมมันถึงใช่ (ถ้าอยากดูผมชอบ Syntax_Error มาก แต่ตอนหลังๆ รู้สึกรำคาญการตัดต่อนิดหน่อย)

พอมาอยู่ MyLive ก็คิดว่าสตรีมมิ่งน่าจะเหมาะกับเรากว่า คือมันไม่ต้องคุยกับตัวเองเท่าไร และก็พบว่าช่องคุณแนทนี่ก็เหมาะตามข้อข้างบนหลายข้ออยู่ คือเค้าพูดเพราะมาก เสียงก็น่าฟัง ^^ ถึงจะใช้คะค่ะไม่เคยถูกก็ตาม

ปัญหาที่ยังติดอยู่คือไม่รู้จะหาคนดูจากไหน คือถ้าสตรีมสดแล้วคุยกับตัวเองมันก็ดูแปลกๆ นะ ช่องคนอื่นที่เค้าดังอยู่แล้วแค่เปิดสตรีมมาแป๊บเดียวขาประจำก็มาแล้ว แล้วก็ช่วยคุยด้วยไม่ได้นั่งเงียบในแชต

อีกวิธีแก้ที่คิดไว้คืออัดเหมือนอัดคลิป YouTube คือมีสคริปต์ไว้ แต่แบบนั้นอยากได้ co-host

ซื้อเกมใน GOG

หลังๆ มารู้สึกว่า Steam เริ่มผูกขาดและน่ารำคาญมากขึ้น sale แต่ละครั้งห่วยลงเรื่อยๆ บางเกมลดก็ลดไม่สุดเหมือนแต่ก่อน

ก็เลยคิดว่าควรจะย้ายไปซื้อร้านอื่นๆ บ้าง แต่ไม่อยากซื้อหลายร้านเพราะจะหาเกมไม่เจอ ก็เลยเลือก GOG

  • GOG มี client ที่จะมีฟีเจอร์แข่งกับ Steam
  • GOG ไม่ใช่แค่ key reseller แต่มีนโยบายของร้านเองคือทุกเกมต้องเป็น DRM-free
  • ข้อเสียที่มารู้ทีหลังคือ เกมบางเกมขายบน GOG แล้วอัพเดตไม่ไวเท่า Steam หรือบางเกมปล่อยเสร็จก็ดองไม่อัพเดตถึง Steam จะอัพเดตไปหลายรุ่นแล้ว คงต้องอ่านรายละเอียดดีๆ ก่อนซื้อ
  • ข้อเสียอีกข้อคือเกมใน GOG หลายเกมตัดฟีเจอร์ multiplayer ออกเพราะมันใช้ Steamworks
  • อีกข้อเสียนึงของการย้ายออกจาก Steam คือ Steam ราคาเป็นบาทถูกมาก เวลาซื้อใน GOG นี่ถึงจะเซลอยู่เท่ากัน แต่ราคาแพงกว่าบางทีเกือบสองเท่า

ตอนนี้ก็เริ่มย้ายมาตั้งแต่ Human Resource Machine แล้วและก็พบข้อดีอีกข้อคือมันก๊อปเกมให้เพื่อนได้

ตรงนี้ Steam จริงๆ ก็มีคือ family sharing แต่ค่อนข้างจะยุ่งยากในการเซต ของ GOG นี่ก็ก๊อปไฟล์เกมให้เพื่อนได้เลย จริงๆ ก็เหมือนให้เพื่อนโหลดเถื่อนมานี่แหละ แต่มันจะมีฟีลลิ่งอีกแบบนึงเหมือนสมัยก่อน Steam ที่เวลาซื้อเกมมาแล้ว copy แผ่นให้เพื่อนจะได้คุยกันรู้เรื่อง ซึ่งพอมาเป็น Steam แล้วรู้สึกว่าถ้าล่อให้เพื่อนซื้อเกมไม่ได้ก็คุยกันไม่ได้เลยนะ แล้วเกมบางเกมคือให้ฟรีก็เล่นนะ แต่ให้ซื้อนี่ก็ไม่เอาอะ

“ฟีเจอร์” ตรงนี้เรารู้สึกว่ามันทำให้รู้สึกคุ้มค่ากว่าการจ่ายให้ Steam นะ

เก็บตัง

รู้สึกช่วงนี้ใช้เงินเปลือง คือตั้งแต่ทำบัญชีมาก็เริ่มซื้อของแพงมาเรื่อยๆ ซึ่งก็ไม่ค่อยเป็นปัญหาเท่าไรเพราะส่วนมากก็คือเก็บเงินซื้อ มีแต่คอมใหม่นี่แหละที่เอาเงินเก็บไปซื้อ

ปัญหาของการทำบัญชีผมคือทุกเดือนผมจะหยอดเงินไว้ที่ค่าซื้อของ เดือนสองเดือนก็ได้พอจะไปซื้ออะไรมาเล่นแล้ว แต่พบว่าเงินเก็บแทบไม่ได้หยอดเลย

ก็เลยคิดว่าน่าจะเก็บเงินบ้างนะ ตั้งเป้าสักเท่าไรดีล่ะ… สิ้นปีสักหมื่นห้าดีมั้ย?

(เดายากมากเพราะฝึกงานไม่รู้จะได้เงินเท่าไร เผลอๆ เอาเงินฝึกงานสักสองเดือนใส่เข้าไปก็ครบแล้วมั้ยเนี่ย)

พูดเพราะ

อันนี้อาจจะเก็บไว้ปีหน้า รู้สึกว่าตั้งแต่เข้าวิศวมาพูดไม่ค่อยเพราะเท่าไร จริงๆ ไม่น่าจะเกี่ยวกับสิ่งแวดล้อมเท่าไรหรอกน่าจะเป็นที่ตัวเองมากกว่า ก็น่าจะแก้ที่ตัวเองนะ

New Year Resolution

สุดท้ายแล้วจะเปลี่ยนแผน New Year Resolution กลางปีดีมั้ย?

นั่นสินะ

เอาเป็นว่าสรุป 2016 Resolution ใหม่เลยดีกว่า

  • ประกอบคอม: Done
  • บล็อค: ไว้ดูสิ้นปี
  • เลิกเล่น Guild Wars 2: DONE
  • Server: ไว้ดูสิ้นปี คิดว่าล่ม
  • Twitica Desktop 3: ไว้ดูสิ้นปี คิดว่าไม่น่าเสร็จ แต่ตอนนี้กำลังไปได้สวย
  • ของใหม่:
    • ซื้อเกมใน GOG เป็นหลัก
    • เก็บตังหมื่นห้า