Karn Tirasoontorn

June 8, 2021

ติดตั้ง Sentry เพื่อรายงาน Error

“Programmer A: โอ๊ย! เว็บมี Error และพังไปอีกแล้ว Programmer B: อ้าว แล้วมันพังเพราะอะไรหละ Programmer A: งั้นเดี่ยวขอไปตรวจดู log ก่อนนะ ... ผ่านไป 5 นาที Programmer A: รู้แล้วว่าเกิดจากอะไร ...” จากบทสนทนาข้างต้น การตรวจสอบดู Error ที่เกิดขึ้นจากอะไรดูยุ่งยากพอสมควร ยิ่งถ้าเราปล่อยออก production การรับรู้ Error ที่เกิดขึ้นก็ต้องรวดเร...
Read more
May 30, 2021

ลองติดตั้ง Stimulus บน Sinatra

สำหรับบางครั้งที่เราอยากทดลองสร้างเว็บและหัดใช้ CSS framework ทดลองเขียน Stimulus Controller ใหม่ๆ หรือจะอะไรก็แล้วแต่อย่างง่ายๆ โดยไม่ต้องต่อกับฐานข้อมูล การใช้ Rails ก็ดูเหมือนจะ Overweight เกินไป ครั้งนี้ก็เลยจะทดลองใช้ Sinatra ดูว่ามันตอบโจทย์ของเราหรือไม่ โดยสิ่งที่จะใช้ในบทความนี้จะประกอบด้วย 1. Sinatra ในการทำเว็บ 2. Stimulus ซึ...
Read more
May 29, 2021

สร้าง WebSocket Channels ร่วมกับ Connection ของ Turbo

การสร้าง Real-time Web Application คงหลีกเลี่ยงไม่ได้กับการใช้ WebSocket เพื่อให้เกิดการสื่อสารแบบสองทาง (Bi-direction Communication) เพื่อให้ฝั่ง Backend สามารถอัพเดตข้อมูลให้กับ Frontend ได้ สำหรับ Rails ก็มี ActionCable เพื่อจัดการในส่วนของ WebSocket ให้กับเรา ที่นี้โจทย์เรามีอยู่ว่าในกรณีที่เรามีการใช้ turbo_stream_from จาก Turbo ซ...
Read more
May 22, 2021

ทำความรู้จักกับ MatataBot

ต้องยอมรับว่าการเรียนรู้ในยุค New Normal ทำให้เด็กๆ ต้องหันมาเพิ่งการเรียนรู้แบบออนไลน์มากขึ้น ซึ่งนั้นหมายความว่าเด็กๆ จะต้องใช้เวลาอยู่กับหน้าจอเพิ่มขึ้นด้วย ซึ่งก็จะมีหลากหลาย guidelines ที่เราสามารถนำมาใช้กับเด็กๆ ได้ โดยขึ้นอยู่กับพิจารณาของผู้ปกครอง และความเหมาะสม สำหรับการเขียนโค้ดเป็นอีกกิจกรรมที่จะช่วยส่งเสริมทักษะการคิดเชิงคำ...
Read more
May 22, 2021

เริ่มต้นกับการเป็น Cisco Meraki Developer 101

ถ้าจะพูดถึงโซลูชั่นในการบริหารจัดการระบบเครือข่ายที่ยอดเยี่ยมก็คงหนีไม่พ้นจาก Cisco Meraki เป็นแน่ สำหรับรายละเอียดความสามารถของเจ้า Cisco Meraki นั้นขอยกผ่านไปแล้วกันนะครับ เพราะความสามารถเค้าเยอะจริงๆ สามารถลองไปศึกษาที่เว็บไซต์ของ Cisco หรือไม่ก็สอบถามกับเซลล์เพิ่มเติมได้ เริ่มต้นให้เราเข้าไปศึกษาที่ https://developer.cisco.com/mera...
Read more
April 11, 2021

Web Scraping ด้วย Ruby

Web Scraping เป็นอีกวิธีหนึ่งที่เราจะใช้ดูดและสกัดข้อมูลที่กระจายอยู่ในเว็บออกมาได้ ซึ่งถ้าลองค้นหาเครื่องมือใน Search Engine ก็จะพบว่าเครื่องมือหลายๆ ตัวที่มีอยู่นั้นพัฒนาด้วย Python ซะเป็นส่วนใหญ่ แต่ด้วยที่เราเป็น Rubyist ถ้าเราจะทำ Web Scraping ด้วย Ruby จะมีแนวทางอย่างไรบ้าง เรามาลองดูกัน สำหรับตัวอย่างในครั้งนี้ ก็จะยกตัวอย่างที่...
Read more
April 7, 2021

สร้างกราฟด้วย Chart.js ผ่าน Stimulus

จากประสบการณ์ที่ได้ลองใช้กราฟมาแสดงรายงานอยู่สักพัก ก็พบว่าการจะสร้างกราฟตัวหนึ่งๆ ขึ้นมาได้เราจะต้องกำหนดพื้นที่ในการแสดงผลใน HTML บ้างก็ div บ้างก็ canvas จากนั้นก็ส่งชุดข้อมูลเข้าไปในฟังก์ชันหรือคลาสของ JavaScript สุดท้ายเราก็จะได้กราฟที่ต้องการออกมา สำหรับในบทความนี้ก็จะใช้ Chart.js มาทำเป็นตัวอย่างให้ดูกัน <canvas id="myChart" wid...
Read more
March 31, 2021

