Month: October 2014

  • How to use Authentication Ldap in PSU แบบละเอียด

    วิธีใช้งาน Authentication – LDAP บน Joomla ใน มอ. บน Ubuntu Server 12.04.5 LTS แบบละเอียด (ผมคาดว่า version 14.04.1 LTS ก็น่าจะใช้ได้เหมือนกันนะ)

    สวัสดีครับไม่ได้เขียนนาน เพราะยังไม่ได้ศึกษาอะไรเพิ่มเติมมากนักเกี่ยวกับเซิร์ฟเวอร์ในช่วงที่ผ่านๆมาเนื่องจาก ทำงานทั่วไปซะเป็นส่วนใหญ่ พอดีเมื่อวันพุธที่ผ่านมาได้ติดตั้งและทดลองใช้ Ldap plugin บน joomla ให้มัน ยืนยันตัวตนผ่าน PSU Passport เพื่อให้เฉพาะบุคคลภายในมหาวิทยาลัยสามารถอ่านบทความหรือเนื้อหานั้นได้ เช่น พวกรายชื่อ อีเมล์ หรือ วาระการประชุมต่างๆ เริ่มเลยนะครับ

    0.กรอกแบบฟอร์มขอใช้บริการ ldap ให้เรียบร้อย และส่งไปยังศูนย์คอมเพื่อให้เจ้าหน้าที่ จัดทำ Policy ในการเข้าใช้งานให้กับเราก่อน โดยเราจะต้องลงชื่อเครื่องที่จะใช้บริการ ldap และหมายเลข IP Address และลงชื่อเป็นลายลักอักษร

    1. ติดตั้ง open-ssl ก่อนเพื่อที่จะใช้ Protocol https เพื่อเข้ารหัสข้อมูลผ่าน ssl ไม่งั้นเวลาเราใช้ ldap แบบเลือกเซิร์ฟเวอร์เป็น https จะไม่สามารถใช้งานได้ คำสั่งในการติดตั้งคือ apt-get install openssl
    2. ติดตั้ง php5-ldap ก่อน เพื่อจะใช้งาน ldap plugin บน joomla เพราะ joomla เป็น php คำสั่งในการติดตั้งคือ apt-get install php5-ldap ติดตั้งเสร็จแล้วให้ restart service apache ด้วยคำสั่ง service apache2 restart
    3. ติดตั้ง ldap-utils โดยคำสั่ง apt-get install ldap-utils
    4. แก้ไฟล์ /etc/ldap/ldap.conf โดยเพิ่มบรรทัดดังนี้

    TLS_REQCERT never

    1. ทดสอบด้วย ldapsearch ให้ติดตั้ง ldap-utils
    2. ทดสอบด้วยคำสั่ง

    ldapsearch -H “ldaps://xx.xx.xx.xx” -b “dc=psu,dc=ac,dc=th” -x

    (xxx นี่คือ server ldap ที่เราใช้ ถ้าใน มอ.จะเป็น ldaps://dc2.psu.ac.th)

    จะพบผลของการค้นหา

    # search result

    search: 2

    result: 4 Size limit exceeded

    # numResponses: 1004

    # numEntries: 1000

    # numReferences: 3

     

    ถ้าทำได้ครบดังนี้ถือว่าการเตรียมการใช้งาน ldap บนฝั่ง server เสร็จเรียบร้อย

    ————————————————————————————————————————————–

    จากนั้นเปิด joomla ของเรามาและเข้าไปที่ backend เพื่อทำการปรับแต่งค่า

    1. ไปที่ Extensions > Plugin Manager > Authentication – LDAP ของผมใช้ Joomla version 3.x.x จะได้หน้าตาแบบนี้

    Authentication-ldapให้ตั้งค่าให้ตรงตามรูปภาพ โดยสามารถเข้าไปดูรายละเอียดการตั้งค่าต่างๆใน plugin ตัวนี้ได้จาก บทความที่ คุณจัตตุพร ชูช่วย เขียนไว้ครับ http://sysadmin.psu.ac.th/2013/02/07/การเชื่อมต่อ-psu-passport-joomla-ldap/ ซึ่งมีหลากหลายเวอร์ชั่นมากตั้งแต่ Joomla 1.5.xx เป็นต้นมา จนถึง 3.x.x

    1. จากนั้นทดลองไปที่ Menus > และสร้าง Menu สำหรับยืนยันตัวตน และเลือก Menu Item type เป็นLogin Form และจัดปรับให้ Menu ที่เราจะยืนยันตัวตนแสดงในหน้าแรก

    loginmenu3.ทดลองเปิดเว็บและไปที่ Menu ยืนยันตัวตนดูครับจากนั้นลองยืนยันตัวตนดู ก็จะสามารถเข้าสู่ระบบได้เรียบร้อยแล้ว โดยหากเรามี Article ที่กำหนดให้เฉพาะสมาชิกอ่านมันก็จะปรากฏหลังจากที่เราทำการยืนยันตัวตนครับ

    login

    เมื่อใช้งานเสร็จแล้ว และต้องการยกเลิกการยืนยันตัวตน ให้กดที่ Menu เดิมอีกครั้งจะปรากฏปุ่ม ออกจากระบบให้เรากดครับ

    logoutpage

     

    เสร็จสิ้นภารกิจ แนะนำอีก 2 ข้อนะครับ

    1. การเปิดหน้า login เพื่อยืนยันตัวตนเข้าสู่ระบบ มันจะมี Menu ให้สมัครสมาชิกอยู่ด้วยให้เราปิดส่วนนี้ซะกันคนนอกมั่วเข้ามาสมัคร โดยไปที่ System > Global configuration > User Manager และให้เราปิดการรับสมัครสมาชิกดังรูป

    closeregist2.หากต้องการเขียน Article และเปิดให้เฉพาะผู้ใช้งานภาย มอ. เห็น แนะนำให้สร้าง Article หรือ Category และเลือก parent เป็น Menu ที่เราทำเป็น Menu ยืนยันตัวตน เวลาที่ User ใช้งานจะได้มองเห็นเนื้อหา ด้านล่าง Menu ที่เรายืนยันตัวตนเลยจะได้ไม่เสียเวลาไปมองหาไกล

    appear

     

    อ้างอิง

    http://share.psu.ac.th/blog/server-dev/21929

    http://sysadmin.psu.ac.th/2013/02/07/การเชื่อมต่อ-psu-passport-joomla-ldap/

  • ไปงานมหกรรมซอฟต์แวร์โอเพนซอร์สแห่งประเทศไทย ครั้งที่ 12

    งานมหกรรมซอฟต์แวร์โอเพนซอร์สแห่งประเทศไทย ครั้งที่ 12 จัดที่ สถาบันการจัดการปัญญาภิวัฒน์ จ.นนทบุรี เป็นงานสัมมนาที่ดี วิทยากรที่มาบรรยายก็มีความรู้และทำงานอยู่ในภาคธุรกิจจริง สามารถถ่ายทอดได้เห็นภาพการนำโอเพนซอร์สซอฟต์แวร์ไปใช้งาน

    ossfest2014-hall

    เนื้อหาสาระโดยสรุป กิจกรรมที่น่าสนใจได้แก่
    – โซนงาน
    1. โซนงานสัมมนา Conference/Seminar
    การสัมมนา/เสวนา ที่มีเรื่องราวโอเพนซอร์สซอฟต์แวร์ที่น่าสนใจ ตั้งแต่ระดับผู้ใช้งานตามบ้านทั่วไป ระดับองค์กรธุรกิจ ผู้ประกอบการ ระดับภาคการศึกษา รวมถึงบริการออนไลน์ที่น่าสนใจ
    2. โซนห้องอบรมย่อย Workshop
    3. โซนห้องจัดแสดงนิทรรศการ/บูธประชาสัมพันธ์ Exhibition

    – มอบรางวัล Open Source Award ประจำปี 2014
    ซึ่งในปีนี้ พระวิภัทร ปัาวุฑฺโฒ (วิภัทร ศรุติพรหม) ได้รับรางวัลซึ่งเป็น 1 ใน 3 รางวัลที่แจกในปีนี้ (ร่วมแสดงความยินดี)

    – keynote topic 2 เรื่องคือ
    1. Digital Economy based on Open Data and Open Access Approach โดย ดร.วิรัช ศรเลิศล้ำวาณิช เป็นเรื่องราวเกี่ยวกับการนำเสนอแนวทางในการสนองตอบนโยบายประเทศในเรื่อง Digital Economy โดยวิทยากรนำเสนอว่า ในโลกอินเทอร์เน็ตปัจจุบัน เต็มไปด้วยข้อมูลทั้งแบบมีโครงสร้างและไม่มีโครงสร้างเช่น facebook เป็นต้น และเป็นแหล่งข้อมูลที่เปิดให้ทุกคนนำสิ่งต่างๆที่โพสต์กันอยู่ใน social network นำไป process เพื่อให้ได้ข้อมูลเป็นสถิติเพื่อใช้ในการทำธุรกิจได้ หรือสามารถรับทราบความเป็นไปในสังคมแบบเรียลไทม์ได้
    2. Open in the cloud from Microsoft Openness (Microsoft) โดยตัวแทนจากไมโครซอฟต์
    เป็นเรื่องราวเกี่ยวกับการนำเสนอ Microsoft Azure ผลิตภัณฑ์ที่รองรับการทำงานแบบ cloud ทำให้ไม่ว่าผู้ใช้จะใช้ open source server หรือ software ก็สามารถรันบน cloud จากการใช้ผลิตภัณฑ์ตัวนี้ได้ แบบมีค่าใช้จ่ายที่คิดตามการเลือกใช้งานและเวลาที่ใช้งาน ซึ่งสามารถเลือกได้ว่าต้องการทรัพยากรเท่าไร ติดตั้ง server ใหม่ได้ในเวลาอันสั้นโดยการเลือก template ที่ต้องการ

    – หัวข้อสัมมนาอื่นๆอีกมากมาย เช่น
    1. OpenStack : คุณดำรงศักดิ์ รีตานนท์ แนะนำให้ความรู้เบื้องต้น
    2. Social Media เพื่อการประชาสัมพันธ์ : คุณชีพธรรม ไตรคำวิเศษ เล่าให้ฟังขายไอเดียเรื่องคนไทยอ่อนประชาสัมพันธ์ และนำเสนอ Tweet deck (https://tweetdeck.twitter.com/) การใช้แอพ Tweetdeck สำหรับการใช้ Twitter แบบเหนือเมฆ
    3. Open Source และเทคโนโลยีเบื้องหลังระบบขนาดใหญ่ : คุณกิตติรักษ์ ม่วงมิ่งสุข เล่าเรื่อง facebook และ google ใช้ open source software ในเบื้องหลังการให้บริการ
    4. Wireless & Web Application Security with KALI Linux : อ.ขจร สินอภิรมย์สราญ เล่าเรื่องเกี่ยวกับระบบปฏิบัติการ Linux ที่ปรับแต่งเพิ่มเติมซอฟต์แวร์ในการเจาะระบบเพื่อใช้ในการเรียนรู้การรักษาความปลอดภัย ด้วยเวลาที่จำกัดจึงเล่าให้ฟังในส่วน Wireless LAN ถึงวิธีการและซอฟต์แวร์ที่ใช้ในการเจาะ Symmetric and Asymmetric Encryption
    5. Open Source Experience in DTAC : คุณทวิร พาณิชย์สมบัติ เล่าถึงประสบการณ์ในการนำโปรแกรมที่พัฒนาด้วย tools ต่างๆที่เป็น open source เข้าไปใช้งานทดแทนโปรแกรมเดิมที่มีค่าใช้จ่ายของ tools ที่ใช้ในการพัฒนา และเล่าให้ฟังถึงการปรับตัวของโปรแกรมเมอร์ในองค์กรที่ได้นำโปรแกรมใหม่นี้เข้าไปให้ใช้ ซึ่งต้องปรับตัวเองในการค้นคว้าหาคำตอบจากอินเทอร์เน็ตแทนการรอคอย vender ให้ความช่วยเหลือ
    6. Open Source กับ Digital TV : คุณโดม เจริญยศ เล่าถึงประสบการณ์ในการทำงานให้กับบริษัท TV Pool ในการเข้าไปประมูลงาน Digital TV ในเมืองไทย เล่าถึงการที่ต้องทำความเข้าใจการสื่อสารคำศัพท์ของคนในวงการไอที กับ คนในวงการบรอดคาสติ้ง จะเข้าใจไม่เหมือนกัน เช่น ความละเอียดของภาพ ขนาดของภาพ จะใช้ชื่อที่อ้างถึงแล้วเข้าใจตรงกันในวงการ และเล่าถึงการจัดซื้ออุปกรณ์เพื่อนำมาใช้ทำบริการ Digital TV เป็นการลดต้นทุนได้อย่างมหาศาลจากที่สำรวจตลาดว่ามีอะไรให้ใช้งานได้บ้าง แล้วมีโอเพนซอร์สซอฟต์แวร์อะไรให้ใช้ได้บ้าง และเล่าถึงการให้บริการ 24X7 ของการออกอากาศว่าจำเป็นต้องมีการจัดทำระบบ backup ไว้ด้วยในลักษณะ active – active ส่งสัญญาณออกอากาศด้วยชุด 2 ชุด พร้อมกัน และยังมีอีก 1 ชุด stand by รอชุด active ชุดใดชุดหนึ่งเสีย ก็เปลี่ยนแทนได้เลย
    7. Open source tools for multimedia production : คุณพีรพัทธ์ นันนารารัตน์ เล่าให้ฟังถึงวงการทำสื่อสิ่งพิมพ์และภาพยนตร์ การเลือกใช้ซอฟต์แวร์โอเพนซอร์สที่เป็นที่นิยมหลายตัว เช่น Darktable, Lives, Tupi, Synfig Studio, Audacity, Flash Develop, Blender เป็นต้น โดยเฉพาะ Blender นั้นเป็น tool ในการทำ effect ภาพยนตร์ที่ใช้งานได้จริง ได้นำ demo ภาพยนตร์ที่ทำจาก Blender มาให้ชมด้วย
    8. Open Source Road Map 2015 : ตัวแทนจากชมรมผู้ประกอบการโอเพนซอร์ส ภายใต้สมาคมสมาพันธ์โอเพนซอร์สแห่งประเทศไทย เล่าให้ฟังถึงสิ่งที่จะทำในปีค.ศ.2015 คือ การพัฒนานักพัฒนาด้านโอเพนซอร์สเป็นสาระสำคัญ แต่ก็ไม่ละเลยส่วนอื่นๆไปซะทีเดียว

    – และยังมีหัวข้อสัมมนาอื่นๆที่ไม่ได้เข้าฟังอยู่ในอีกหลาย Track เช่น Bootstrap 3 มนต์มายาแห่ง Open Source เป็นต้น

    – เสวนา 2 เรื่อง
    1. เสวนาเรื่องเทคโนโลยีกับการศึกษาไทย (Google for Education, CAT, ABAC)
    ในการเสวนานี้ เน้นไปที่การให้บริการ cloud โดย CAT เล่าเกี่ยวกับการให้บริการ cloud ที่มีค่าใช้จ่ายสำหรับหน่วยงานที่ต้องการใช้ cloud หรือจะสนับสนุนผลิตภัณฑ์ของคนไทยด้วยกัน ส่วน Google for Education ก็แสดงให้เห็นจุดยืนเกี่ยวกับการให้บริการ cloud ผ่านระบบที่เรียกว่า Google App for Education โดยไม่มีค่าใช้จ่ายในการใช้งาน และเล่าเรื่องการใช้งานที่มหาวิทยาลัยอัสสัมชัญ
    2. เสวนาเกี่ยวกับโปรเจ็คโอเพนซอร์สในมหาวิทยาลัย (มหาวิทยาลัยบูรพา, มหาวิทยาลัยสงขลานครินทร์, มหาวิทยาลัยขอนแก่น, มหาวิทยาลัยเทคโนโลยีสุรนารี, สถาบันการจัดการปัญญาภิวัฒน์)
    ในการเสวนานี้พอจะจับจุดสำคัญของแต่ละมหาวิทยาลัยได้ดังนี้
    มหาวิทยาลัยบูรพา จะเน้นไปที่กิจกรรมการเข้าค่ายเพื่อสร้างความตระหนักให้นักศึกษาคณะทางด้านไอทีเข้ามาเป็นพลเมืองนักพัฒนาโอเพนซอร์ส นอกเหนือไปจากการใช้ซอฟต์แวร์โอเพนซอร์ส และเชิญชวนทุกมหาวิทยาลัยเข้าร่วมกิจกรรมค่ายด้วยกัน
    มหาวิทยาลัยสงขลานครินทร์ จะเน้นไปที่กิจกรรมการให้ความรู้การนำโอเพนซอร์สซอฟต์แวร์ทางด้านเดสก์ทอปเพื่อการเรียนการสอน ทั้งการอบรมภายในมหาวิทยาลัยและออกไปจัดตั้งห้องคอมพิวเตอร์ให้กับโรงเรียนในสามจังหวัดชายแดนภาคใต้
    มหาวิทยาลัยขอนแก่น จะเน้นไปที่การเลือกใช้ซอฟต์แวร์ที่เหมาะสมกับสิ่งที่จะทำในช่วงเวลานั้น และเป็นมหาวิทยาลัยที่ผู้ช่วยอธิการบดีเป็นผู้ทำงานอยู่กับไอที และใช้โอเพนซอร์สซอฟต์แวร์แทบทุกตัว รวมทั้งมีค่าใช้จ่ายกับซอฟต์แวร์ประเภทที่ต้องจัดซื้อด้วยเช่นกัน และเป็นมหาวิทยาลัยแรกๆที่ใช้ Google App for Education โดยทุกคนหันมาร่วมกันใช้โดยไม่ได้บังคับ
    มหาวิทยาลัยเทคโนโลยีสุรนารี จะเน้นไปที่การพัฒนาซอฟต์แวร์การจัดสอบออนไลน์ที่ทำด้วยโอเพนซอร์ส เนื่องจากว่าไม่ได้มีเวลามากพอจึงไม่ได้พูดถึงประเด็นอื่นๆ
    สถาบันการจัดการปัญญาภิวัฒน์ จะใช้ moodle เป็น e-learning ของสถาบันแบบเต็มรูปแบบ และ ยังมีซอฟต์แวร์โอเพนซอร์สสำหรับเตรียมสไลด์การสอนด้วย prezi (http://prezi.com/windows/) และใช้ server และ web server ต่างๆเป็นโอเพนซอร์สทั้งหมดสำหรับที่ต้องลงมือทำเอง

    สามารถดูหัวข้อการสัมมนาทั้งหมดได้ที่ http://www.ossfestival.in.th/

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

    ผมก็เล่าให้ฟังแบบที่พอจะจับประเด็นได้นะครับ หากผิดพลาดประการใดก็ขออภัยไว้ ณ ที่นี้ด้วย หากมีข้อมูลเพิ่มเติมก็บอกได้นะครับ

    วิบูลย์

  • วิธีการใช้ Google Sheets เป็นระบบเฝ้าระวังเว็บไซต์ (Website Monitoring) จากภายนอกองค์กร

    จาก “วิธีการใช้ Google Sheets เป็นฐานข้อมูล” ซึ่งได้กล่าวถึงพื้นฐานการพัฒนา Google Apps Script เพื่อใช้ต่อยอดความสามารถของ Google Sheets สามารถนำมาประยุกต์ใช้เพื่อเฝ้าระวังบริการเว็บไซต์จากภายนอกระบบเครือข่ายขององค์กรได้ (จาก Google Cloud Infrastructure เลยทีเดียว)

    ขั้นตอนในการทำ

    1. ในโปรเจค ProjectMyDB สร้างไฟล์ monitoring.gs ดังภาพ
    2. ประกอบด้วย 3 ฟังก์ชัน คือ
      function check_website(url) {  
        var response = UrlFetchApp.fetch(url, {muteHttpExceptions: true});
        return response.getResponseCode();
      }
      
      function doLog(timestamp, responseCode, timeDiff) {
        var ss = SpreadsheetApp.openByUrl('https://docs.google.com/a/psu.ac.th/spreadsheets/d/1HJmyqiBYC_AEATmdUWakLgHFyYGqSqeqSA8xEw-8o-c/edit');
        SpreadsheetApp.setActiveSpreadsheet(ss);
        SpreadsheetApp.setActiveSheet(ss.getSheetByName("Log"));
        var activeSheet=ss.getActiveSheet();
        activeSheet.appendRow([timestamp, responseCode, timeDiff]);
      }
      
      function getTime() {
        var startTime = new Date() ;
        var responseCode=check_website("http://www.psu.ac.th");
        var endTime = new Date() ;
        var timeDiff = endTime-startTime;  
        doLog(Utilities.formatDate(new Date(), "GMT+7", "yyyyMMdd-HHmmss") , responseCode , timeDiff);
      }
    • check_website ใช้ UrlFetchApp เพื่อ url ของเว็บไซต์ แล้วรีเทิร์นผล Response Code ของ HTTP Protocol กลับไป
    • doLog ใช้สำหรับเพิ่มค่า timestamp, responseCode และ timeDiff (เวลาในการตอบสนอง) ลงใน Sheet “Log” ใน Google Sheets ที่กำหนดไว้
    • getTime ใช้คำนวนเวลาตั้งแต่เริ่มต้น แล้วเรียกใช้ฟังก์ชั่น check_website และ จับเวลาที่สิ้นสุด จากนั้นคำนวนเป็นเวลาในการตอบสนอง (timeDiff) แล้ว เรียกฟังก์ขัน doLog เพื่อเขียนข้อมูลต่อไป
    1. สร้าง Trigger ด้วยเมนู Resources > Current project’s triggers
    2. เลือกฟังก์ชัน getTime กำหนดเป็น Time-driven ทำงานในหน่วยนาที (Minute timmer) และ ทำงานทุกๆ 5 นาที แล้วกดปุ่ม Save
    3. ผลการทำงาน และการสร้าง Chart ประกอบทำให้สามารถเห็นแนวโน้มได้

    จากตัวอย่างข้างต้น ทำให้เห็นว่า การใช้ Google Apps Script ร่วมกับ Google Sheet สามารถสร้างระบบเฝ้าระวังเว็บไซต์จากภายนอกองค์กรได้อย่างง่ายๆ และไม่มีค่าใช้จ่าย ทำให้เห็นภาพการใช้งานจากภายนอกได้เป็นอย่างดี

  • วิธีการใช้ Google Sheets เป็นฐานข้อมูล

    Google Sheets เป็นหนึ่งใน Google Apps ซึ่งเป็น Application Suite ของ Google ประกอบด้วย

    ในการใช้งานทั่วไป Google Apps สามารถตอบสนองการใช้งานได้เป็นอย่างดี แต่เมื่อต้องการทำกิจกรรมบางอย่างที่นอกเหนือไปจากการใช้งานพื้นฐาน ผู้ใช้สามารถพัฒนาเพิ่มเติมได้เอง ด้วย Google Apps Script

    Google Apps Script เป็น Scripting Language ที่อยู่บนพื้นฐานของภาษา JavaScript สามารถใช้งานได้และพัฒนาต่อยอดได้ทันทีโดยไม่ต้องติดตั้งอะไรเพิ่มเติมอีกแล้ว สามารถเรียกใช้ Google Service ต่างๆได้มากมาย รวมถึง Google Sheets เพื่อสร้าง เมนูพิเศษ หรือ Macro เพื่อให้การทำงานที่ทำหลายๆขั้นตอนลดลงเหลือเพียงแค่คลิกเดียว อีกทั้งยังสามารถตั้งเวลาให้ทำงานอัตโนมัติ หรือ ตั้ง Trigger เพื่อให้ทำงานเมื่อเกิด Action ต่างๆได้อีกด้วย

    Google Apps Script มี 3 ชนิด ได้แค่ Standalone, Bound to Google Apps และ Web App ซึ่งจะสามารถใช้งานร่วมกับ Google Sites ได้อีกด้วย (Sites Gadget) รายละเอียดสามารถอ่านเพิ่มเติมได้ที่ Google Apps Script

    ในที่นี้ จะแสดงตัวอย่างการประยุกต์ใช้ Google Apps Script แบบ Standalone เพื่อพัฒนาให้ Google Sheets ทำหน้าที่เป็นฐานข้อมูล และจะนำไปสู่การต่อยอดเป็น วิธีการใช้ Google Sheets เป็นระบบเฝ้าระวังเว็บไซต์ (Website Monitoring) จากภายนอกองค์กร เพื่อตรวจสอบระยะเวลาในการตอบสนอง ( Response Time) ของเว็บไซต์ ได้อีกด้วย

    วิธีการใช้งาน Google Apps Script แบบ Standalone

    1. ใน Google Drive คลิก New > More > Connect more apps
    1. ในชื่อ search ใส่คำว่า script แล้วกด Enter
      จะพบ Google Apps Script แล้วกดปุ่ม Connect
    2. จากนั้น ใน Google Drive ให้คลิกที่ New > More > Google Apps Script
    3. จากนั้นให้คลิก Close ได้เลย
    4. จะได้พื้นที่โปรเจค (Project) ในการพัฒนา Google Apps Script โดยในแต่ละโปรเจคจะประกอบไปด้วยหลายๆไฟล์ Google Apps Script ได้

    ในการพัฒนา Google Apps Script นั้น จะต้องเขียนในรูปแบบของฟังก์ชั่น (Function) เพื่อให้สะดวกในการใช้งานต่างๆ

    ตัวอย่างเช่น มี Google Sheets อยู่ใน Google Drive ดังภาพ

    มีรายละเอียดดังนี้

    1. ชื่อของ SpreadSheet คือ “ฐานข้อมูลของฉัน”
    2. ประกอบไปด้วย Sheet ชื่อ “Sheet1” และ “Log”
    3. มี URL คือ
      https://docs.google.com/a/psu.ac.th/spreadsheets/d/1HJmyqiBYC_AEATmdUWakLgHFyYGqSqeqSA8xEw-8o-c/edit

    ต่อไปเป็นขั้นตอนการเขียน Google Apps Script เพื่อติดต่อกับ Google Sheet ข้างต้น เพื่อเขียนข้อมูลลงไป โดยตั้งชื่อโปรเจคนี้ว่า ProjectMyDB ตั้งชื่อไฟล์ว่า SheetDB.gs และตั้งชื่อฟังก์ชั่น “editSheet” ดังภาพ

    ขั้นตอนการทำงานของฟังก์ชั่น editSheet

    1. สร้างตัวแปร ss รับค่าจากการเปิด SpreadSheet จาก URL ข้างต้นด้วยคำสั่ง
      var ss = SpreadsheetApp.openByUrl('https://docs.google.com/a/psu.ac.th/spreadsheets/d/1HJmyqiBYC_AEATmdUWakLgHFyYGqSqeqSA8xEw-8o-c/edit');
    1. สั่งให้ SpreadSheet ดังกล่าว Active ด้วยคำสั่ง
      SpreadsheetApp.setActiveSpreadsheet(ss);

    1. เนื่องจากในแต่ละ SpreadSheet ประกอบด้วยหลาย Sheet จึงต้องระบุว่า จะทำงานกับ Active Sheet ชื่อ “Sheet1” ด้วยคำสั่ง
      SpreadsheetApp.setActiveSheet(ss.getSheetByName("Sheet1"));

    1. สร้างตัวแปร activeSheet เพื่อกำหนดว่ากำลังทำงาน Active Sheet ด้วยคำสั่ง
      var activeSheet=ss.getActiveSheet();

    1. เมื่อต้องการเขียนค่า “Hello World” ลงใน Active Sheet ที่ Cell “C3” ใช้คำสั่ง
      activeSheet.getRange("C3").setValue("Hello World");

    1. หากต้องการเขียนค่าทีละหลายๆ Cell หรือเป็น Range ต้องสร้างข้อมูลชนิด Array 2 มิติขึ้นมา แล้วจึงเขียนค่าลงไป กรณีต้องการใส่ค่าในช่วง “A1:C1” ใช้คำสั่ง
      var values =[  ["คณกรณ์","หอศิริธรรม","'3720024"]  ];
      activeSheet.getRange("A1:C1").setValues(values);

    1. หากต้องการเขียนค่าในช่วง “A2:A4” ใช้คำสั่ง
      values = [ ["เกรียงไกร"],["หนูทองคำ"],["'4220020"] ];
      activeSheet.getRange("A2:A4").setValues(values);

    1. เมื่อจะเก็บข้อมูลจริงๆ วิธีการข้างต้นจะไม่สะดวก เพราะจะต้องทราบว่าแถวสุดท้ายแล้วเพิ่มค่าแถวไปทีละหนึ่ง ซึ่งสามารถใช้วิธีการ Append Row กล่าวคือเขียนค่าลงไปในแถวถัดจากแถวล่าสุดที่มีข้อมูลได้ ในตัวอย่างนี้ จะสลับไปใช้ Sheet ชื่อ “Log” แล้วใส่ค่าลงไปด้วยคำสั่ง
      SpreadsheetApp.setActiveSheet(ss.getSheetByName("Log"));
      activeSheet=ss.getActiveSheet();
      var timestamp = new Date();
      activeSheet.appendRow([timestamp, 200 , 300]);
      timestamp = new Date();
      activeSheet.appendRow([timestamp, 200 , 456]);

    จากนั้น Save ข้อมูล แล้วสั่ง Run โดยเลือกฟังก์ชั่นชื่อ editSheet ดังภาพ

    ในการใช้งานครั้งแรก จะปรากฏหน้าต่าง Consent ขึ้นมาเพื่อขอสิทธิ์ในการเข้าใช้ไฟล์

    ผลที่ได้จากการทำงานคือ

    และ

    จะเห็นได้ว่าสามารถใช้ Google Apps Script เพื่อเขียนค่าใน Google Sheets เพื่อเป็นฐานข้อมูลได้ และสามารถประยุกต์ใช้งานอื่นๆได้อีกมากมาย

  • สร้างแบบฟอร์มลงทะเบียนออนไลน์ด้วย Google Form ให้ปิดการลงทะเบียนแบบอัตโนมัติเมื่อครบตามจำนวนที่ต้องการ

    อีกหนึ่งปัญหาของการใช้งาน Google Form เพื่อสร้างแบบฟอร์มลงทะเบียนออนไลน์ ที่ผมได้เจอมากับตัวเองคือ ไม่สามารถจำกัดจำนวนผู้ที่มาลงทะเบียนแบบออนไลน์ได้ ทั้ง ๆ ที่การจัดอบรม/สัมมนาต่าง ๆ เราประกาศว่า “รับจำนวนจำกัด” จึงเป็นที่มาของการหาคำตอบในครั้งนี้ครับ ว่า…

    “ทำอย่างไร ให้แบบฟอร์มลงทะเบียนออนไลน์ (Google Form)
    สามารถปิดการลงทะเบียนได้
    เมื่อมีผู้สมัครครบตามจำนวนที่ต้องการ ?”


    ** หมายเหตุ **

    การใช้ Script : formLimiter v.1.0.2 นี้ จะสามารถใช้ได้กับ Google Spreadsheets “เวอร์ชั่นเก่า” เท่านั้นครับ เวอร์ชั่นปัจจุบัน ไม่สามารถใช้งานได้ เนื่องจาก Google ได้มีการเปลี่ยนแปลงการใช้งานของ Script ใหม่จาก Script Gallery ไปเป็น Add-ons ครับ

    Script Gallery ==> Add-ons

    ซึ่ง formLimitter นั้น ผู้พัฒนายังไม่ได้พัฒนาเข้าไปอยู่ใน Add-ons  จึงทำให้หลาย ๆ ท่าน ที่สร้าง Google Spreadsheets ด้วยเวอร์ชั่นปัจจุบัน ไม่สามารถใช้งาน Script อันนี้ได้ครับ

    ดังนั้น หากผู้ใช้งาน ต้องการใช้ Script ดังกล่าว แนะนำว่าให้สร้าง Google Spreadsheets ด้วยเวอร์ชั่นเก่า นะครับ สามารถเข้าไปสร้างผ่านลิงค์ด้านล่างนี้ได้เลยครับผม

    goo.gl/pprjA5

    1. ไปที่มุมมองของ View responses
    googleform_004googleform_005

    จากนั้น คลิกเมนู Tools > เลือก Script gallery…
    googleform_023
    แล้วค้นหา Script ที่ชื่อว่า “formLimiter” ในช่อง Search แล้วคลิกปุ่ม Search
    เมื่อปรากฎ  “formLimiter v.1.0.2” ให้ดำเนินการติดตั้ง โดยคลิกปุ่ม Installgoogleform_024

    คลิกปุ่ม Continue > ปุ่ม Accept > และปุ่ม Close เป็นอันเสร็จเรียบร้อย
    googleform_025
    googleform_026
    googleform_027

    2. จะเห็นว่ามีเมนูที่ชื่อว่า formLimiter ปรากฎเพิ่มขึ้นมาใหม่
    จากนั้นให้ คลิกเมนู formLimiter > เลือก Run initial configuration เพื่อเปิดการใช้งาน Script
    googleform_028

    เมื่อเปิดการใช้งานเรียบร้อย เมนูย่อยจะเปลี่ยนไปดังภาพด้านล่าง ให้ คลิกเลือก Settings
    googleform_029

    3. ในส่วนนี้จะเป็นการกำหนดเงื่อนไขของการ “ปิดแบบฟอร์มการลงทะเบียนออนไลน์”
    ซึ่งจะมีด้วยกัน 3 เงื่อนไขให้เลือกใช้ ดังนี้
    googleform_033

     3.1  date and time – ใช้ในกรณีที่กำหนดให้ปิดการลงทะเบียนเป็นช่วงของเวลา โดยไม่จำกัดจำนวนผู้สมัคร
    googleform_030

    3.2  max number of form response – ใช้ในกรณีที่ต้องการรับผู้สมัครแบบจำกัดจำนวน
    googleform_031

    3.3  spreadsheet cell value – ใช้ตรวจสอบเงื่อนไขตามค่าของข้อมูลใน cell
    จะปิดการลงทะเบียนเมื่อข้อมูลใน cell ตรงกับค่าที่ได้กำหนดไว้
    googleform_032

    ในส่วนนี้ผมขอให้เลือกเป็น spreadsheet cell value นะครับ
    โดยให้กำหนดเงื่อนไขในลักษณะดังนี้

    ช่องแรก ให้ระบุ Cell ที่ใช้เป็น “Sheet2!A1” และ
    ช่องสอง ให้ระบุจำนวนที่ต้องการรับลงทะเบียน (ในที่นี้ผมกำหนดรับที่ 50 คน)
    googleform_043

    แนะนำว่า ให้นำเครื่องหมายถูกออก เนื่องจากระบบจะทำการส่งเมลทุกครั้งที่มีการลงทะเบียน
    อาจทำให้เกิดอีเมลขยะจากการแจ้งเตือนเป็นจำนวนมากได้ (กรณีที่รับผู้สมัครจำนวนมาก)

    จากนั้น คลิกปุ่ม Save settings เป็นอันเสร็จสิ้น
    googleform_044

    4. ขณะนี้เรายังอยู่ในหน้าของ View response
    ให้ทำการสร้าง “Sheet2” เพิ่มขึ้นอีกหนึ่ง เพื่อใช้ในการนับจำนวนผู้สมัคร (ดังภาพ)
    โดยให้กำหนดเงื่อนไขใน Cell A1 ดังนี้  =COUNTUNIQUE('Form Responses'!B2:B1000)

    ในส่วนนี้จะเป็นการแก้ปัญหา กรณีที่ผู้สมัครลงทะเบียนซ้ำหลาย ๆ ครั้ง (ซึ่งมีอยู่บ่อยครั้ง)
    เงื่อนไขนี้จะทำการนับจำนวนจากชื่อ-นามสกุลของผู้สมัคร หากซ้ำกันจะนับเป็น 1 คน
    (*ยกเว้นในกรณีที่ผู้ลงทะเบียน พิมพ์ชื่อ-นามสกุลในแต่ละครั้ง ไม่เหมือนกัน)
    เมื่อครบตามจำนวนที่กำหนดไว้ ระบบจะทำการปิดแบบฟอร์มลงทะเบียนโดยอัตโนมัติ

    googleform_045

    5. จากนั้นให้กลับมาที่มุมมองของ Edit questions ซึ่งเป็นหน้าเริ่มต้นของการสร้างแบบฟอร์ม
    googleform_016

    คลิกที่เมนู Response > เลือก Accepting responses
    googleform_021

    จากนั้นจะปรากฎ กล่อง This form has been turned off. ขึ้นมาให้
    ซึ่งกล่องนี้จะปรากฎขึ้น เมื่อมีผู้สมัครลงทะเบียนครบตามจำนวนที่ได้กำหนดไว้
    ดังนั้น ให้กำหนดข้อความแสดงการ “ปิดรับการลงทะเบียน” เพื่อแจ้งให้ผู้สนใจได้รับทราบ
    ดังตัวอย่างข้อความในภาพ
    googleform_039

    เมื่อกำหนดข้อความดังกล่าวเสร็จเรียบร้อยแล้ว
    ให้กลับไปคลิกที่เมนู Response > เลือก Accepting responses อีกครั้ง
    เพื่อปิดกล่องดังกล่าว (หากไม่ปิด หน้าแบบฟอร์มลงทะเบียนจะมีลักษณะดังภาพด้านล่าง)
    และทำให้ผู้สมัคร ไม่สามารถลงทะเบียนออนไลน์ได้

    ลักษณะของหน้าแบบฟอร์มลงทะเบียน เมื่อมีผู้สมัครลงทะเบียนครบตามจำนวนที่กำหนดไว้
    googleform_038

  • สร้างแบบฟอร์มลงทะเบียนออนไลน์ด้วย Google Form ให้ตอบรับผ่านทางอีเมลโดยอัตโนมัติ

    เนื่องจากว่ามีผู้สอบถามถึงการใช้งานแบบฟอร์มลงทะเบียนออนไลน์ แบบให้สามารถตอบรับผ่านทางอีเมลโดยอัตโนมัติไปยังผู้สมัครเมื่อเข้ามาลงทะเบียน ผมเห็นว่าน่าจะมีประโยชน์สำหรับ Admin หรือผู้ใช้งาน Google Form หลาย ๆ ท่าน จึงได้สรุปเป็นขั้นตอน ตามที่ผมได้ทำมา หวังว่าจะเป็นประโยชน์ให้กับทุก ๆ ท่านนะครับ


    ** หมายเหตุ **

    เนื่องจาก Google ได้มีการเปลี่ยนแปลงการใช้งานของ Script ใหม่
    จาก Script Gallery ไปเป็น Add-ons ครับ

    Script Gallery ==> Add-ons

    ซึ่งบทความที่ผมเขียนขึ้นนี้ ขออ้างอิงเมนูและการใช้งาน Google Spreadsheets เวอร์ชั่นเก่านะครับ
    ดังนั้น หากผู้ใช้งาน ต้องการใช้งาน Google Spreadsheets เวอร์ชั่นเก่า สามารถเข้าไปสร้างผ่านลิงค์ด้านล่างนี้ได้เลยครับผม

    goo.gl/pprjA5

    1. คลิก Form  เพื่อสร้างแบบฟอร์มลงทะเบียนออนไลน์

    googleform_001googleform_002

    2. กำหนดรายละเอียดข้อมูลของแบบลงทะเบียนตามที่ต้องการ
    (ในส่วนนี้จะไม่ขออธิบายรายละเอียดในการสร้างแบบฟอร์ม นะครับ)
    googleform_016

    3. คลิก View response เข้าสู่มุมมองของ View responses เพื่อกำหนดต่าง ๆ

    4. คลิกเมนู Tools > เลือก Script manager… (เป็นส่วนจัดการ Script ต่าง ๆ)
    จากนั้น คลิกปุ่ม New เพื่อสร้าง Script สำหรับการส่งอีเมลแบบอัตโนมัติ
    googleform_006googleform_007

    ตั้งชื่อไฟล์ Script ใหม่ โดยใช้ชื่อว่า “sendEmail”
    googleform_009-2

    จากนั้น Copy Script ด้านล่างนี้ วางไว้ดังภาพข้างต้น
    ** ข้อมูลนี้เป็นข้อมูลจำลอง เพื่อให้สามารถเข้าใจในรายละเอียดของ Script ได้
    เมื่อผู้ใช้งานนำไปใช้จริง สามารถแก้ไขรายละเอียดได้ตามความเหมาะสม **

    function sendEmail(e) {
     var userEmail = e.values[4];
     var firstName = e.values[1];
     var trainingTitle = "อบรมการใช้โปรแกรม Smart Notebook sympodium & Smart board สำหรับการจัดการเรียนการสอนทางไกล";
     var infoLink = "http://clpd.psu.ac.th/clpd_2012";
     var emailAdd = "clpdpsu@psu.ac.th";
     var subject = "ศูนย์ส่งเสริมและพัฒนาการเรียนรู้ ม.อ. : ตอบรับเข้าร่วมอบรมโครงการเชิงปฏิบัติการ"
     var emailBody = "เรียนคุณ: "+firstName+"\n\n ท่านได้ทำการลงทะเบียนเข้าร่วมโครงการ"+
     "หัวข้อ \"" + trainingTitle + "\""+
     " ในวันพุธที่ 16 กรกฎาคม 2557 เวลา 09.00-16.00 น."+
     " ณ ห้องอบรม ชั้น 8 อาคารศูนย์ทรัพยากรการเรียนรู้ อาคาร 1 มหาวิทยาลัยสงขลานครินทร์ วิทยาเขตหาดใหญ่"+
     "\n ทางศูนย์ส่งเสริมและพัฒนาการเรียนรู้ มหาวิทยาลัยสงขลานครินทร์ ตอบรับการเข้าร่วมโครงการดังกล่าวแล้วค่ะ"+
     "\n"+
     "\n ติดตามการประกาศรายชื่อผู้มีสิทธิ์เข้าร่วมอบรมโครงการอีกครั้งได้ที่: " + infoLink + 
     "\n"+
     "\n"+
     "\nขอบคุณสำหรับการลงทะเบียนเข้าร่วมโครงการค่ะ"+
     "\n"+
     "\nศูนย์ส่งเสริมและพัฒนาการเรียนรู้ มหาวิทยาลัยสงขลานครินทร์"+
     "\nโทรศัพท์ : 074-289203-4"+
     "\nE-mail : " + emailAdd;
     MailApp.sendEmail(userEmail , subject, emailBody); 
    }

    หมายเหตุ
    อักษรสีแดง คือ ข้อความที่สามารถแก้ไขได้
    อักษรสีฟ้า คือ ชื่อตัวแปร ที่ใช้สำหรับเก็บค่าต่าง ๆ ที่กำหนดไว้
    * สามารถปรับแก้ไข Script ได้ตามข้อมูลของแบบฟอร์มที่ได้สร้างขึ้น
    ซึ่ง Script นี้ อ้างอิงตามแบบฟอร์มลงทะเบียนในข้อที่ 2

    5. เมื่อกำหนดรายละเอียดข้อมูลการตอบรับ (Script) เสร็จเรียบร้อยแล้ว
    จากนั้น คลิกเมนู Resources > เลือก Current Project’s triggers
    googleform_010

    และคลิก No triggers setup. Click here to add one now.
    googleform_011

    เลือก On form submit แล้วคลิกปุ่ม Save / ปุ่ม Continue และ ปุ่ม Accept
    เป็นอันเสร็จสิ้นการสร้าง Script สำหรับการตอบรับอีเมลแบบอัตโนมัติ
    googleform_012
    googleform_013
    googleform_014

    คลิกปุ่ม Close (หากต้องการแก้ไข Script ให้คลิกปุ่ม Edit… ด้านบน)
    googleform_015

    6. ทดสอบการตอบรับการลงทะเบียน
    ว่า Script ที่สร้างไว้ มีข้อมูลที่ถูกต้องและสามารถตอบรับทางอีเมลแบบอัตโนมัติได้

    ไปที่มุมมอง View live form เพื่อทดสอบการลงทะเบียนจริง
    googleform_040
    googleform_017

    จากนั้นให้ตรวจสอบดูในมุมมอง View responses ว่ามีข้อมูลปรากฎให้เห็นหรือไม่
    และตรวจสอบอีเมลที่ได้ระบุไว้ ว่ามีการตอบรับจากระบบหรือไม่
    googleform_019
    googleform_020

    หมายเหตุ  หากพบว่าไม่มีการส่งอีเมลโดยอัตโนมัติจากระบบ อาจต้องทำการตรวจสอบ Script ใหม่อีกครั้ง เพื่อตรวจหาข้อผิดพลาด