เก็บตก Agile Thailand 2015 (ต่อ) จาก Blog ที่แล้ว
คำเตือน Blog นี้ค่อนข้าง geek ถ้าสนใจเฉพาะแนว management ให้อ่านข้ามไป session ที่สามครับ
3. Joomla Continuous Delivery with Docker
Session speaker: Jirayut Nimsaeng (Dear)
Session นี้ว่ากันด้วยเรื่องของเทคโนโลยี Docker ที่กำลังมาแรงในตลาด server
ก่อนจะอธิบาย Docker ขอปูพื้นความเข้าใจของคำว่า “Virtual machine” (ที่จะเรียกกันย่อๆว่า VM) กันก่อนซักเล็กน้อยครับ

Virtual Machine คือ แนวคิดการจำลองระบบคอมพิวเตอร์ด้วย software ลงบนเครื่องคอมพิวเตอร์เพื่อทำงาน เช่น ถ้าคุณต้องการจะใช้งาน software ที่ต้องรันบน OS ซักตัวหนึ่ง วิธีทำแบบตรงไปตรงมาก็คือ ล้างเครื่องเพื่อติดตั้ง OS ที่จะใช้แล้วลงโปรแกรม ซึ่งยุ่งยากมาก
วิธีที่ดีกว่าก็คือการสร้างพื้นที่จำลอง(VM) ขึ้นมาแล้วติดตั้ง OS และโปรแกรมที่ต้องการลงไป VM พอใช้เสร็จก็ลบทิ้งไปได้เลยไม่กระเทือนระบบที่ใช้อยู่ หรือจะเซฟเก็บไว้เป็น image เอาไว้ใช้ในคราวต่อไปก็ได้
ปัญหาหลักๆของ VM ก็คือ มันเป็นการจำลองระบบทั้งระบบลงบนคอม (พูดง่ายๆก็คือลง OS ซ้อนลงบน OS อีกที) ประสิทธิภาพของมันก็เลยไม่ดีเท่าลง OS จริงๆ แต่ก็แน่ละถ้าต้องเลือกระหว่างนั่งลบระบบแล้วลงใหม่ทุกครั้ง VM ก็ยังเป็นทางเลือกที่ดีกว่าอยู่ดี
Docker คืออะไร ?

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

สำหรับในมุมของ software Docker ก็คือการรวมเอาโปรแกรมและสภาพแวดล้อมที่ใช้ทำงาน (เอาเฉพาะ program, library และ binary แต่ไม่รวมส่วน kernel) ไว้เป็นก้อนเดียวกันใส่ไว้ใน container เพื่อให้การติดตั้งและย้ายระบบไปเครื่องอื่นง่ายมากขึ้น
เมื่อไม่ต้องติดตั้งทั้งระบบลงไปเหมือนวิธีของ virtual machine การทำงานแบบ Docker จึงเป็นการใช้ physical จริง ไม่ต้องผ่านการจำลอง ส่งผลให้ประสิทธิภาพของระบบสูงกว่า VM มาก
และด้วยความเบาก็เลยช่วยให้สามารถสร้าง instance สำหรับทำงานได้จำนวนมากกว่าเมื่อเทียบกับ VM บน hardware เดียวกัน ดังนั้นเลยทำให้เกิดการต่อยอด เช่น การสร้างระบบที่ environment เหมือนกับ production ได้ง่าย, ทำซ้ำได้ตลอดเวลา และเร็ว!
นอกจากนี้ Docker ยังรองรับการ deploy แบบอัตโนมัติอีกด้วย (ผ่านทาง script ของ Docker เอง) และถ้านำไปทำงานร่วมกับ Automate testing เช่น robot framework ก็จะสามารถทำให้กลายเป็นระบบแบบ automate systems ได้ง่ายขึ้นมากเลย
ข้อมูลอ้างอิง: Slide เก่าของคุณ Dear
http://www.slideshare.net/winggundamth/joomla-continuous-delivery-with-docker
ข้อมูลเพิ่มเติมอื่นๆ
http://www.docker.com/whatisdocker/
https://www.blognone.com/node/56627
https://www.blognone.com/node/59681
http://en.wikipedia.org/wiki/Docker_(software)
Action items ส่วนตัว: ลองเล่น Docker, ฝึกทำ automated deploy, robot framework
4. Functional programming (Haskell)
Session speaker: Weerasak (ป้อ)