ว่าด้วยเรื่องของ Infinite Scroll

ต่อจากบทความ Pagination with Pagy ก็พยายามจะนำ Pagy มาใช้ในโปรแกรมใบลา โดยส่วนหนึ่งของโปรแกรมจะมีการแสดงข้อมูลประวัติการลาซึ่งทำเป็น pagination แบบ infinite scroll เริ่มแรกนั้นเราพยายามจะใช้ Turbo เข้ามาใช้ในการแสดงผล และใช้ Stimulus ร่วมกับ IntersectionObserver ตามไอเดียจากบทความ Adventure in infinite scrolling ผลลัพท์ที่ได้ก็ได้อย่าง...
Read more
March 24, 2021

Pagination with Pagy

เมื่อข้อมูลมีจำนวนมาก การดึงข้อมูลทั้งหมดมาแสดงในคราวเดียว สร้างประสบการณ์ที่ไม่ดีต่อผู้ใช้งาน เพราะต้องเสียเวลาโหลดนาน และเปลืองทรัพยากรทั้งหน้าบ้านและหลังบ้านโดยใช่เหตุ ดังนั้นการแบ่งหน้าในการแสดงข้อมูลดูจะเป็นทางออกที่ดี ซึ่งเป็นอีกหนึ่งเรื่องที่โปรแกรมเมอร์ควรจะตระหนักไว้เสมอในการออกแบบ UX/UI ให้กับผู้ใช้งาน สำหรับ gem ที่ปกติผมใช้...
Read more
March 14, 2021

มาดูสิว่า JavaScript ของเรามันบวมที่ตรงไหน

ไม่ว่าเราจะพัฒนาเว็บแอพพลิเคชันด้วยเฟรมเวิร์คอะไรก็ตาม เมื่อนำไป deploy ในสภาวะแวดล้อมจริง เราควรจะมั่นใจว่าเราได้ optimize ขนาดของ JavaScript และ CSS ให้เหมาะกับการใช้งาน ซึ่งโดยบ่อยครั้งที่ผมเจอก็จะเป็นปัญหาขนาดของ JavaScript ที่มีขนาดใหญ่ ทำให้เวลาที่เสียเวลาตอนโหลด และอาจจะสร้างประสบการณ์ที่ไม่ดีแก่ผู้ใช้งาน สำหรับ Rails ซึ่งที่ใช้...
Read more
March 10, 2021

ปรับ localtime และ timezone บน Docker

หลังจากที่ได้ทดสอบโปรแกรมให้รันบน Docker และมีการเรียกใช้ scheduler ให้ทำงานเมื่อถึงเวลาที่กำหนดไว้ สิ่งที่พบก็คือ scheduler ที่ตั้งไว้ก็ทำงานจริง แต่เวลาที่โปรแกรมทำงานกับไม่ตรงกับเวลาที่เราต้องการ สาเหตุนั้นก็มาจาก localtime และ timezone บน Docker Container นั้นไม่ตรงกับเวลาของเรา ดังนั้นสิ่งที่เราทำเพื่อแก้ปัญหา ก็คือการกำหนด localt...
Read more
March 5, 2021

บล็อกส่วนตัว และจดหมายข่าวผ่าน world.hey.com

ผ่านการเปิดตัวบริการอีเมลจาก hey.com มาได้สักระยะ ตอนนี้ HEY ก็ได้ปล่อยบริการบล็อกส่วนตัว และจดหมายข่าวออกมาให้ผู้ใช้งานได้ใช้กัน วิธีการใช้งานนั้นก็แสนจะง่ายได้ เพียงเขียนสิ่งที่อยากพรรณนาลงไปเนื้อหา และส่งอีเมลไปยัง world@hey.com ทันทีที่ส่งอีเมลออกไป ก็คือการโพสบทความของเราออกไป และเข้าถึงได้ผ่าน world.hey.com/you/your-post-title เม...
Read more
March 5, 2021

ทำไงให้ cache รูปภาพจาก Active Storage ได้

Active Storage เป็นฟีเจอร์ที่ทำให้เราสามารถอัพโหลดภาพ หรือไฟล์ต่างๆ เข้าไปใน Rails Application ได้ง่ายๆ ซึ่งทางผมและทีมก็ได้นำไปใช้อยู่ในโปรเจ็คหลายตัว โดย Active Storage จะรองรับการอัพโหลดภาพไปฝากไว้บน cloud ไม่ว่าจะเป็นแบบ Amazon S3, Azure Storage และ Google Cloud Storage ซึ่งถ้าเราใช้ cloud service ก็จะมีการ caching ให้เราอยู่แล้ว แ...
Read more
March 4, 2021

เริ่มต้นจากปัญหาเล็กๆ ใกล้ตัว

เริ่มต้นจากปัญหาของตัวเองที่เวลาจะลางานในช่วงปลายปี จะมีคำถามเกิดขึ้นมาว่า "เอ๊ะ ตอนนี้ยังเหลือวันลาพักร้อนอยู่กี่วันแล้วเนี่ย" ทำให้ต้องไปสอบถามทาง HR บ้าง หรือนับรวมวันที่ลาจาก email ที่ส่ง ทำให้เกิดไอเดียที่จะพัฒนาโปรแกรมใบลาขึ้นมา นอกจากนี้ก็อยากให้น้องๆ ในทีมได้ทดลองใช้ Hotwireจริงๆ ในโปรแกรมด้วย ทำให้เริ่มต้นออกแบบการไหลของโปรแกร...
Read more