การเก็บข้อมูลตำแหน่งภูมิศาตร์ใน Redis (Geospatial)
Redis นอกจากจะเก็บข้อมูลที่เป็น key and value แล้วก็ยังมีอีกความสามารถพิเศษอีกอย่างนึง คือสามารถใช้เก็บข้อมูลทางภูมิศาตร์ ซึ่งจะเก็บข้อมูลที่เป็น latitude กับ longitude ได้ด้วย blog นี้เราจะมาดูว่ามันคืออะไร ใช้งานอย่างไร แล้ว use cases ที่เราเอาไปใช้งานได้มีอะไรบ้าง Background ถ้าเรามีโจทย์มาว่าต้องออกแบบระบบให้เก็บข้อมูลที่เป็นพิกัดของสถานที่ ลงใน database เราจะเก็บมันยังไงครับ ตัวอย่างเช่น ผมต้องการเก็บตำแหน่งของสาขาของร้านสะดวกซื้อ 7-11 ทั้งหมดในกรุงเทพ แบบตัวอย่างข้อมูลข้างล่างนี้ latitude longitude location 13.75759654737684 100.56426644232188 7-11 Rama 9 13.803052551902061 100.55536933330103 7-11 Phahonyothin 13.779830852003741 100.54371735141898 7-11 Ari ถ้าเราเก็บ Latitude, Longitude, Location แยกเป็นแต่ละคอลัมน์ หรือ field ใน database แบบ ตารางข้างบน ก็ดูไม่มีปัญหาอะไรใช่ไหมครับ เราสามารถ query ตำแหน่งของสถานที่ที่เราต้องการอยากรู้ได้ แต่ถ้าเราต้องการอยากรู้ว่า จากตำแหน่งที่เรายืนอยู่เนี่ย มี 7-11 ไหนที่ไกล้ที่สุด (คล้ายๆ กับเวลาเสิร์ชหา 7-11 ใน Google Maps) เราจะ query มันยังไงครับ 🤔...
Git worktree: วิธีทำงานบน git แบบหลายๆ branch พร้อมกัน
พอพูดถึง git เราก็จะมี command ที่ใช้กันบ่อยๆ จนคุ้นชินเช่น commit, push, pull, merge, etc., แต่ git worktree เป็นหนึ่งใน command ที่ไม่ค่อยเห็นคนใช้กันสักเท่าไหร่ จริงๆ ผมว่ามันมีประโยชน์แล้วก็สะดวกมาก วันนี้เรามาลองใช้งานกันครับ Problem Statement เคยไหมครับเวลาที่เราทำงานบนเครื่องของเรา ทำไปสักพักมีเหตุให้ต้องเปลี่ยนไป checkout ไปที่ commit หรือ branch อื่นๆ ยกตัวอย่างที่ผมเจอบ่อยๆ เช่น อาจจะมี Pull Request ที่ขอให้เราช่วยรีวิว ซึ่งบางครั้งเราจำเป็นที่จะต้อง checkout code มาดูในเครื่องเราเองเพื่อลอง run ดู แต่งานที่เราทำอยู่ หรือ file ที่เราแก้บนเครื่องเราที่ยังไม่ได้ commit ล่ะครับ เราจะทำยังไง? 🧐 ถ้าเกิดเจอเหตุการณ์แบบนี้เราอาจจะต้องทำการ git clone ไปอีก directory แล้วค่อย checkout ไปยัง branch นั้น หรืออีกท่าที่ง่ายกว่าคืออาจจะทำ git stash เพื่อเก็บ changes ที่เราทำไว้ชั่วคราวแล้วค่อย git stash pop เพื่อค่อยมาทำต่อจากที่ค้างไว้ ซึ่งวิธีนี้ก็น่าจะแก้ปัญหาที่เรามีได้แล้ว แต่วันนี้ผมจะมาแนะนำท่าที่ส่วนตัวผมคิดว่า elegant กว่า :) ด้วยการใช้ git worktree...
Docker layer กับการ caching
ยุคนี้ผมคิดว่าทุกคนคงใช้ Docker ในการทำงานกันอยู่แล้ว วันนี้อยากเขียนสั้นๆ เบื้องหลังการทำงานเวลาที่เรารัน build docker image จาก Dockerfile ว่ามันมีอะไรเกิดอะไรขึ้นบ้าง สามารถทำยังไงให้มันเร็วขึ้นได้ และวิธีการเรียงลำดับ instruction ใน Dockerfile Dockerfile ในการสร้าง Docker image เราจะต้องกำหนดสิ่งที่เราต้องการ (instruction) ใน image ของเรา เช่นจะลง OS อะไร หรือลง dependencies ตัวไหน version อะไร ซึ่งเราจะเขียนทั้งหมดที่เราต้องการไว้ใน Dockerfile ไฟล์นี้เป็นเหมือนแม่พิมพ์สำหรับ image ของเรา ถ้าเปรียบเทียบกับโลก OOP ตัว Docker image เป็นเหมือน Class ส่วนตัว container เป็นเหมือน instance ของ class นั้นๆ ที่เราได้สร้างขึ้น เราสามารถสร้าง container มาเท่าไรก็ได้จาก image ที่เราได้สร้างไว้ FROM ubuntu:18.04 COPY . /app RUN make /app CMD python /app/app.py ตัวอย่าง Dockerfile ที่จะสร้าง Docker image ที่ใช้ ubuntu เวอร์ชั่น 18....
Latency vs Throughput
เชื่อว่าหลายคนอาจจะเคยได้ยินคำว่า latency กับ throughput มาบ้างแล้ว แต่อาจยังไม่แน่ใจว่ามันคืออะไร และมันแตกต่างกันยังไง ในทาง Software Engineering สองสิ่งที่เรียกได้ว่าหนึ่งในเป็นหน่วยวัดพื้นฐานของการทำ Software System เลย วันนี้เราจะมาศึกษาเรื่องนี้กัน เพื่อความง่ายต่อการเข้าใจ เราจะใช้ server/client model ประกอบการอธิบาย Client เช่น laptop หรือ mobile devices ต่างๆ ที่จะทำการเข้าถึง resources จาก server Server ซึ่งจะทำหน้าที่ประมวลผลสิ่งที่ client ทำการร้องขอเข้ามาแล้วส่ง response กลับไป Latency Terminology: latency = how long do customers have to wait for a pizza ปกติเวลาที่เราเข้าหน้าเว็บไซต์ต่างๆ web browser (client) จะทำการ request ไปที่ server และเมื่อ server ได้รับ request แล้วจะทำการประมวลผลสิ่งที่ขอเข้ามาเช่น html หรือ json data (ในกรณีที่ request เป็น API) และเมื่อ server ทำการประมวลผลสิ่งที่ขอเข้ามาแล้ว server จะส่งสิ่งที่ต้องการกลับไปหา client ซึ่งเมื่อ client ได้รับแล้วถือว่าเป็นอันจบกระบวนการ เราเรียกเวลาทั้งหมดที่ใช้ตั้งแต่ client ทำการ request จนได้ response กลับไปว่า Latency ซึ่งปกติจะนับเป็นหน่วย millisecond (ms)...
แชร์ประสบการณ์เข้าร่วมโครงการ Google Summer of Code
บทความนี้จะมาบอกเล่าเกี่ยวกับโครงการ Google Summer of Code เมื่อปี 2019 ที่ผ่านมา ผ่านประสบการณ์ของผมเองที่ได้เข้าร่วมมา จะมาเล่าว่ามันคืออะไร โครงการนี้มีไว้ทำไม ผมได้อะไรจากโครงการนี้บ้าง และวิธีการสมัครเข้าร่วมโครงการสำหรับผู้ที่สนใจ Introduction Google Summer of Code หรือ GSoC เป็นโครงการที่จะจัดในช่วงฤดูร้อนหรือช่วงปิดภาคการศึกษาของทุกปี เพื่อให้นักเรียนและนักศึกษาเข้ามามีส่วนร่วมในการเขียน code พัฒนาระบบ open source projects จากที่ไหนก็ได้ในโลก ซึ่งกฏข้อสำคัญคือผู้สมัครจะต้องเป็นนักเรียนหรือนักศึกษาเท่านั้น (ต้องมีสถานะนักเรียน นักศึกษา ป.ตรี ป.โท หรือ ป.เอก) โดยผู้เข้าร่วมโครงการจะสามารถเลือกได้ว่าอยากทำงานกับทีมไหนหรือโปรเจคไหน โครงการนี้กินระยะเวลาทั้งหมดประมาณ 3 เดือนโดยปกติจะเริ่มตอนมิถุนายน - สิงหาคม (หน้าร้อนฝั่ง America & Europe) โดยที่ผู้เข้าร่วมโครงการจะถูก pair เข้ากับ mentor (คล้ายๆ กับพี่เลี้ยง) ของแต่ละทีม ที่จะช่วยไกด์เราตลอดตั้งแต่ต้นจนจบโครงการ โดย mentor จะคอย support และจะช่วยแนะนำว่าเค้าอยากให้เราพัฒนาในส่วนไหนของระบบ อยากให้สิ่งที่เราทำมันออกมาในลักษณะไหน Update 2011-11-10: GSoC 2022 เปิดโอกาสให้ใครสมัครก็ได้ ผู็สมัครไม่จำเป็นต้องเป็นนักเรียนนักศึกษา Organizations รูปจาก summerofcode.withgoogle.com โดยขั้นตอนแรกเราต้องเลือก Organization กันก่อน ซึ่งจากที่บอกไปแล้วว่าเราจะต้อง contribute to open-source projects ซึ่งทีมหรือองค์กรที่เราสามารถเลือกได้ส่วนมากก็จะเป็นองค์กรไม่แสวงผลกำไร (non-profit organizations) ซึ่งบางองค์กรก็คือทีมที่ได้สร้าง technology หรือ framework ที่มีชื่อเสียงที่เราอาจจะได้ใช้หรือเคยได้ยินกันมาบ้างอยู่แล้วเช่น debian ที่ทำระบบปฏิบัติการ, Jenkins ที่พัฒนาระบบ CI/CD หรือแม้แต่ทีม ruby ที่เป็นทีมหลักในการ develop และ maintain ภาษา ruby...