การพัฒนา API อย่างมืออาชีพ และทำไมต้อง RESTful Service

API คืออะไร? API ย่อมาจาก Application Programming Interface คือการพัฒนาโปรแกรมสำหรับเป็นส่วนติดต่อเซอร์วิสของแอพพลิเคชั่น หรือโมดูลต่างๆ เพื่อให้คนภายนอกมาเรียกใช้งาน หรือกล่าวอย่างง่ายๆ ก็คือการเขียนโปรแกรมเพื่อให้บริการสำหรับให้คนอื่นมาเรียกใช้งาน ซึ่งแนวคิดเรื่องการสร้าง API เพื่อการใช้งานก็มีมาอย่างยาวนานแล้ว ยกตัวอย่างเช่นตั้งแต่ที่มีการสร้างระบบปฎิบัติการ (OS) ก็จะมีการติดต่อ API ของไดร์เวอร์อุปกรณ์ฮาร์แวร์ต่างๆ ของเครื่องคอมพิวเตอร์เพื่อเรียกใช้งานอุปกรณ์นั้นๆ ตามคำสั่งของนักพัฒนา

Read More »

แก้ไข wordpress post แล้ว update ไม่ได้ แอดมินต้องแก้ไขอย่างไร

หลังจากย้าย WordPress site ไปลง ubuntu 16.04.1 ก็ได้เตรียมติดตั้งโปรแกรมต่าง ๆ แต่แล้วเมื่อลองจะแก้ไขบล็อก กลับทำไม่ได้ ขึ้นข้อความว่า “The sysadmin.psu.ac.th page isn’t working sysadmin.psu.ac.th is currently unable to handle this request. HTTP ERROR 500” เกิดอะไรขึ้นหล่ะ แล้วเราจะต้องทำอย่างไร ค้นหาเจอเว็บนี้ ที่บอกเราว่า ให้ลองเปิด DEBUG https://wordpress.org/support/topic/http-error-500-internal-server-error-whole-blog-is-down “So to understand where the reason of 500 error is I suggest go to wp-config.php in the root of your website and add there two lines: define(‘WP_DEBUG’, true); @ini_set(‘display_errors’, 1); After that you can see exactly place which linked with 500 error. After fixing I suggest return it how it was by default (only one line) define(‘WP_DEBUG’, false);” เมื่อใช้คำสั่งตรวจสอบ error.log ครั้งแรก ไม่เห็นอะไรเพิ่มเติม แต่พบ error 404 ของ plugin ที่ชื่อ WP Like Button ก็ลองปิด plugin นี้ดูเราจึงจะพบ error ก็เห็น error ต่าง ๆ ได้จากคำสั่งข้างล่างนี้ tail -f /var/log/apache2/error.log Fatal error: Uncaught Error: Class ‘DomDocument’ not found in /var/www/wordpress/wp-content/plugins/google-sitemap-plugin/google-sitemap-plugin.php:144 ค้นหาต่อว่าทำไมจึงขาด DomDocument ก็เจอเว็บนี้ https://blog.namran.net/2009/03/10/php-fatal-error-class-domdocument-not-found-in-blabla/ แนะนำว่า “the solution turn out to be yum install php-xml” ตรวจสอบดู เออนะ ไม่มี php-xml จริง ๆ ด้วย ด้วยคำสั่งนี้ dpkg -l | grep php-xml dpkg -l | grep php7.0-xml   ทีนี้เราก็ติดตั้ง php-xml ด้วยคำสั่ง sudo apt install php-xml จะได้ libxslt1.1 php-xml php7.0-xml ทำให้สามารถใช้งานได้ปรกติแล้ว ซึ่งในกระบวนการ post และ ppdate post นั้น ได้แก้ไข post ให้แล้ว เพียงแต่ว่ามันไปทำต่อที่ google-sitemap-plugin ไม่สำเร็จจึงแสดงเป็น error ออกมา ขอบคุณเพื่อน ๆ ที่ช่วยกันแก้ไขเรื่องนี้ด้วยกันด้วยครับ

Read More »

การตั้งค่า MaxRequestWorkers บน Apache ให้เหมาะสมกับจำนวนผู้ใช้

