Google BigQuery Best Practices
พูดถึง practices ที่เราควรทำใน BigQuery ก็มีประมาณนี้
ตอน join ให้ join กับตารางใหญ่ที่สุดก่อน แล้วตามด้วยตารางที่เล็กที่สุด แล้วก็ค่อย ๆ join กับตารางที่มีขนาดลงลงมาเรื่อย ๆ เพื่อให้ performance ที่ดีขึ้น (เป็นการช่วย SQL query optimizer ด้วย)
ถ้าข้อมูลไหนมีหน่วย เช่น ข้อมูลเงิน ก็ให้ต่อท้ายด้วยสกุลเงินนั้น ๆ เช่น
amound_paid
ถ้ามีหน่วยเป็น GBP ก็ให้ตั้งชื่อคอลัมน์เป็นamount_paid_gbp
หลีกเลี่ยงการสร้าง external table เช่น จาก Google Drive เพราะจะทำให้ performance ตกลง อีกทั้งอาจจะมีปัญหาเรื่อง access control อีก
ใช้ policy tags และ row level security ด้วย เพื่อทำ data governance และ security
ใช้ Common Table Expressions (CTEs) แทนที่ subqueries เพราะเรื่อง performance, readability และ re-usability ที่ดีกว่า
Etc.
และอื่น ๆ อีก ลองอ่านต่อในบทความได้ ซึ่งพวก practices ต่าง ๆ เหล่านี้เราควรที่จะหยิบเอามาใช้ในทีม และถ้าจะให้ดี ควรทำเป็น handbook ของทีมไปเลย
https://visdata.medium.com/google-bigquery-best-practices-e4e0529541a2
ตรวจสุขภาพวัฒนธรรมองค์กร ผ่านเทคนิค 3 ข้อ | A Cup of Culture Ep.573
เค้าหยิบเอาเรื่องการทำ healthcheck หรือตรวจสุขภาพวัฒนธรรมในองค์กรมาพูดคุยกัน ซึ่งปกติเรามักจะไม่ค่อยได้ทำกันเท่าไหร่ ซึ่งเราสามารถใช้ self-determination มาใช้ในการตรวจสุขภาพได้ โดยจะมี 3 ข้อตามนี้
ความเป็นตัวตน และเป้าหมายส่วนตัวของพนักงาน ทำอย่างไรให้พนักงานใช้ศักยภาพได้สูงสุดได้จริง
Human connection ถ้าพนักงานมีความสัมพันธ์ที่ดี มีความหมาย จะทำให้พนักงานมีพลังงานชีวิต
เรื่อง growth ในงานของตัวเอง ดูว่าพนักงานมีทักษะ ถูกพัฒนาทักษะ หรือได้ใช้ทักษะในงานของเค้าจริง ๆ ไหม
ทีนี้พอเราได้ 3 หัวข้อนี้แล้ว ก็มาคิดเรื่องคำถามที่เกี่ยวข้องเพื่อออกแบบสอบถามให้กับพนักงาน และเราก็จะสามารถวัดเรื่องต่าง ๆ ได้
สร้างแผนลวงปลิดชีพ ฆาตกรวิปริตในคราบคนดี | File Not Found EP.194
เพิ่งเคยฟัง podcast อันนี้ เป็นเรื่องจริงที่แปลกประหลาด คดีฆาตกรรมต่าง ๆ เล่าได้สนุก เพลิดเพลินดี ตอนนี้เกี่ยวกับฆาตกรคนหนึ่งที่เค้าเก็บสิ่งของต่าง ๆ เกี่ยวกับเหยื่อไว้ในกล่องคริสต์มาส
InfoQ Software Architecture and Design Trends Report - April 2023
มี 6 การเปลี่ยนแปลงจากปีที่แล้ว
Design for portability (อยู่ Early Adopters) - ไม่ใช่เรื่องที่เราออกแบบโค้ด แล้วก็ย้ายโค้ดไปไหนก็ได้ แต่เป็นเรื่องการสร้าง clean abstraction ของ infrastructure ทำให้เราสามารถที่จะสนใจจะออกของไปสร้างมูลค่ามากกว่ามาสนใจในรายละเอียดของแพลตฟอร์มมากจนเกินไป เทคโนโลยีในเรื่องนี้ก็ได้แค่ Dapr กับ WebAssembly
Large language models (อยู่ Innovators) - ก็หนีไม่พ้นเรื่องของ Gen AI ที่นับวันยิ่งจะดีขึ้นเรื่อย ๆ
Data-driven architecture (อยู่ Early Adopters) - เวลาพูดเรื่องนี้จะหนีไม่พ้นแนวคิดของ Data Mesh แน่นอน ที่เมื่อก่อนเราแยก data กับ architecture ออกจากกัน แต่ตอนนี้เราต้องเอากลับมาคิดร่วมกันแล้วตั้งแต่เริ่มว่าเราจะเก็บข้อมูลอย่างไร เก็บที่ไหน มี security ประมาณไหน จนไปถึงการทำ AI/ML เลย
Design for sustainability (อยู่ Innovators) - เรื่อง green software มาแน่นอน จากนี้ไปต้องคำนึงถึงเรื่อง carbon ด้วย ว่าเราจะวัดผลอะไรอย่างไร ซึ่งตอนนี้ก็เริ่มมีเครื่องมือมาช่วยในการวัดค่าต่าง ๆ มากขึ้นแล้ว
Decentralized apps (dApps) (อยู่ Innovators) - เรื่อง decentralized app ก็เริ่มเข้ามาล่ะ อย่าง Mastodon ก็เป็น decentralized social network แต่ว่าก็น่าจะยังคงต้องใช้เวลาอีกสักพักในการนำเข้ามาใช้อยู่
Architecture as a team sport (อยู่ Early Adopter) - ตอนนี้ architects จะไม่ทำงานคนเดียวอีกต่อไปแล้ว บทบาทหน้าที่เปลี่ยนไป มีหลาย ๆ ที่ใช้ชื่อ principal engineers แทน และทำงานร่วมกันกับ engineers อย่างใกล้ชิดมาก ในการทำ system design ส่วนเรื่อง Architecture Decision Records (ADRs) ที่เป็นเครื่องมือตัวหนึ่งที่ engineers ร่วมสร้างกันขึ้นมาเพื่อใช้ในการสื่อสารการตัดสินใจต่าง ๆ ตอนนี้ก็เป็นเรื่องปกติแล้วที่ทำกัน
https://www.infoq.com/articles/architecture-trends-2023/
Rails: When Changing Code Doesn't Change Behavior
ตอนที่เราแก้โค้ด ไม่เห็นว่าอัพเดท เราอาจจะลองทำตาม checklist ตามนี้
ตรวจสอบ environment ว่าเราอยู่ถูก environment หรือเปล่า เราอยู่ที่ Local หรือ UAT
ดู feature flag ด้วย ว่ามีตรงไหน flag ไว้บ้าง
ดูว่าเรารัน watcher อยู่หรือเปล่า เวลาที่แก้ CSS หรือ JS แล้วถ้าหน้าตาไม่เปลี่ยนแปลง ก็อาจจะแปลว่าเรายังไม่ได้รัน ซึ่ง Rails เวอร์ชั่นใหม่ ๆ จะรันคำสั่ง
./bin/dev
ไว้ แทนที่จะรัน./bin/rails server
บางครั้งเราอาจจะลองลบ generated assets ออกไปก่อน ใช้คำสั่ง
./bin/rails assets:clobber
Disable Spring (ตัว app preloader) ซึ่งอาจจะมี weird bug ได้ จาก cache ที่ gem ตัวนี้เก็บไว้อยู่
Delete cache ใช้คำสั่ง
./bin/rails tmp:cache:clear
หรือ./bin/rails tmp:clear
Restart the server เป็นวิธีแก้ปัญหาที่ classic มาก ซึ่ง server ที่รันอยู่อาจจะมี bug อะไรสักอย่าง หรือ cache ที่ไม่ได้ถูกลบออก ทำให้เราไม่เห็นการเปลี่ยนแปลงได้
เราอาจจะมองปัญหาผิดจุด ซึ่งก็ต้องค่อย ๆ ไล่ดูทีละจุด
ลองใส่
raise
หรือputs
ไปในไฟล์ที่เราแก้อยู่ เราก็จะได้รู้ว่าเราแก้ถูกไฟล์หรือไม่
มี checklist แบบนี้ก็ดีเหมือนกันนะ ช่วยคนที่เป็นมือใหม่ได้เยอะ เค้าจะได้ลองทำไปทีละข้อ ๆ พอทำไปบ่อย ๆ ต่อไปก็อาจจะทำของพวกนี้โดยอัตโนมัติได้เอง
https://thoughtbot.com/blog/rails-when-changing-code-doesnt-change-behavior
สรุป Live ของ Skooldio เรื่อง Skills 2024 : เริ่มปีใหม่ให้เก่งกว่า 💪💪💪
ในปี 2024 เราควรมีทักษะ 10 ทักษะ ประกอบกับคอร์สออนไลน์ที่ Skooldio เตรียมไว้ให้
Digital Literacy
Technology
Automation
AI
Data
Service Orientation
Leadership
Agile
Persuasive
UX/UI
Adam Wathan - Tailwind CSS: It looks awful, and it works - Rails World 2023
ในวีดีโอนี้ Adam (ผู้สร้าง Tailwind CSS) มาเล่าว่า Tailwind CSS เนี่ยเวลาใช้งาน เราจะเห็นคลาสใน HTML เยอะมาก ๆ ทำให้ดูเยอะแยะไปหมด ทำไมต้องมีคลาสเยอะขนาดนั้น ซึ่งตอนที่ Adam เค้าลองทำให้ดู ปรับ style ของหน้าเว็บตัวอย่างให้ดู ก็ค่อนข้างที่จะเข้าใจว่าทำไมถึงต้องใช้คลาสเยอะ เหมือนกับว่าเรามีคลาสย่อย ๆ แล้วค่อย ๆ ประกอบขึ้นมาตามที่เราต้องการ
ทีนี้เรื่องการจัดการโค้ดซ้ำ ๆ ใน Rails เราสามารถใช้ partial template ได้ หรือจะใช้ฟีเจอร์ของ Tailwind ก็ได้ที่ทำ custom คลาสขึ้นมาใช้งาน แต่ก็จะไม่ค่อยแนะนำเท่าไหร่ เพราะว่าจะทำให้การใช้งานซับซ้อนขึ้นได้ง่ายมากถ้าไม่ระวัง
ข้อดีอีกอย่างคือเวลาที่เรากลับมาอ่านโค้ดใหม่ เราไม่ต้องไปทำความเข้าใจกับ custom คลาสที่เราเคยทำไว้ เราสามารถค่อย ๆ อ่านคลาสของ Tailwind แล้วปรับได้เลย ทำให้เรื่อง maintenance ง่ายขึ้นเยอะ
Functional Programming กับพี่รูฟ ODDS
ฟังพี่รูฟอธิบายเรื่อง functional programming โดยใช้ภาษา Python ให้ดู (ตามไปส่องโค้ดได้ที่ https://github.com/roof42/python-monad-pymonad) จนไปถึงการใช้ Monad และการเขียนโปรแกรมแบบ Railway Oriented Programming พี่รูฟอธิบายได้สนุกมาก แนะนำให้ลองไปดูวีดีโอย้อนหลังกันนะ
พอเขียนโดยคิดแบบ functional แล้ว โค้ดเราจะอ่านง่ายมากขึ้น เพราะสื่อ intention ออกมาได้ชัดเจน ทดสสอบง่าย แล้วก็ maintain ได้ง่ายด้วย เย้
What's new in Ruby 3.3
Ruby มี JIT ชื่อ YJIT ที่มี response time ดีกว่าเดิม 15% ซึ่งจะถูกใส่เข้ามาใน Rails app เลยโดย default แล้วก็มี RJIT ที่เขียนด้วย Ruby ล้วน ๆ เป็น experimental อยู่
ใน
range
มี method ใหม่ชื่อoverlap
ที่เอาไว้ดูว่า range ทั้ง 2 range มี overlap กันหรือเปล่ามี parser ตัวใหม่ชื่อ Prism เป็น default gem
มี M:N thread scheduler ตัวใหม่ที่เข้ามา ปรับปรุง performance ของ thread ให้ดีขึ้น
ดูเพิ่มเติมต่อได้ที่ Ruby 3.3.0-rc1 Released