สรุปงูๆ ปลาๆ จากงาน Code Mania 110

วันนี้เราได้มีโอกาสมางาน Code Mania 110 ด้วย เขาจัดมากัน 6 ครั้งละ เราก็มาเป็นครั้งที่ 3 ซึ่งจริงๆงานครั้งล่าสุดก็เพิ่งจัดไปเมื่อเดือนมิถุนายนนี่เอง เวลาผ่านไปไวมากก

แต่ความตั้งใจครั้งนี้ไม่เหมือนกับที่ผ่านๆมา ปกติจะเข้าไปฟังแต่ละ session ตัวเปล่า ตอนออกจากห้องมานี่อย่างอิน แต่พอข้ามคืนไปก็หลงๆลืมๆละว่าได้อะไรมา

บวกกับเราได้แรงบันดาลใจงาน “WeLoveBug Meetup 1/2560: จาก Acceptance Test-Driven Development สู่ Unit Testing” เมื่อกลางปีที่ผ่านมา โดยมีพี่ปุ๋ยกับพี่หนุ่มเป็น speaker ในวันนั้น มันเป็นความทรงจำเลือนลางมากๆ แต่พี่หนุ่มแนะนำให้เขียนในสิ่งที่เราได้เรียนรู้ไปในแต่ละอีเว้นท์ เพื่อเผยแพร่สิ่งพวกนี้ให้แก่คนอื่นๆ

บวกกับได้แรงบันดาลใจแรงๆจาก https://naiwaen.debuggingsoft.com ที่เขียนเกี่ยวกับ session ที่เราเคยไปพูดในเกี่ยวกับ Airflow ในงาน Code Mania ครั้งที่แล้ว

เราก็รู้สึกว่า เฮ้ย ถ้าเราลองได้ทำบ้างก็คงจะดี มันคงจะดีกว่าที่เราได้ทบทวนในสิ่งที่เราได้เขียนลงไป


งานปีนี้จะเป็น concept ของMoving Forwards, Open Source World “

พุ่งประเด็นไปในเรื่องของการ Contribute ให้กับโลก Open Source รัวๆ

เราก็ไปตั้งแต่เช้า รอบนี้งานจัดที่บางมด เลยรีบนิดนึงเพราะไม่เคยไป

Session แรก ก็เริ่มด้วย

The rise of the open movement by Dr. Virot (ต้า)

Session นี้มีการหยิบยกตัวอย่างเทคโนโลยีที่เกิดขึ้นจากการรวมตัวของการ Open ในด้านต่างๆ ไม่ว่าจะ Open Knowledge, Open Data, หรือ  Open Source Project ที่เคยเกิดขึ้นแล้วประสบผลสำเร็จ ตัวอย่างเช่น

– Linus Torvalds : ศาสดาของ Linux

Linux หรือหนึ่งในระบบปฏิบัติการที่นิยมกันมากที่สุดใน server ที่ทำให้มาถึงทุกวันนี้ได้เพราะ Linus เปิด Open ให้ทุกคนๆเข้ามาช่วยเขียนกัน เริ่มต้นใน release แรก Linus ก็เป็นคนเขียนเอง ซึ่งจนถึงทุกวันนี้สิ่งที่ Linus เขียนเองมีไม่ถึง 1 % เลยด้วยซ้ำ

ลองอ่านเพิ่มได้ที่ https://medium.freecodecamp.org/linux-is-25-yay-lets-celebrate-with-25-rad-facts-about-linux-c8d8ac30076d

– Wikipedia

สารานุกรมเสรีที่ไม่ว่าใครก็สามารถเข้ามาช่วยกันเขียนและเติมเต็มความรู้กันในโลกออนไลน์นี้ได้

arXiv.org ( อ่านว่า archive)

เว็บไซต์ที่รวม paper วิชาการในแขนงต่างๆที่ทำให้คนทั่วไป access เข้ามาอ่านได้อย่าง worldwide

– Open Street Map

แผนที่โลกแบบไม่เสียค่าใช้จ่ายและแก้ไขได้