ปัญหาของ PSU Webmail ในช่วง 9-15 สิงหาคม 2559 ที่ผ่านมา คือ เมื่อเริ่มเข้าสู่เวลาราชการ ในวันทำการ พบว่า มีการตอบสนองที่ช้า บางครั้งต้องรอถึง 15-20 วินาที หรือ ผู้ใช้บางท่านแจ้งว่า Timeout ไปเลย หรือไม่ก็ใช้งานไปสักพัก ถูกดีดกลับมาหน้า Login ใหม่ แต่เมื่อพ้นเวลาราชการ พบว่าการตอบสนองก็เร็วขึ้นดังเดิม รวมถึงในช่วงวันหยุดก็เร็วอย่างที่ควรเป็น ขอบคุณทาง NetAdmin ที่ทำระบบตรวจสอบไว้ที่หน้า Data Center เพื่อตรวจจับความเร็วในการตอบสนองบริการ PSU Webmail ด้วย SmokePing ผลที่ได้เป็นดังภาพ จะเห็นว่า มีความหน่วงในการตอบสนอง เฉพาะในวันเวลาราชการเท่านั้น … ทำไม ??? ทำการตรวจสอบด้วยคำสั่ง ps aux |grep apache| wc -l เพื่อดูว่า มีจำนวน Apache อยู่กี่ Process พบว่า ในช่วงเวลาที่ระบบหน่วง มี Process เกือบคงที่ที่ 150 แต่ในช่วงที่ระบบทำงานได้เร็ว มีจำนวนประมาณ 50 process จากการศึกษา พบว่า Apache2 ที่ใช้ MPM Prefork นั้น จะจำกัดค่า MaxRequestWorkers ไว้ โดยหากไม่กำหนดค่าใดๆจะตั้งไว้ที่ 256 แต่เมื่อตรวจสอบในไฟล์ /etc/apache2/mods-enabled/mpm_prefork.conf พบว่า <IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxRequestWorkers 150 MaxConnectionsPerChild 0 </IfModule> ทำให้เพดานของจำนวน Process ไปจำกัดที่ 150 ดังที่ตรวจสอบเบื้องต้น เมื่อมีผู้ใช้มากขึ้นกว่าเดิม จึงทำให้ Process ไม่เพียงพอต่อความต้องการ เป็นผลให้เกิดการหน่วงขึ้น จึงทำการแก้ไข MaxRequestWorkers เป็น 256 แล้ว Restart Apache ผลทำให้ จำนวน Apache Process ขึ้นไปถึง 200 Process และการตอบสนองเร็วขึ้นตามที่ควรเป็นดังภาพ (หลังเวลา 14:45) ทั้งนี้ การกำหนดจำนวน MaxRequestWorkers นั้น ต้องสัมพันธ์กับ RAM ของ Server ด้วย โดยมีสูตรคร่าวๆ คือ จำนวน RAM ในหน่วย MB หารด้วยขนาดของ Apache Process โดยเฉลี่ย เช่น มี RAM 4GB = 4 x 1024 = 4096 ขนาดเฉลี่ย Apache Process = 20 ดังนั้น MaxRequestWorkers = 4096/20 = 204 แต่จริงๆแล้ว ควรเผื่อ Memory ไว้ให้ OS และอื่นๆด้วย (อาจจะไม่เต็ม 4096) หากขยับค่า MaxRequestWorkers แล้วยังพบว่า จำนวน Process ยังขึ้นไปเต็มเพดานอยู่ ควรพิจารณาเพิ่ม Memory ด้วย ประมาณนี้ครับ UPDATE: ผลการปรับแก้ไข ทำให้ เวลาในการตอบสนอง จากที่หน่วง 10 วินาที เหลือ เพียง 50 มิลลิวินาที ดังภาพ  

Read More »

การเชื่อมต่อ Thunderbird กับ Google Mail (ทั้ง Gmail และ Google Apps)

ในอดีต Thunderbird และ Mail Client อื่นๆสามารถติดต่อกับ Google Mail ได้โดยตั้งค่า Mail Server ให้ถูกต้อง และ username/password ก็สามารถใช้งานได้ แต่ในปัจจุบัน Google หันไปใช้ระบบ OAuth 2.0 ซึ่งการ Authentication หรือการใส่ username/password ต้องทำที่ Google เท่านั้น รวมถึงการทำ 2-Step Verification ด้วย (การใส่ One-Time Password นอกเหนือจาก username/password เป็นต้น) ทำให้ Thunderbird และ Mail Client ที่ยังไม่รองรับ OAuth 2.0 ไม่สามารถใช้งานได้ แต่ทาง Google Mail ยังเปิดให้สามารถใช้งานได้ โดยแบ่งเป็น 2 กรณีคือ ใช้หรือไม่ใช้ 2-Step Verification โดยตรวจสอบได้จาก 0. วิธีตรวจสอบว่าใช้งาน 2-Step Verification หรือไม่ โดยการไปที่ https://myaccount.google.com/security หากไม่เปิดใช้ 2-Step Verification จะได้หน้าตาอย่างนี้ หากเปิดใช้ 2-Step Verification จะได้หน้าตาอย่างนี้ 1. ผู้ใช้ที่ไม่ได้เปิดใช้งาน 2-Step Verification ให้ไปที่ https://myaccount.google.com/security#connectedapps ภายใต้หัวข้อ Allow less secure apps ให้เปิดใช้งาน ดังภาพ 2. ผู้ใช้ที่เปิดใช้งาน 2-Step Verification ให้ไปที่ https://security.google.com/settings/security/apppasswords แล้วเลือก Mail และ Windows Computer แล้วคลิก Generate ดังภาพ จะได้ Password ที่ใช้ครั้งเดียวทิ้ง (ไม่ต้องไปจำ) ดังภาพ หากวันหลังต้องการเลิกใช้ ก็กดปุ่ม Revoke ภายหลังได้ จากนั้น เปิดให้ Google Account ใช้งาน IMAP ได้ โดยไปที่ https://mail.google.com/mail/u/0/#settings/fwdandpop แล้วคลิก Enable IMAP ดังภาพ แล้วคลิก Save Change ด้านล่าง สุดท้าย ที่ Thunderbird ให้ตั้งค่า Password: สำหรับคนที่ไม่ใช้ 2-Step Verification ให้ใส่ Password ของ Google Account เดิมลงไป ส่วนคนที่ใช้ 2-Step Verification ให้เอา Password ที่ได้มาใหม่ใส่ลงไปแทน Incoming IMAP เป็น imap.gmail.com และ SSL เป็น SSL/TLS Outgoing SMTP เป็น smtp.gmail.com และ SSL เป็น SSL/TLS อย่าลืม ใส่ username ให้มี @gmail.com หรือ @psu.ac.th ในกรณีใช้ PSU GAFE ด้วย แล้วคลิกปุ่ม Done ดังภาพ เท่านี้ก็สามารถใช้งาน Google Mail จาก Thunderbird ได้แล้ว

