เมื่อวันเสาร์ที่แล้ว ผมได้ไปงาน Code Mania 11 โดยมีเรื่องน่าสนใจ ดังนี้
Session ตอนเช้า
- Wongnai Engineering Story
ในช่วงนี้เป็นการเล่าถึงการจัดการด้าน Infrastructure ของ Wongnai ว่าตั้งแต่เริ่มต้นจาก Mac เพียง 1 เครื่องทีตั้งไว้ที่ CAT จนมีปัญหาที่ละ เรื่อง และทำให้ย้ายไปใช้ Cloud ในแต่ละชั้น ดังนี้ครับ
1. ระบบเมล์
- เดิมใช้ MailChimp แต่เมื่อมี User เยอะขึ้น ค่าใช้จ่ายเยอะ
- ใหม่ใช้ Amazon SES แต่ต้องมีการปรับ Rate การส่งด้วยนะครับ
2. App Server
- เดิมวางที่ CAT ปัญหา
- Bandwidth
- การจัด Index ของ Google, SEO - ใหม่ ยกไปที่ AWS มีปัญหาที่ตามมา
- การ Migrate พวก Text ไม่มีปัญหา แต่พวก Image ต่างๆ ต้องทำ Tools เพื่อช่วย Migrate หลักๆจะดึงจาก Cloud แต่ ถ้าไม่มีข้อมูลต้องไปดึง AppServer เดิมที่ CAT แล้วยกมาใส่ใน AWS
- Mobile App ที่ User ใช้เยอะ แต่ User ต้องไม่รู้ว่ามีการเปลี่ยนแปลงใดๆ Zero Downtime แก้ DNS / Load balancer
3. อีกส่วนเป็นปัญหาของ DB ที่ใช้ MySQL ซึ่งก็รู้ๆกันอยู่ว่า
- ถ้าหากฐานข้อมูลใหญ่ จะทำให้ Performance ลดลงครับ พอผมได้ฟัง Session นี้แล้ว นึกถึง Blog ที่ดองไว้นานมากเลยมาเขียนให้เรียบร้อยครับ 555 (Idea คล้ายๆกันเลยครับ)
- ปัญหาในการ Merge Schema เนื่องจากมี Product 2 ตัว พอมีการ Merge ทำให้ต้องมีการ Migrate และต้องใช้ I/O เยอะ แต่ทาง AWS RDS ไม่ได้ยอมให้ใช้ I/O สูงสุดครับ (AWS มีค่า IOPS ครับ) แต่จะให้ใช้เป็นช่วงเวลานึงเท่านั้นครับ ทาง Dev ต้องใช้ช่วงเวลานี้ให้เกิดประโยชน์สูงสุดครับ
4. Searching
- ใช้ Apache Solr สำหรับการ Search ซึ่งเหตุผลที่ไม่ได้ใช้ AWS ElasticSearch เพราะไม่อยากยึดติดกับ Platform AWS มาเกินไป
- Like Behaviour on Facebook Pages
อันนี้เป็นงานวิจัยของนิสิต ป.เอก ของ ม.จุฬา ที่สนใจข้อมูลของการ like โดยทำ bot เพิ่มเก็บข้อมูล โดยใช้ Graph API ที่ทาง Facebook เตรียมไว้ให้ครับ และใช้ Tool ชื่อ Tableau มาทำ Data Virtualization ให้เห็นภาพมาขึ้นว่าแต่ page แต่ละหมวด มีพฤติกรรมอย่างไร แล้วมีช่วง peak time ในเวลาไหนบ้าง
- Hello! Functional Programming
- ในที่นี้น้องเค้าได้ยกตัวอย่างด้วยภาษา Scala ครับ
- จุดเด่นของ Functional Program
- เขียน Code แล้ว เข้าใจได้ง่ายขึ้น
- เข้าใจถึงการเปลี่ยนแปลงภายใน แต่ละ Function
- สามารถทำ Parallel ได้ง่ายครับ
- เปิดตัวสมาคมโปรแกรมเมอร์ไทยครับ
- พัฒนาทักษะ จัดโครงการอบรมให้ราคามิตรภาพ
- สร้างเครือข่าย
- เป็นตัวกลางระหว่างผู้ว่าจ้าง และตัวโปรแกรมเมอร์เอง อาทิ เช่น การเตรียม Template เอกสาร ที่เกี่ยวข้องกับสัญญาให้ หรือเป็นศูนย์กลางในการพบปะครับ
- สร้างพื้นที่ และโอกาศใหม่ๆ
- ช่วยเหลือ สนับสนุน ในการจัดกิจกรรมต่างๆ
คั่นเวลาด้วยอาหารเที่ยงกันครับ อิอิ (ถ้าใครติดตาม Instagram ผม จะรู้ว่ามีแต่อาหาร 5555)
Session ตอนบ่าย
- Test Double Patterns with Python
ดูตาม Youtube เลยครับ [Code Mania 11] Test Double Patterns with Python (youtube.com)
- บุกป่าผ่าดง IF
- ภาพรวม คือ การทำให้ Code มี if น้อยที่สุดครับ และให้แต่ละ Function/ Method มีความซับซ้อนน้อยที่สุดครับ โดยวัดจาก Output ที่เป็นไปได้
- ส่วนตัวยังมองว่าถ้าหากระบบงานใหญ่ๆ มี if ได้ แต่ควรใช้ให้มีประสิทธิภาพมากที่สุด
- สำหรับ Blog (FizzBuzz Problem without if) ที่เกี่ยวข้อง ผมได้เขียนไว้แล้วครับ เมื่อนานมาแล้ว ลองไล่อ่านทีละตอนดูครับ
- Acceptance test driven development
- 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
- 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 sent to your email.