Webmail transformation!! #1

คุยก่อน webmail.psu.ac.th อยู่กับเรามา… นานมากแล้วจนปัจจุบันนี้แทบจะคุยไม่รู้เรื่องแล้วค้นหาด้วยภาษาไทย แท้ ๆ ก็ไม่ได้ ก็คงถึงเวลาต้องไป ที่ชอบๆ สักที พุทโธธรรมโมสังโข!!! เร็ว ๆ นี้สำนักนวตกรรมดิจิทัลและระบบอัจฉะริยะจะประกาศใช้งาน webmail ตัวใหม่ ที่ได้เปิดให้ทดสอบใช้งานมาระยะหนึ่งแล้วอย่างเป็นทางการ โดยสามารถเข้าใช้งานผ่าน https://webmail2.psu.ac.th ซึ่งต่อไปจะกลายเป็น https://webmail.psu.ac.th ผลกระทบถึงท่าน ๆ ทั้งหลาย… ดังนี้ ถ้าก่อนหน้านี้ใช้ https://webmail.psu.ac.th มาตลอดไม่เคยใช้ gmail เลย ก็ไม่กระทบอะไรนอกจากรูปร่างหน้าตาที่เปลี่ยนไป มาก… ถึงมากที่สุด ถ้าอ่านเมล์ที่ gmail.com เป็นหลักก็ไม่กระทบอะไรมากนัก ถ้ามีความต้องการตั้งค่า filter เพิ่มเติมก็จะกระทบมากเนื่องจากวิธีการเปลี่ยนแปลงจากเดิมค่อนข้างมาก เริ่มต้นการใช้งาน เปิดเว็บ https://webmail2.psu.ac.th จะได้หน้าตาประมาณนี้ (อาจมีการเปลี่ยนแปลงเมื่อประกาศใช้จริง) ล็อคอินเข้าระบบให้เรียบร้อยจะได้หน้าตานี้ ทดสอบค้นหาภาษาไทย คลิกในช่อง Search… ที่อยู่บล็อกกลาง ลองค้นหาคำว่า “สถานะ” แล้วกด enter สิ่งที่ได้ก็ตามภาพนะครับ การค้นหาสามารถกำหนดเงื่อนไขได้ว่าจะให้ไปค้นหา คำ ๆ นั้น ในส่วนไหนของอีเมล์ ไม่ว่าจะเป็น Subject อย่างเดียว From อย่างเดียว หรือ เนื้อความในอีเมล์ ทำได้โดยคลิกที่ ที่อยู่หลังรูปซองจดหมายที่ช่อง Search… เมื่อคลิกจะได้ดังภาพ จะเห็นว่ามีตัวเลือกมากมายว่าอยู่ที่เราเลือกไม่ว่าจะเป็น subject from to cc bcc body entire message ทั้งยังสามารถระบุช่วงเวลาที่ต้องการค้นหาหรือ กำหนด โฟลเดอร์ของเมล์ที่ต้องการค้นหาได้ด้วย แต่ทั้งนี้ทั้งนั้นหากกำหนดเงื่อนไขในการค้นหาเยอะ และมีจดหมายจำนวนมากการค้นหาก็อาจกินเวลานานได้ การย้ายบ้านจาก webmail.psu.ac.th มายัง webmail2.psu.ac.th สิ่งที่ผู้ใช้ต้องทำเองคือการย้ายข้อมูลรายชื่อผู้ติดต่อ หรือที่เรียกว่า Address book นั่นเอง Log in เข้าระบบที่ https://webmail.psu.ac.th เมื่อ log in เข้ามาแล้วคลิกที่ Addresses จะได้ดังภาพ ซึ่งเป็นการแสดงรายชื่อผู้ติดต่อที่มีทั้งหมด ทั้งยังสามารถ export ออกมาได้ด้วย เมื่อต้องการจะ export เลื่อนจอลงมาด้านล่างในส่วนของ Address book export คลิก Export to CSV File จะเป็นการ download รายชื่อทั้งหมดออกมาเก็บไว้ในไฟล์ .csv ก็ให้เซฟไว้ในที่ที่หาเจอนะครับ กลับมาที่ https://webmail2.psu.ac.th หาก session expire ไปแล้วให้ล็อคอินใหม่ เมื่อล็อคอินเข้ามาได้ให้คลิก Contacts ที่อยู่ด้านซ้ายมือ จะได้ดังภาพ คลิกปุ่ม Import ด้านขวามือ จะได้หน้าต่าง Import contacts ก็ให้กด Browse ไปยังไฟล์ที่เซฟก็ไว้จากข้อ 10. คลิก Import จะได้หน้าสรุปว่า นำเข้าสำเร็จกี่รายชื่อใครบ้าง หลังจากนั้นคลิก x ได้เลย จะได้รายชื่อผู้ติดต่อไว้ใน webmail2 เรียบร้อย *หมายเหตุเพิ่มเติม อีเมลแอดเดรสของรายชื่อผู้ติดต่อนั้นต้องมีอยู่จริงเท่านั้นจึงสามารถนำเข้าได้นะครับ สำหรับพาร์ท 1 ก็ขอจบไว้เพียงเท่านี้รอพาร์ทต่อไปครับ ขอให้สนุก

