By Arnon Puitrakul - 18 พฤษภาคม 2022
ปกติเวลาเราเขียนโปรแกรมออกมาจริง ๆ อะ บ้างแหละ ที่เราเขียนออกมาเป็น GUI แต่ส่วนใหญ่แล้ว โปรแกรมที่เราใช้งานกัน เอาแบบ Developer หรือพวก Server ใช้งานกันก็จะอยู่ในรูปแบบของ Command Line ซะส่วนใหญ่ รุ่นใหญ่เขาใช้กันเว้ย แต่มันก็ดูเหือดแห้งเหลือเกิน เราอาจจะเคยเห็นบางโปรแกรมที่มีพวก Animation หรือการใส่สีลงไปใน Command Line ได้ด้วยเหมือนกัน สำหรับใน Python เองก็มี Library ที่ทำอะไรแบบนี้เหมือนกันคือ Rich นั่นเอง
// Conda
conda install rich
// Pip
pip install rich
เรามาติดตั้ง ความรวย กันดีกว่า ชื่อก็คือ รู้สึกถึงเงินแล้ว เราสามารถติดตั้งมันได้จาก Package Manager ที่เราใช้งานตรง ๆ ได้เลย เช่น Conda และ Pip เป็นต้น
เรามาเริ่มกับอะไรที่ Basic กันก่อนดีกว่า คือ การใส่พวก สี และ Style ให้ตัวหนังสือ เช่น ตัวหนา ตัวเอียงอะไรแบบนั้น มันก็ทำได้เหมือนกัน แล้วบอกเลยว่า โคตรง่าย
from rich import print
print("If you [u]smoke[/u] [i](what you [green]smoke?[/green])[/i] I got the [u]haze[/u] [bold purple](Purple Haze)[/bold purple]")
เราแค่เรียกคำสั่ง print ออกมาจาก rich ตรง ๆ ได้เลย มันก็จะไปทับ คำสั่ง print ปกติออกไป แล้วเราก็สามารถใส่ Styling ได้ตามที่เราต้องการเลย เช่น u ก็คือ Underline หรือขีดเส้นใต้ นอกจากนั้น เราก็สามารถใส่สีได้ด้วย ผ่านการพิมพ์ชื่อสีเข้าไปตรง ๆ ได้เลย
เราก็จะได้แบบด้านบนเลย เราจะเห็นว่า ตรงที่เราใส่เขียว มันก็จะเขียวเลย กับตรงที่เราใส่ bold purple มันก็จะได้ออกมาเป็นตัวหนาสีม่วง แค่นี้ก็ทำให้มันอลังการแล้ว แต่ ๆๆ มันยังไม่หมด
>>> dir(list)
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
เวลาเราเรียกพวก Method อยากรู้ว่ามันทำอะไรได้บ้าง เราก็จะเรียกมันออกมาเช่น อยากรู้ว่า list ในนั้นมันมีอะไรบ้าง เราก็สามารถใช้คำสั่ง dir(list) ตรง ๆ ได้เลย แต่เราจะเห็นว่า มันก็แอบดูยากไปหน่อย ไม่สวยงามเลย ใน Rich เองมันก็มีอะไรแบบนี้มาให้เราด้วย
from rich import inspect
inspect(list, methods=True)
เราก็จะได้แบบด้านบนเลย มันก็จะแสดงออกมาเลยว่า มันเป็นอะไร แล้วในนั้นมันมี Method อะไรบ้าง พร้อมกับบอกเลยว่ามันทำอะไร ถ้าเราไม่ได้ใช้ List เราก็ต้องเข้าไปเปิดทีละคำสั่งว่าอันไหนมันทำอะไรยังไงบ้าง แต่อันนี้เขาทำมาให้เราหมดแล้ว ดีมาก ๆ เวลเราเขียนโปรแกรม
อีกหนึ่งอย่างที่เราใช้เยอะมาก แล้วมันดีมาก ๆ คือ การทำ Logging ปกติ เราก็ใช้งาน Logging ใน Python อยู่แล้วนะ เพราะมันทำให้เราจัดการ Log ได้ง่ายมาก ๆ ตั้งแต่การบอกปลายทางว่า เราจะออกหน้าจอ และออกไฟล์อะไรแบบนั้น
Logging ใน Rich ก็ทำมาให้ง่ายเลยละ ถ้าเราคุ้นเคยกับ Logging ใน Python อยู่แล้ว เราก็แค่กำหนด Style ของ Log แล้วใช้งานผ่านคำสั่งของ Python Log ได้ตามปกติเลย ดังนั้น เราแทบไม่จำเป็นต้องเปลี่ยนแปลง Code เยอะเลย เพื่อให้เราสามารถมาใช้งานบน Rich ได้ ที่เหลือ ก็น่าจะเป็นแค่การตกแต่งให้เรียบร้อยเท่านั้นเอง
จริง ๆ Rich ทำได้เยอะกว่านี้มาก ๆ เช่น พวก Progress Bar จนไปถึงพวกการวาดตาราง และพวก Markdown ทำได้หมดเลย คือ เราทำได้ตั้งแต่ CLI ง่าย ๆ จนไปถึงพวกที่เป็น Rich CLI อลังการงานสร้าง แบ่ง Panel แล้วทำงานนั่นนี่ได้แบบ สุด ๆ ไปเลย พวกนี้ที่เหลือ ก็ขึ้นกับจินตนาการของเราแล้วละว่า เราจะเอามันมาทำอะไร แต่ส่วนใหญ่ที่เราใช้งาน เราก็ใช้งานในส่วนที่เราเอามาเขียนให้อ่านกันวันนี้เลย
Firewall ถือว่าเป็นเครื่องมือในการป้องกันภัยขั้นพื้นฐานที่ปัจจุบันใคร ๆ ก็ติดตั้งใช้งานกันอยู่แล้ว แต่หากเรากำลังใช้ Ubuntu อยู่ จริง ๆ แล้วเขามี Firewall มาให้เราใช้งานได้เลยนะ มันชื่อว่า UFW วันนี้เราจะมาทำความรู้จัก และทดลองตั้ง Rule สำหรับการดักจับการเชื่อมต่อที่ไม่เกี่ยวข้องกันดีกว่า...
Obsidian เป็นโปรแกรมสำหรับการจด Note ที่เรียกว่า สารพัดประโยชน์มาก ๆ เราสามารถเอามาทำอะไรได้เยอะมาก ๆ หนึ่งในสิ่งที่เราเอามาทำคือ นำมาใช้เป็นระบบสำหรับการจัดการ Todo List ในแต่ละวันของเรา ทำอะไรบ้าง วันนี้เราจะมาเล่าให้อ่านกันว่า เราจัดการะบบอย่างไร...
อะ อะจ๊ะเอ๋ตัวเอง เป็นยังไงบ้างละ เมื่อหลายเดือนก่อน เราไปเล่าเรื่องกันขำ ๆ ว่า ๆ จริง ๆ แล้วพวก Loop ที่เราใช้เขียนโปรแกรมกันอยู่ มันไม่มีอยู่จริง สิ่งที่เราใช้งานกันมันพยายาม Abstract บางอย่างออกไป วันนี้เราจะมาถอดการทำงานของ Loop จริง ๆ กันว่า มันทำงานอย่างไรกันแน่ ผ่านภาษา Assembly...
นอกจากการทำให้ Application รันได้แล้ว อีกเรื่องที่สำคัญไม่แพ้กันคือการวางระบบ Monitoring ที่ดี วันนี้เราจะมาแนะนำวิธีการ Monitor การทำงานของ MySQL ผ่านการสร้าง Dashboard บน Grafana กัน...