Read More »

เทคนิคการวัดความเร็วในการตอบอีเมลลูกค้า

ถ้ามี KPI ที่ต้องทำให้สำเร็จคือ “ร้อยละของปัญหาที่ตอบกลับลูกค้าภายใน 2 วันทำการ” แล้ว … ช่องทางที่รับปัญหาจากลูกค้าคือ ทางอีเมล (ในที่นี้เป็นบริการอีเมลบนระบบของ Google Mail หรือ Gmail) โดยการตอบกลับ คือ การ Reply กลับไปหาลูกค้า เวลาที่นับคือ นับตั้งแต่เวลาที่อีเมลเข้ามาถึง จนกระทั่งมีการตอบกลับไปหาลูกค้าทางอีเมลฉบับแรก สำหรับคนที่ใช้ Google Mail หรือ Gmail อยู่ สามารถใช้ Google Sheets ทำรายงานได้ ตามขั้นตอนต่อไปนี้ 1. ไปที่ drive.google.com (ให้ Login ด้วย Account ที่ต้องการด้วย) 2. สร้าง Google Sheets แล้วตั้งชื่อตามต้องการ เช่น Report 3. ไปที่เมนู Tools > Script Editor 4. ตั้งชื่อ Project ว่า report แล้ววางโค๊ดต่อไปนี้ลงไป   function reportResponseTime() { // ถ้าจะทำรายงานทั้ง Inbox ให้ uncomment บรรทัดต่อไปแทน //var threads = GmailApp.getInboxThreads(); // ถ้าจะทำรายงานเฉพาะ Lable ที่เตรียมไว้ ในที่นี้ใช้ Label “support-psuemail” var threads = GmailApp.search(‘label:support-psuemail ‘); for (var i = 0; i < threads.length; i++) { // วนลูปแต่ละ Thread if (threads[i].getMessageCount() > 1) { // สนใจเฉพาะ Thread ที่มีการตอบกลับเท่านั้น var messages = threads[i].getMessages(); // Subject ของอีเมล var d1= messages[0].getDate().getTime(); // เวลาที่อีเมลเข้ามา var d2= messages[1].getDate().getTime(); // เวลาที่ตอบกลับฉบับแรก var diff = (d2-d1)/(1000*60*60); // ระยะเวลาหน่วยเป็น ชั่วโมง // เขียนต่อท้าย Sheet ที่กำลังใช้งาน SpreadsheetApp.getActiveSheet().appendRow([messages[0].getSubject(), messages[0].getDate(), messages[1].getDate(), diff]) } } }     5. คลิก Run > reportResponseTime (หากมีหน้าจอ Consense ต่างๆขึ้นมาให้ Allow ไป) 6. ผลจะปรากฏใน Sheet ที่เปิดไว้ 7. จากนั้นสามารถเอาผลไปคำนวนต่อ เช่น ร้อยละของอีเมลที่ตอบสนองภายใน 48 ชั่วโมงหรือ 2 วัน เป็นต้น และสามารถตอบคำถามได้ว่า ทำไมบางฉบับใช้เวลาเกิน 48 ชั่วโมง (อาจจะเป็นเพราะติดเสาร์อาทิตย์เป็นต้น) *** กรุณาอ้างอิงด้วยนะครับ หากนำไปเผยแพร่ต่อ ***

Read More »