ใช้ Tableau ดึงข้อมูลบน S3 ผ่าน Amazon Athena

ใช้ Tableau ดึงข้อมูลบน S3 ผ่าน Amazon Athena

Amazon Athena เป็น query service ที่เราสามารถเชื่อมต่อกับข้อมูลที่เราเก็บอยู่ใน S3 และเขียน SQL เพื่อดึงข้อมูลออกมาวิเคราะห์ได้ ความดีงามของ service นี้คือ service นี้เป็น serverless ครับ เราไม่ต้องนั่งจัดการ infrastructure ให้เปลืองเงินเล่น เราจ่ายแค่เฉพาะตอนเรา query ข้อมูลเท่านั้น ราคาก็แค่ $5 ต่อ 1 TB ความดีงามอีกอย่างที่จะมากล่าวถึงในบทความนี้ นั่นก็คือ Athena มีตัว connector ที่ทำให้เราสามารถใช้ Tableau (ตั้งแต่เวอร์ชั่น 10.3 ขึ้นไป) ดึงข้อมูลจาก Athena ได้!

(more…)

Pipeline as Code กับ Jenkins

Pipeline as Code คือการที่เราเขียนโค้ดเพื่อสร้างขั้นตอนของการ delivery/deployment แทนที่เราจะมานั่งปรับแต่งเครื่องมือที่ใช้ทำ continuous integration and continuous delivery/deployment (CI/CD) อย่างตัวที่เรารู้จักกันดี เช่น Jenkins เป็นต้น

Robot Framework 101 มาลองใช้กัน

Robot Framework (รูปที่ 1) เป็นเครื่องมือที่น่าสนใจเครื่องมือหนึ่งสำหรับทำ acceptance test และ acceptance-test driven development (ATDD) ของบรรดา Tester ทั้งหลาย รวมไปถึง Developer ด้วย ที่ว่าน่าสนใจก็เป็นเพราะว่าเครื่องมือนี้ช่วยให้เราสามารถ automate งานทดสอบทั้งหลายของเราได้ ตามที่เขียนไว้บนเว็บของ Robot เองเลย! (ในบทความนี้ผมขอเรียกสั้นๆ ว่า Robot นะ)

(more…)

ใช้ Python ต่อฐานข้อมูล PostgreSQL

สมัยนี้เรามี framework หลายๆ ตัวที่ทำให้เราสามารถเขียนโปรแกรมเชื่อมต่อกับฐานข้อมูลได้โดยง่าย แต่ว่าก็อาจจะมีบางงานที่เราไม่อยากที่ต้องไปสร้างโปรเจคโดยใช้ framework นั้นๆ เราอยากจะแค่เขียนสคริปต่อกับฐานข้อมูลได้แบบเร็วๆ บทความนี้จะมาลองเขียน Python ต่อกับฐานข้อมูล PostgreSQL แบบง่ายๆ กัน

Pronto Tools พวกเราทำอะไร?

Pronto Tools พวกเราทำอะไร?

ในปี 2012 โปรเจคของเราเริ่มมีแววที่จะขยายใหญ่ขึ้น และเพิ่มมากขึ้นเรื่อยๆ เราคิดว่าถึงเวลาแล้วที่เราจะสร้างบริษัทใหม่ที่มีเป้าหมายไปทางด้านการพัฒนาซอฟต์แวร์เป็นหลักในชื่อ “Pronto Tools”

Docker มาใช้กับ Django Web Framework ได้อย่างไร?

Docker มาใช้กับ Django Web Framework ได้อย่างไร?

ช่วงนี้ที่ Pronto ได้นำเอา Docker เข้ามาใช้งานเป็นที่เรียบร้อยแล้ว แต่ประเด็นคือเราก็อยากให้คนอื่นใช้เป็นด้วย! เลยมาเขียนบทความนี้อธิบายถึงขั้นตอนต่างๆ ในการหยิบเอาเทคโนโลยีสุดฮิตอย่าง Docker มาใช้กับ Django Web Framework ว่าเราเริ่มต้นสร้างกันอย่างไร รวมไปถึงการนำเอา Nginx มาเป็น Web server และ PostgreSQL มาเป็นฐานข้อมูล จับทั้ง 3 มาประสานพลังกันโดยใช้ Docker Compose ซึ่งหวังว่าถ้าได้อ่านแล้วจะสามารถนำไปประยุกต์ใช้ในโปรเจคอื่นๆ กันได้ หรืออย่างน้อยได้ลองเล่นดูเนอะ 🙂