แผนที่ที่สามารถให้ทุกคนเข้ามาแก้ไขให้ข้อมูลแผนให้เป็นความจริงและทันสมัย สิ่งนี้สามารถสร้าง volunteer ได้จากทั้งโลก ตัวอย่างคูลๆอย่างในเหตุการณ์แผ่นดินไหวที่ Haiti ในปี 2010

“The OpenStreetMap community responded to the disaster by greatly improving the level of mapping available for the area using post-earthquake satellite photography provided by GeoEye, and crowdmapping website Ushahidi coordinated messages from multiple sites to assist Haitians still trapped and to keep families of survivors informed.

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

– ImageNet

ImageNet เป็น image database ตัวนึงที่ train model เพื่อ recognize object จากรูปภาพให้จัดเรียงตาม hierarchy/ directory ได้

ซึ่งเริ่มแรกโปรเจคมัน overgeneralize เพราะมีดาต้าแค่เพียงน้อยนิด แถมตอนแรกโปรเจคนี้กะจะเริ่มด้วยการจ้างเด็กป.ตรีมาหารูปภาพแล้วเพิ่มเข้าไปใน dataset  

เจ้าของโปรเจคคำนวณว่ามันต้องใช้เวลาถึง 90 ปีเพื่อจะสำเร็จเลยทีเดียว

ต่อมาเขาได้เจอ tools อย่าง Amazon Mechanical Turk ที่เข้ามาช่วย เมื่อส่งรูปขึ้นไป จะมี turkers (มนุษย์ freelance) เข้ามาช่วย judge ว่าในรูปคืออะไรแทน กลายเป็นจากเวลาที่คิดไว้ว่าใช้ประมาณ 90 ปี กลายเป็น 2 ปีครึ่งแทน อเมซิ่งมากๆ

But by giving the algorithms more examples of how complex the world could be, it made mathematic sense they could fare better”

“If you only saw five pictures of cats, you’d only have five camera angles, lighting conditions, and maybe variety of cat. But if you’ve seen 500 pictures of cats, there are many more examples to draw commonalities from.”

เรื่องราวน่าสนใจมาก อ่านเพิ่มได้ที่ https://qz.com/1034972/the-data-that-changed-the-direction-of-ai-research-and-possibly-the-world/

 

และยังมีอีกหลายๆเหตุผลที่จะ Open Up

  • เราสามารถช่วยกันแก้โค้ด เพื่อตรงความต้องการ + ได้ของที่ดีที่สุด
  • ได้ความ Branding ดูคูล ดูชิค
  • Brand ชิค ก็จะมีคนอยากเข้ามาทำงาน
  • แล้วเขาเอาตังมาจากไหนกัน บริษัทพวกนี้เขาก็เอากำไรจากการทำ support, integration, training แทน เพราะได้ความดังจากข้อที่แล้ว

Crafting Culture: In open source community by P’Twin

พี่รูฟเข้ามาด้วยคำถามชวนคิดว่า

“Beer/ Coffee นี่ เป็น engineering หรือ crafting ?”

คำตอบคือ

“It depends”

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

บางคนอาจจะขอแค่ให้ได้กินกาแฟก็พอ แต่บางคนอาจจะบอกว่าไม่ จะต้องเป็น bean แบบที่ต้องการ

แล้ว

“Software เป็น science หรือ art ?”

คำตอบคือ “It depends” เช่นกัน

พี่รูฟเสริมขึ้นให้ว่า พวกที่ใช้วิทยาศาสตร์จริงๆ ไม่มีคำว่า science ในนั้น แต่มันแยกออกมาเป็น mathematics, physics, chemical แทน

หรือ software เอง ก็ควรจะเอียงมาทาง art นิดนึง?

และเราเรียนรู้อะไรได้บ้างจาก Software Open Source ?

เพราะไม่มีใครทำ software คนเดียวไง

“Programs must be written for people to read, and only incidentally for machines to execute.” Harold Abelson

 

