เมื่อวันเสาร์ที่แล้ว ผมได้ไปงาน Code Mania 11 โดยมีเรื่องน่าสนใจ ดังนี้
Session ตอนเช้า
- Wongnai Engineering Story
- ในช่วงนี้เป็นการเล่าถึงการจัดการด้าน Infrastructure ของ Wongnai ว่าตั้งแต่เริ่มต้นจาก Mac เพียง 1 เครื่องทีตั้งไว้ที่ CAT จนมีปัญหาที่ละ เรื่อง และทำให้ย้ายไปใช้ Cloud ในแต่ละชั้น ดังนี้ครับ
- ระบบเมล์
- เดิมใช้ MailChimp แต่เมื่อมี User เยอะขึ้น ค่าใช้จ่ายเยอะ
- ใหม่ใช้ Amazon SES แต่ต้องมีการปรับ Rate การส่งด้วยนะครับ
- App Server
- เดิมวางที่ CAT ปัญหา
- ฺBandwidth
- การจัด Index ของ Google , SEO
- ใหม่ ยกไปที่ AWS มีปัญหาที่ตามมา
- การ Migrate พวก Text ไม่มีปัญหา แต่พวก Image ต่างๆ ต้องทำ Tools เพื่อช่วย Migrate หลักๆจะดึงจาก Cloud แต่ ถ้าไม่มีข้อมูลต้องไปดึง AppServer เดิมที่ CAT แล้วยกมาใส่ใน AWS
- Mobile App ที่ User ใช้เยอะ แต่ User ต้องไม่รู้ว่ามีการเปลี่ยนแปลงใดๆ Zero Downtime
- เดิมวางที่ CAT ปัญหา
- ระบบเมล์
- อีกส่วนเป็นปัญหาของ DB ที่ใช้ MySQL ซึ่งก็รู้ๆกันอยู่ว่า
- ถ้าหากฐานข้อมูลใหญ่ จะทำให้ Performance ลดลงครับ พอผมได้ฟัง Session นี้แล้ว นึกถึง Blog ที่ดองไว้นานมากเลยมาเขียนให้เรียบร้อยครับ 555 (Idea คล้ายๆกันเลยครับ)
- ปัญหาในการ Merge Schema เนื่องจากมี Product 2 ตัว พอมีการ Merge ทำให้ต้องมีการ Migrate และต้องใช้ I/O เยอะ แต่ทาง AWS RDS ไม่ได้ยอมให้ใช้ I/O สูงสุดครับ (AWS มีค่า IOPS ครับ) แต่จะให้ใช้เป็นช่วงเวลานึงเท่านั้นครับ ทาง Dev ต้องใช้ช่วงเวลานี้ให้เกิดประโยชน์สูงสุดครับ
- ใช้ Apache Solr สำหรับการ Search ซึ่งเหตุผลที่ไม่ได้ใช้ AWS ElasticSearch เพราะไม่อยากยึดติดกับ Platform AWS มาเกินไป
- ในช่วงนี้เป็นการเล่าถึงการจัดการด้าน Infrastructure ของ Wongnai ว่าตั้งแต่เริ่มต้นจาก Mac เพียง 1 เครื่องทีตั้งไว้ที่ CAT จนมีปัญหาที่ละ เรื่อง และทำให้ย้ายไปใช้ Cloud ในแต่ละชั้น ดังนี้ครับ
- Like Behaviour on Facebook Pages
- Hello! Functional Programming
- ในที่นี้น้องเค้าได้ยกตัวอย่างด้วยภาษา Scala ครับ
- จุดเด่นของ Functional Programming
- เขียน Code แล้ว เข้าใจได้ง่ายขึ้น
- เข้าใจถึงการเปลี่ยนแปลงภายใน แต่ละ Function
- สามารถทำ Parallel ได้ง่ายครับ
- เปิดตัวสมาคมโปรแกรมเมอร์ไทยครับ โดยมีจุดประสงค์ ดังนี้ครับ
- พัฒนาทักษะ จัดโครงการอบรมให้ราคามิตรภาพ
- สร้างเครือข่าย
- เป็นตัวกลางระหว่างผู้ว่าจ้าง และตัวโปรแกรมเมอร์เอง อาทิ เช่น การเตรียม Template เอกสาร ที่เกี่ยวข้องกับสัญญาให้ หรือเป็นศูนย์กลางในการพบปะครับ
- สร้างพื้นที่ และโอกาศใหม่ๆ
- ช่วยเหลือ สนับสนุน ในการจัดกิจกรรมต่างๆ
คั่นเวลาด้วยอาหารเที่ยงกันครับ อิอิ (ถ้าใครติดตาม Instagram ผม จะรู้ว่ามีแต่อาหาร 5555)
Session ตอนบ่าย
- Test Double Patterns with Python
- ติดไว้ก่อน ขอทำความเข้าใจแล้วเขียน blog แยกครับ
- บุกป่าผ่าดง IF
- ภาพรวม คือ การทำให้ Code มี if น้อยที่สุดครับ และให้แต่ละ Function/ Method มีความซับซ้อนน้อยที่สุดครับ โดยวัดจาก Output ที่เป็นไปได้
- ส่วนตัวยังมองว่าถ้าหากระบบงานใหญ่ๆ มี if ได้ แต่ควรใช้ให้มีประสิทธิภาพมากที่สุด
- สำหรับ Blog (FizzBuzz Problem without if) ที่เกี่ยวข้อง ผมได้เขียนไว้แล้วครับ เมื่อนานมาแล้ว ลองไล่อ่านทีละตอนดูครับ
- Acceptance test driven development โดยพี่รูฟ ซึ่งผมได้เขียน Blog แยกไว้แล้วครับ 😀
- Building and Maintaining OpenSource Projects
- เล่าถึงที่มาก่อนว่า Open Source เป็นอย่างไร มีรูปแบบ license กับ copyright แบบไหนครับ
- พูดถึงโครงสร้าง และรูปแบบการทำงาน โดยยกตัวอย่าง Joomla เค้าทำอย่างไร ถึงมีเงินทุน และมีนวัตกรรมใหม่มาตลอด จากนั้นพูดถึงการที่เราจะเข้าไปมีส่วนร่วมกับโครงการ Joomla ทำอย่างไรบ้าง เช่น
- เข้าไปร่วมทดสอบ ช่วยตรวจสอบ Issue ที่เกิดขึ้นครับ
- ช่วยปรับปรุง แก้ไข code โดยการส่ง patch เข้าไป แต่ต้องมีคน Review 3 คนก่อนนะครับ
- และงานส่วนอื่น อาทิ เช่น ช่วยทำเอกสาร แปล เพียงเท่านี้คุณมีชื่อขึ้น ในแต่ละ Release แล้วครับ
- Functional Reactive Programming
- สำหรับ Section ผมมองว่าเป็นการต่อยอดจาก Session ตอนเช้าครับ Hello! Functional Programming
- กล่าวถึงปัญหาของ Web-Application ที่มีการทำ Asynchronous เยอะมาก (โดยยก Case Study ของ Netflix) จนเกิดปัญหามากมาย เช่น
- Race Condition มี Thread หลายๆตัว ที่พยายามเข้าไปแกข้อมูลชุดเดียวกัน
- Memory Leak ที่เกิดจากการ Subscribe แต่ไม่เคย Unsubscribe
- Callback Hell มีการเรียก Function ซ้อนกันไปเรื่อยๆ ซึ่งยากแก่การทำจัดการ Error Handling และ Code จะผูกมัดกันด้วย
- ต้องเข้าใจตัว State Machine ของงานที่ทำว่ามีความซับซ้อนระดับไหน
- ตัวอย่างเพิ่มทำความเข้าใจ Reactive Programming ครับ RxMarbles
- โดยเจ้าตัว Reactive Programming แก้ปัญหาที่กล่าวไปในข้างต้น โดยนำเอา Design Pattern มาปรับใช้ ได้แก่ Iterator และ Observable มาใช้ร่วมกัน เพื่อปรับ Event ที่ยิ่งเข้ามาเรื่อยๆให้เป็น Sequential
- และมันเป็น Functional Programming ทำให้ Code เข้าใจง่าย และ Test ง่ายครับ
- ข้อมูลเกี่ยวกับ API ReactiveX
ปิดท้ายด้วยห้องสมุดอันใหม่ของคณะวิศวกรรมศาสตร์ จุฬาลงกรณ์มหาวิทยาลัย สวยจัง อยากเข้ามาเรียน ฮ่าๆ
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts to your email.