Read More »

วิธีแก้ปัญหา docker container ไม่ start cron อัตโนมัติ

ปัญหา เวลาสร้าง docker container เพื่อ run งานแบบอัตโนมัติ เราก็จำเป็นต้องใช้ cron แต่ว่า เจ้า docker container images เนี่ย จะเป็นรุ่นตัดทุกอย่างที่ไม่จำเป็นออกหมด เอาไว้ให้ start – run – stop แต่ถึงกระนั้น เราก็ยังอยากได้การทำงานแบบ cron อยู่ดี Reproduce สร้าง docker container จาก ubuntu:20.04 ตรวจสอบว่ามี crontab หรือไม่ ก็ไม่มี /var/log/syslog มีไม๊ ก็ไม่มี systemctl มีไม๊ ก็ไม่มี แก้ไข ติดตั้ง 3 อย่าง cron, systemctl, rsyslog แล้ว ขอแถม vim ด้วย ติดตั้งแล้ว ลองตรวจสอบ ก็พบว่า crontab มาแล้ว, systemctl มาแล้ว ส่วน /var/log/syslog ยังไม่ได้สร้าง ลอง start cron และ rsyslog ดู ก็พบว่า /var/log/syslog มาแล้ว ทดสอบสร้าง cron ทำความเข้าใจก่อน crontab เอาไว้สร้าง cron ส่วนตัวของแต่ละ user แต่ที่ /etc/cron.d/ นั้น เอาไว้สร้างสำหรับ system 2 วิธีการสร้าง cron นี้แตกต่างกันที่ crontab ไม่สามารถระบุผู้ใช้ได้ แต่ใน /etc/cron.d/ นั้น สามารถระบุ user ที่จะ run ได้ ต่อไป จะสร้าง cron ง่าย ๆ ให้ echo เวลา ทุก 1 นาทีลงไฟล์ แล้วใส่ บรรทัดนี้ลงไป ดูใน /var/log/syslog แล้ว ก็พบว่า ทำงานได้ ดูผลใน -/test.log เป็นอันว่า OK ต่อไป ดูว่า ถ้า restart docker แล้ว cron จะทำงานไม๊ ? ทดสอบ restart docker container ออกจาก bash ของ docker แล้วใช้คำสั่ง รอสัก 3 นาที แล้วใช้คำสั่ง ผลที่ได้คือ อ้าว cron ไม่ทำงานต่อ มาดูเหตุกันก่อน เราต้องไปดู รากเหง้าของ ubuntu:20.04 image https://hub.docker.com/_/ubuntu Docker ทำงานโดยจะทำเพียงคำสั่งเดียว การสร้าง docker image จะสร้างจาก Dockerfile ซึ่ง ubuntu:20.04 มี Dockerfile ดังนี้ แสดงว่า docker container ที่ใช้ ubuntu:20.04 (ตัวอื่น ๆ ก็ต้องตามไปดูกัน) ก็จะเรียก Bash เป็นคำสั่งสุดท้าย ก่อนจะยืนเป็น Service ให้ใช้งาน ดังนั้น … เราก็ต้องไปทำให้ start cron service ใน .bashrc กัน ประเด็นคือ มัน start ด้วย user ไหน ? ลองใช้คำสั่งนี้ ก็แสดงว่า สำหรับ image ตัวนี้

Read More »

วิธีแก้ปัญหา Let’s Encrypt กับ Root Certificate Expire ในวันที่ 30 กันยายน 2021

ปัญหา เช้านี้ (30 กันยายน 2021) พบว่า อยู่ ๆ เว็บเซิร์ฟเวอร์ที่ให้บริการ ซึ่งใช้ Let’s Encrypt ก็ ขึ้นหน้า “This connection is not private” เป็นเฉพาะกับ เครื่อง Mac, iPhone, iPad ไม่ว่าจะใช้ Safari หรือ Chrome ก็ตาม เอ่ เพิ่ง Renew ไปเมื่อเดือนที่แล้ว เกิดอะไรขึ้น ลองคลิกที่รูป Key แล้ว View Certificate พบว่า อ้าว … ไรว้า ก็ Google ดู พบว่า Root CA ของ Let’s Encrypt “รุ่นเก่า” ทะยอยหมดอายุ https://letsencrypt.org/docs/dst-root-ca-x3-expiration-september-2021/ กล่าคือ ถ้าของใคร Root CA (บนสุดของภาพ) เป็น จะทำให้การใช้งานจาก Web Browser บน Apple ใช้งานไม่ได้ ก็ restart ดู ก็ยังไม่หาย เอ่ ทำไมนะ ขอ Renew ใหม่ ก็ยังไม่หาย หาไปหามา ไปพบ https://community.letsencrypt.org/t/r3-certificate-expired-macos/160852 เค้าบอกว่า ลองดูซิ ว่า Root CA ตัวใหม่ที่ได้มา เป็นของอะไร ด้วยคำสั่ง คำสั่งนี้ ทำที่เดียวกันกับไฟล์ fullchain.pem พบว่า เอ่ …. ก็ได้ Root CA เป็น ISRG Root X1 แล้วนะ ทำไมยังใช้ไม่ได้ ไปตรวจสอบดู httpd.conf อ้อ … เราอ้างอิงแค่ cert.perm วิธีแก้ไขคือ ไปเพิ่ม ให้เป็นแบบนี้ จากนั้น ก็ restart เรียบร้อย