พี่รูฟยังเสริมขึ้นอีกว่า เราควรทำอะไรบ้าง

  • เรียนภาษาใหม่ทุกปี:  don’t be python programmer, JS programmer, or any language programmer but be PROGRAMMER
  • อ่าน Technical book
  • อ่าน Non-technical book : เพื่อฝึก soft skill
  • ลงเรียนกับคนที่เก่งกว่า
  • เข้าร่วมงานอีเว้นท์
  • และ contribute คืนให้กับ Open Source

IMG_6788

Workshop by P’Thai

Session นี้พี่ไทนำทีมให้คนที่มางานช่วยกันสร้างเว็บไซต์ของงาน code mania 110 ด้วยการเปิด Pull Request (https://github.com/ThaiProgrammer/code-mania-110) เข้ามาสดๆ ณ ตอนนั้น และทีมงานก็จะเป็นคนรีวิวโค้ด

เป็น session ที่สนุกดีสำหรับเรา ได้เห็นคนเปิด PR เข้ามากัน ไม่ว่าจะแก้เล็ก แก้น้อย แก้ content แก้ readme.md เพิ่มหิมะตก หรือแก้ชื่อพี่รูฟให้ถูก 55555 หรือเจอคนลง bulma กับ bootstrap เข้ามาพร้อมกัน 555555555

สิ่งหนึ่งที่ชัดเจนมากใน session คือ มันทำให้ทุกคนได้เห็นว่า Project ของเราเกิด conflict ขึ้น ดังนั้นต้องเป็นที่ตัวทีมของเราที่จะเป็นคนกำหนดทิศทาง project ให้ไปในทิศเดียวกัน

เป็นมากกว่า Memcached, ktserver by P’ Narate

สิ่งที่ว้าวมากในเซสชั่นนี้คือเพิ่งรู้ว่าสามารถ curl เพื่อเอาคุกกี้กับล็อกอินได้ด้วย

Session นี้จะเน้นไปทาง demo ให้ดู โดยพี่เขาจะรัน server 2 เครื่อง

เครื่อง 222: จะ save session ไว้ + มีคุกกี้

เครื่อง 232: ไม่ได้ save ไว้

โดยให้ปริ้นท์ว่า login ด้วยอะไร เครื่อง 222 จะ return ว่า login as user นั้นๆ ในขณะที่เครื่อง 232 จะ login as guest

แต่ต่อมา ลองใช้ ktserver (Kyoto Tycoon)

ตัวนี้มีความสามารถเรื่อง support protocol, memcached, binary

ต่อมาพี่เขาก็รัน php + ktserverโดยให้ เครื่อง 222, 232, 242 (ที่ไม่มีอะไรเลย) ทั้งสามตัวได้ share memcached กัน ถึงทำให้ทั้งสามตัวสามารถใช้ login as user นั้นๆได้

โดย ktserver ก็มี concept ของการมี master และ slave

พี่เขาตั้งให้เครื่อง 210 กับ 220 สลับกันเป็น master กับ slave ชี้กันไปชี้กันมา

 

Elixir of life by Thesis from ThoughtWorks

เริ่มต้นที่ Ruby on rails มันช้า ด้วยตัวมันเองจัดการงานเกี่ยวกับ concurrency ได้ไม่ดี

Concurrency คืออะไร คือการทำ process 2 อย่างพร้อมกันได้ดี

Erlang เป็นตัวเลือกนึงที่มี concept ที่ตอบปัญหาเรื่อง concurrency ได้ ในรูปแบบ BEAM/ERLANG VM แต่ syntax ของตัวภาษาไม่ค่อยเป็นมิตร

Elixir เป็น functional programming ที่คิดค้นโดย José Valim โดยที่ได้รับแรงบันดาลใจจากภาษา Erlang โดยที่ Elixir จะได้ใช้ความสามารถของ Erlang VM ทำให้มัน compatible ได้กับ Erlang’s ecosystem

Elixir มี framework ชื่อ Phoenix ซึ่งก็ inspired มาจาก Ruby on rails

 

Performance Testing with TSUNG by P’Dear Opsta

  • Performance Testing คือการทดสอบ performance ของระบบ
  • Performance Testing เป็นสิ่งที่ต้องทำ และต้องใช้เวลาในการทำ เพราะในบางทีเราก็เจอ scenarios ที่ซับซ้อน
  • การที่จะทำ Performance Testing ได้นั้น เราต้องรู้ว่า performance criteria ของเราคืออะไร ซึ่งมันจะขึ้นอยู่กับ business goal ที่เราต้องรู้เอง

ประเภทของ Performance testing ที่ถูกหยิบยกขึ้นมาก็มี

  1. Load testingยิง user ไปในระดับที่อยากได้ ดูว่าระบบจะเป็นยังไง
  2. Capacity testingยิงจนกว่าจะเห็นว่าระบบรับได้มากแค่ไหนโดยที่ระบบยังรับได้ อย่างเทียบจำนวน users กับ response time ถ้าเกิน criteria ที่ response time ที่ 3 งี้จะได้ประมาณ 29 คนจากกราฟ
  3. Stress testing  ตัว Capacity testing เราได้ค่าแล้วก็จบ แต่อันนี้จะยิงต่อแล้วดูผล ทำเพื่อหา bottleneck ของระบบ
  4. Soak testingทดสอบการทำงานของระบบเมื่อยิงไปในเวลานาน
  5. Spike testingทดสอบเพื่อรับสถานการณ์บางอย่างที่พิเศษๆที่จำนวนพุ่งอย่างรวดเร็ว เช่น campaign หรือ วันหวยออก

 

Performance Testing Steps

1. Identify Test Environment

ก่อนจะยิง ต้องทำระบบที่คล้าย production ขึ้นมา แล้วก็ยิงเข้ารัวๆ
และก็จะต้องดูหลายๆเรื่อง พวก hardware/VM, Network, Software, External system

2. Identify Performance Acceptance Criteria

ดูเรื่อง throughput, response time, resource utilization โดยที่ค่าพวกนี้ก็จะมาจาก business ว่าต้องการอะไร เช่น ไซต์รับได้ 100 concurrents  แต่ละ request ต้องไม่เกินกี่ ms คนจะได้ไม่หนีจากเว็บไซต์เราไป

3. Plan and design test

  • Scenario – เขาต้องคิด scenario ว่าคนที่เข้า website เรา เขาเข้ามาทำอะไร  3 อันดับแรก สมมติว่าเป็น เว็บไซต์ข่าว ตัวอย่างเช่น
    Scene #1 ->
    กดข่าว, อ่าน, กดปุ่ม share
    Scene #2 ->
    กดข่าว, คอมเม้น
    เป็นต้น
    หรือเว็บไซต์ ecommerce – ก็จะต้องรู้ว่า คนต้อง login ก่อนถึงจะซื้อได้ หรือ login ตอน checkout ซื้อของแล้ว
  • Test Data – ให้มีสัก 100 users มาสุ่มซื้อ
  • Clean Data – ลบดาต้าในส่วนที่ไม่เกี่ยวข้องจากที่ยิงไว้ ขั้นตอนตรงนี้ก็จะถึกๆนิดนึง
  • Collect data to analyze

ขั้นตอนต่อไปจะทำด้วย Tsung

4. Configure Test Environment

5. Implement Test Design

6. Execute Test

7. Analyze Result, Report, and Retest –   พอได้ดาต้ามาวิเคราะห์แล้วก็กลับไปข้อ 4 ใหม่จนกว่าจะได้เลขที่ต้องการ

Tsung

เป็น distributed load testing tool ที่เขียนด้วยภาษา Erlang

Why?

  • เพราะมันมี Real World Performance จาก real scenario ที่เกิดขึ้น
  • high performance
  • OS monitoring ในตัว

Key Features

  • มัน mix รวม behaviors เช่น คนเข้าพร้อมกันและทำ scenarios ที่ต่างกันพร้อมกันได้

 

แล้วพี่เขาก็ demo ให้ดู การทำ load testing ของการเข้า WordPress แล้ว login

** ตอนทดสอบให้พยายามใช้ incognito mode มันจะได้ไม่เอา cache เข้ามาปน

หรือลองเข้าไปเช็คใน https://github.com/opsta/tsung

Advertisements

One thought on “สรุปงูๆ ปลาๆ จากงาน Code Mania 110

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.