Haskell เป็นภาษา programming ชนิด functional programming!
พูดแค่นี้ คนส่วนใหญ่จะงง ว่ามันคืออะไร แล้วยังไง?
ถ้าอธิบายแบบหยาบๆ ก็จะได้ประมาณว่า
– วิธีการเขียนโปรแกรมไม่เหมือนภาษาที่ programmer ทั่วไปในตลาด
– วิธีการคิดและรูปแบบคำสั่งการเขียนก็ต่าง (ยกตัวอย่าง เช่น ไม่มีตัวแปร !)
ส่วนคำนิยามแบบละเอียดกว่า(หน่อย) ก็คือ
– มันเป็น programming language แบบ strong static typing
– เป็นภาษาที่มีความสามารถเด่นในการทำ lazy evaluation, pattern matching
วิธีการคิดและเขียนโปรแกรมจะต่างจาก procedural, object-oriented ในแง่ของการออกแบบโค้ด (วิธีที่ทางคุณป้อนำเสนอ คือ การเขียนเคส, มอง patterns ให้ออกแล้วยุบ!)
ซึ่ง code ของ Haskell ในการแก้ปัญหา เช่น quicksort, factorial, Fizzbuzz problems จะสั้นและตรงไปตรงมามากกว่าโปรแกรมด้วยภาษาอื่น เช่น java, C
และด้วยลักษณะการทำงานแบบ lazy evaluation ก็ทำให้ทำหลายอย่างแบบที่ programming แบบอื่นทำไม่ได้ เช่น ประกาศตัวแปรเป็นอนันต์แล้วทำงาน (โดยที่ไม่ต้องจองหน่วยความจำจนล้น) หรือการคำนวณ factorial โดยไม่ต้องทำการสร้าง stack จำนวนมากเหมือน java (ประหยัด meomory กว่ามากมาย)
ในแง่การทำงานแบบ concurrency
เนื่องจาก haskell ไม่มีตัวแปร (Immutable) เวลาทำงานแบบ concurrent จึงไม่ต้องใช้วิธีการแชร์ตัวแปร ไม่ต้องใช้การ block/wait แบบการทำ multi threads ในภาษาอื่นๆ เลยทำให้ optimize ได้มีประสิทธิภาพสูงมาก (เรียกกันว่า Haskell’s green threads)
ส่วนการนำไปใช้งาน
ภาษา Haskell (หรือ functional programming) มักจะนำไปใช้งานประเภท prototyping (เพราะทำงานได้เร็ว), งานที่ state ซับซ้อนมาก (ซึ่งไม่ค่อยเหมาะกับ OOP), Safe multithreading
ข้อมูลเพิ่มเติม:
http://learnyouahaskell.com/chapters
http://stackoverflow.com/questions/1604790/what-is-haskell-actually-useful-for
https://wiki.haskell.org/Why_Haskell_matters
Action items: ทดลองใช้ Haskell แก้ปัญหา marketing
5. เพิ่มประสิทธิภาพและประสิทธิผลการสื่อสารแบบ face-to-face ด้วยเทคนิค Sketchnote
Session speaker: หนุ่ม SPRINT3R
ในการคุยงานกัน วิธีในการสื่อสารแต่ละแบบมีประสิทธิภาพต่างกันมาก ยกตัวอย่างเช่น การการอีเมล์ ถือเป็นการสื่อสารแบบที่ bandwidth แคบกว่าการพูดคุยต่อหน้ากันมาก แต่บางครั้งการพูดคุยกันตัวต่อตัวก็ยังเกิดความเข้าใจผิดพลาดกันได้ วิธีที่ดีกว่า คือการพูดคุยประกอบกับการวาดภาพอธิบาย เพื่อแสดงความคิดให้ออกมาเป็นรูปธรรมมากขึ้น เพื่อที่ถ้าคนที่คุยด้วยเห็นไม่ตรงกัน จะได้สามารถคุยเพื่อแก้ความเข้าใจผิดกันได้ทันที
Sketch note คืออะไร?
Sketch note คือวิธีการเขียนเรียบเรียงข้อมูลเพื่อสื่อสารความเข้าใจของตัวเองออกมาเป็นภาพ
สาระสำคัญในการเขียน Sketch note ประกอบไปด้วย
Title
การมีหัวข้อที่เด่นชัด จะช่วยให้คนดูเข้าใจประเด็นหลักที่จะสื่อได้ง่าย ส่วนการใส่รายละเอียดเพิ่มเติม เช่น ใครเป็นคนพูด ที่ไหน เมื่อไหร่ เป็น option เพื่อเสริมข้อมูลกันลืมได้ดี
Layout
การวางโครงสร้างหลักที่ดี จะช่วยให้พื้นที่เพียงพอที่จะใส่เนื้อหาที่จะนำเสนอ โดยปกติมักจะเริ่มจากบนซ้ายกระจายออก (basic) แต่มักทำให้เกิดการเอียงของน้ำหนักภาพได้ง่าย บางคนจะใช้วิธีกระจายออกจากตรงกลาง (เช่น mindmap) เรียงเป็นแถวแนวดิ่งลงไปเรื่อย วนออกเป็นก้นหอย ซึ่งส่วนใหญ่มักจะมีเส้นนำสายตาช่วยที่ชัดเจน เพื่อไม่ให้ผู้ชมสับสนลำดับของข้อมูล(ในกรณีที่ลำดับสำคัญ)
Content
วิธีการเปลี่ยนข้อมูลให้น่าสนใจหลักๆ มีหลายวิธี เช่น ย่อให้เหลือแค่ Keyword สำคัญแล้วเน้น หรือ เปลี่ยน keyword ให้กลายเป็นรูปภาพ/สัญลักษณ์ วิธีนี้ทำให้ผู้ชมย่อยง่าย และจำประเด็นได้ดีกว่าการใช้ข้อความล้วน
เพราะสมองคนเราจับภาพได้เร็วกว่าตัวอักษร และเรายังเลือกใช้ขนาดของ text และสี เพื่อแบ่งแยกน้ำหนักของเนื้อหาให้แตกต่างกันได้อีกด้วย
Container
นอกจากนี้ เรายังสามารถใส่กรอบ หรือขอบเขตเพื่อแบ่งพื้นที่หรือเน้นย้ำใจความสำคัญของเนื้อหา หรือเพิ่มความน่าสนใจได้ เช่น ใส่กรอบข้อความกับประโยคคำถาม หรือกรอบรูปร่างแปลกๆเพื่อกระตุ้นความสนใจเช่น กรอบรูปภาพ (แล้วแต่ context และจินตนาการของผู้เขียน)
ทั้งนี้ ขอให้อย่าลืมว่า สาระสำคัญของ sketch note คือไว้เพื่อสื่อสารเพิ่มความเข้าใจระหว่างกัน ดังนั้นไม่มีรูปแบบตายตัว และการฝึกฝนบ่อยๆจะช่วยทำให้เราสามารถจับประเด็นสำคัญและเรียบเรียงความคิดในการนำเสนอข้อมูลได้ดีขึ้นครับ 🙂
ข้อมูลเพิ่มเติม:
http://nuggethead.net/tag/sketchnote/
http://graphitemind.com/
http://sachachua.com/blog/series/sketchnote-lessons-2/
Action items: ฝึกเอาไป map กับการเรียบเรียงไอเดียเวลา present งาน