Read More »

วิธีรัน Jupyter Notebook, ปิด browser แล้วระบบส่ง LINE บอกพร้อมภาพ เมื่อเสร็จแล้ว ค่อยกลับมาดูผล

ปัจจุบัน งานด้าน Data Science ก็มักจะใช้ Jupyter Notebook เพราะสะดวกในการทดลอง ทดสอบ ทำทีละบรรทัด ดูผล ปรับแต่งไปได้เรื่อย ๆ แถมสามารถซื้อ Server ส่วนกลาง ลงทุน GPU แล้วใช้พร้อม ๆ กันหลาย ๆ คนทั้งทีมก็ได้ ปัญหาอยู่ตรงที่ การสร้าง Model มักจะใช้เวลานาน (มาก) แล้ว Jupyter มันเป็น Web-based จะปิด Browser ก็ได้ แต่หลายคนคงเคยเจอว่า พอกลับมาเปิด URL เดิม ก็ไม่เห็นผลที่รันแล้ว จริง ๆ แล้วคือ Jupyter Notebook นั้น ทำงานต่อไป จนเสร็จแล้วแหล่ะ แต่ เว็บ Browser น่าจะไม่สามารถต่อ Session ได้ (หวังว่าจะนึกภาพออก) ที่สำคัญ มันรันนานมาก เสร็จเมื่อไหร่ก็ไม่รู้ แล้วจะรู้ได้อย่างไรว่าเสร็จ เสร็จแล้วผลเป็นอย่างไร ในบทความนี้ จะนำเสนอวิธีการที่ทำให้ สั่งรันงานที่ใช้เวลานาน (ขอยกตัวอย่าง 100 วินาที) แล้วปิด Browser ไปทำอย่างอื่นต่อได้เลย เมื่อระบบทำงานเสร็จ จะแจ้ง LINE Notify พร้อมแนบภาพ Graph ผลลัพธ์ ส่งมาด้วย พอกลับมาเปิด Browser กลับมาใน Jupyter Notebook เดิม สามารถดูผลการรันอื่น ๆ ได้อีกครั้งเหมือนกับไม่ได้ปิด Browser เริ่มต้นจาก Import Function ในการส่ง LINE Notify เป็นส่วนของ LINE TOKEN และ function “jobdone” ไว้ส่ง LINE Notify สามารถกำหนดข้อความ และกำหนดภาพที่จะแนบได้ Function สำหรับ Plot รับข้อมูล และ สร้างภาพเพื่อประกอบการส่ง Line ส่วนที่ใช้เวลานาน ตรงนี้ต้องอธิบายเพิ่ม ใน Jupyter จะมีสิ่งที่เรียกว่า “magic cell” ในที่นี้คือ โดยที่ %%capture คือคำสั่งที่จะเก็บผลลัพธ์ทุกอย่าง ที่ส่งออกจาก stdout, stderr รวมถึงภาพด้วย ในคำสั่งข้างต้น จะส่งออกไปยัง capture_output ซึ่งจะนำไปใช้ในภายหลัง ต่อมา จะจำลองการทำงานที่ยาวนาน คือ random ค่าระหว่าง 1-100 เอาไปใส่ใน array “data” จากนั้น ก็ sleep 1 วินาที รวมแล้ว ขั้นตอนนี้จะทำงาน 100 วินาที หรือ 1 นาที 40 วินาที (ในการทำงานจริง ยาวนานกว่านั้นมาก ๆ) เมื่อเสร็จแล้ว plot_something จะเอาข้อมูล data ไป plot แล้วแสดงผล และ save เป็นไฟล์ตามที่กำหนด คือ result.png คำสั่งต่อมา เป็นการแสดง วันเวลาปัจจุบัน โดยแสดงเป็น Timezone ของไทย สุดท้าย function jobdone กำหนดข้อความ และภาพที่จะส่ง Let’s go! รอไป 1 นาที 40 วินาที ก็จะได้ LINE Notify (อ่านขั้นตอนการได้มาซึ่ง LINE Token ได้จาก วิธีแจ้งเตือนจาก Google Forms เข้า LINE ) กลับมาใน

Read More »