Docker Image สร้างอย่างไรให้มีประสิทธิภาพ?

Docker Image สร้างอย่างไรให้มีประสิทธิภาพ?

การสร้าง Docker image ให้มีประสิทธิภาพเป็นส่วนสำคัญอย่างหนึ่งที่ไม่ควรมองข้ามทั้งในขั้นตอนของ development และ deployment ของระบบ ให้มีประสิทธิภาพหมายความว่าอย่างไร? ในทีนี้หมายถึงการทำให้ขนาดของ image เล็ก เคลื่อนย้ายไปมาได้ง่าย ง่ายต่อการจัดการ สามารถสร้าง (build) ได้เร็ว ตัว image ที่ได้มามีความสมบูรณ์ service ที่อยู่ข้างในสามารถรันได้อย่างไม่มีปัญหา ฯลฯ

สร้าง Search ของตัวเองด้วยฟิลเตอร์ posts_results

ได้โจทย์มาว่าเราจะต้องหาทางทำให้เราสามารถสร้าง Search ของเราเองได้ใน WordPress ความยากจะอยู่ที่ว่าทำอย่างไรเราถึงจะเอาผลลัพธ์ที่เราได้จากการ Search ไปแทรกก่อนที่ WordPress จะเอาผลลัพธ์นั้นไปแสดงผล

ตอนแรกนึกถึงฟิลเตอร์ pre_get_posts แต่มันไม่ได้ตอบโจทย์ที่เราตั้งไว้ เพราะว่า ฟิลเตอร์นี้เอาไว้ใช้ปรับแก้ตัว Query ของเรา ก่อนที่ WordPress จะเอา Query ไปประมวลผลจริงๆ ซึ่งผลลัพธ์จากการ Search สุดท้ายที่เราได้ มันก็จะมาจาก WordPress อยู่ดี

การเขียน Git Commit Message

การเขียน Git Commit Message

สรุปมาจากบทความ How to Write a Git Commit Message ของ Chris Beams นะครับ ตามไปอ่านฉบับเต็มๆ กันได้

การเขียน commit message นั้นสำคัญมาก เพราะว่ามันเป็นอีกช่องทางการสื่อสารหนึ่งระหว่างโปรแกรมเมอร์ด้วยกัน และยังเป็นช่องทางที่ดีที่สุดในการบอก context ของการแก้โค้ดนั้นๆ อีกด้วย การเขียน commit message นั้น ควรจะเป็นข้อตกลงของทีม เป็นสิ่งที่ทุกคนควรจะร่วมแรงร่วมใจกันทำนะครับ

Peter Hutterer หนึ่งใน senior software engineer บริษัท Red Hat ได้กล่าวไว้อย่างน่าสนใจว่า

Re-establishing the context of a piece of code is wasteful.

WordPress Audit Log บน AWS Elasticsearch

เนื่องจากที่ Pronto เราใช้ระบบ Multisite ของ WordPress ดูแลเว็บไซต์ของลูกค้าเป็นพันกว่าเว็บไซต์ ทำให้การดูแล โดยเฉพาะเรื่องความปลอดภัยของแต่ละไซต์นั้นทำได้ค่อนข้างลำบาก เวลาตรวจสอบอะไรกับไซต์หนึ่งสักที ก็ต้องมานั่งกรอง log ให้มีแต่ข้อมูลไซต์ที่เราต้องการตรวจสอบ ถ้าใครเคยใช้ Multisite ก็น่าจะพอนึกภาพออกเนอะ เพราะ log มันเก็บไว้ที่เดียวกันหมดทุกไซต์ ต่างกับแยกแต่ละเว็บออกเป็นระบบส่วนตัว ซึ่งแบบนี้เราสามารถดู log เฉพาะของเว็บไซต์นั้นได้ทันที

ปัญหาอีกอย่างคือเรื่อง infrastructure ที่เราต้องไปดูแล ต้องคิดถึงการเก็บข้อมูล เพราะเนื่องจากข้อมูล log จะเป็นข้อมูลที่ไหลเข้ามาเรื่อยๆ อยู่แล้ว ไฟล์ log ก็จะยิ่งใหญ่ขึ้นเรื่อยๆ ถ้าจัดการเก็บเองแล้วคอย rotate เองเรื่อยๆ ก็คงเปลืองแรงไม่น้อย ยิ่งถ้าข้อมูลเก็บอยู่ในไฟล์ ก็คงจะลำบากที่จะดึงออกมาตรวจสอบ หรือเอาข้อมูลเหล่านั้นมาวิเคราะห์ (data analytics)