Author: kanakorn.h

  • bit.ly สั้น ๆ สวย ๆ ง่ายนิดเดียว

    ต่อจาก bitly สายย่อ ซึ่งสะดวกมากแล้ว มีอีกขั้นตอนนึง ที่หลายคนอาจจะไม่ทราบมาก่อน

    ถ้าใช้ bitly สร้าง Short URL นั้นเราจะได้ URL แบบสุ่ม อย่างนี้

    http://bit.ly/2N3Tut7

    ซึ่ง จะเป็น Case Sensitive ซึ่งต้องพิมพ์ตัวพิมพ์ใหญ่/เล็ก ให้ถูกต้อง และบางทีอาจจะสับสนระหว่าง l (L – lower case) กับ เลข 1 หรือ I (I capital letter) ได้

    ถ้าอยากกำหนด สิ่งที่ตามมาข้างหลัง bit.ly/ ได้ เช่น

    http://bit.ly/psu-gafe

    สามารถทำต่อจากขั้นตอน bitly สายย่อ ใน Step 7 อีกนิดเดียวคือ

    ตรง Customize ด้านล่าง

    ใส่คำได้ตามใจชอบ แต่ต้องประกอบด้วย

    • ตัวอักษรภาษาอังกฤษ
    • ตัวเลขอาราบิก
    • เครื่องหมาย – และ _

    เท่านั้น

    จากนั้น คลิก Save ด้านล่าง ถ้าไม่ซ้ำกับใครที่เคยสร้างไว้ ก็สามารถใช้งานได้ครับ

    หวังว่าจะเป็นประโยชน์ครับ

  • ELK #09 Anomaly Detection (Case Study)

    ระบบ PSU Email ให้บริการผู้ใช้ของมหาวิทยาลัยสงขลานครินทร์ ซึ่งมีการใช้งานจากทั่วโลก ทั้งระบบประกอบขึ้นจากคอมพิวเตอร์หลายเครื่อง การจะตรวจสอบ Log เมื่อเกิด Incident ขึ้น อาจจะต้องใช้ระยะเวลานาน และเป็นการยากพอสมควรที่จะเชื่อมโยงความสัมพันธ์ของเหตุการณ์ และสรุปออกมาเป็นรายงานได้ จึงเริ่มใช้ ELK สำหรับรวบรวม Log ของทั้งระบบไว้ที่ส่วนกลาง และพัฒนาต่อยอดเพื่อการตรวจจับความผิดปรกติต่าง ๆ ได้

    ในบทความนี้ จะนำเสนอวิธีการใช้ ELK เพื่อตรวจจับ การ Login ที่ผิดปรกติบน PSU Email โดยจะสนใจ ผู้ใช้ที่มีการ Login จากนอกประเทศเป็นหลัก

    การส่ง Log จาก Server เข้า ELK

    ที่เครื่อง Server แต่ละเครื่อง กำหนดให้ส่ง Log จาก /etc/rsyslog.d/50-default.conf เข้าไปที่ your.logstash.server:port ตามที่กำหนดไว้

    การสร้าง Logstash Filter

    ที่ Logstash Server

    • Input เพื่อรับข้อมูลจาก syslog ที่ port ที่ต้องการ เช่นในที่นี้เป็น 5516 เป็นต้น
    • Filter ใช้ Grok Plugin เพื่อจับข้อมูล จาก message แบ่งเป็นส่วน ๆ ตามลักษณะ แล้วตั้งชื่อตาม Field ตามต้องการ ในที่นี้คือ description, username, domainname, clientip, actiondate, actiontime เป็นต้น (ตัวที่สำคัญในตอนนี้คือ username และ clientip)
    • Output ตั้งว่าให้ส่งผลไปยัง Elasticsearch ที่ “your.elasticsearch.server” ที่ port 9200

    [ตรงนี้มีกระบวนการบางอย่าง ซึ่งค่อยมาลงรายละเอียด]

    เมื่อมี Log ไหลเข้าสู่ Logstash และ ถูกประมวลผลแล้ว ก็จะเข้าสู่ Elasticsearch แล้ว ก็นำไปใช้งานบน Kibana

    หลังจากนั้น สามารถ Search ข้อมูล และใส่ Fields ที่สนใจ เช่น Time, Username, geoip.country_name และ description ได้ แล้ว Save เอาไว้ใช้งานต่อ ในที่นี้ ตั้งชื่อว่า squirrelmail-geoip

    จากนั้น สามารถเอาไปสร้างเป็น Visualization แบบ Coordinate Map ได้ เช่น ดูว่า มีการ Login Success / Failed Login / Sent จากที่ไหนบ้างในโลก

    จะเห็นได้ว่า ส่วนใหญ่ ใช้งานจากในประเทศไทย (วงกลมสีแดงเข้ม ๆ) ส่วนนอกประเทศ จะเป็นวงสีเหลืองเล็ก ๆ

    การตรวจหาการใช้งานที่ผิดปรกติ

    สร้าง Search ใหม่ กรองเฉพาะ ที่มี (exist) Username และ ไม่เป็น N/A และ มี (exist) geoip.country_code และ ไม่ใช่ Thailand แล้ว Save ไว้ใช้งานต่อไป ในที่ตั้งชื่อว่า squirrelmail-geoip-outside-th

    จากนั้น เอาไปสร้าง Visualization แบบ Vertical Bar
    กำหนดให้
    Y Axis เป็นจำนวน
    X Axis เป็น Username
    โดยที่ Group by geoip.country_name และ description
    ก็จะทำให้รู้ว่า ใครบ้างที่ มีการใช้งานนอกประเทศ และ เป็นการใช้งานแบบไหน

    จะเห็นได้ว่า จะมีบางคนที่ แสดงสีแค่สีเดียว กับบางคนมีหลายสี เนื่องจาก มีหลายประเทศ และ หลายประเภทการใช้งาน เราสามารถ กรองเอาเฉพาะ ข้อมูลที่สนใจได้ โดยคลิกที่ Inspect แล้วกดเครื่องหมาย + กับข้อมูลที่ต้องการ เช่น description ที่เป็น “Failed webmail login” ก็ได้

    ก็จะกรองเฉพาะ Username ที่มีการ Login จากต่างประเทศ แต่ไม่สำเร็จ จากภาพด้านล่าง แสดงว่า 3 คนนี้ น่าจะโดนอะไรเข้าแล้ว

    หรือ ถ้าจะกรองข้อมูล เฉพาะคนที่ “Failed webmail login” และ “Message sent via webmail” ก็ได้ แต่ต้องเปลี่ยน ชนิดการ Filter เป็น “is one of”

    ผลที่ได้ดังภาพ แต่เนื่องจาก ก็ยังเป็น 3 คนนี้อยู่ จะเห็นได้ว่า คน ๆ เดียว (ซ้ายสุด) มีการ Login จากหลายประเทศ ภายใน 24 ชั่วโมง

    ต่อไป ถ้าเราสนใจเฉพาะ คนที่ “ส่งอีเมล” จากนอกประเทศ ในเวลาที่กำหนด จะได้ผลประมาณนี้

    พบว่า คนซ้ายสุด คนเดิมนั่นแหล่ะ แต่เราจะมาดูรายละเอียด ก็คลิกที่ปุ่ม Inspect แล้ว เลือก Include เฉพาะ Username นั้น

    ก็พบว่า คนนี้มีการส่ง email ออกจากประเทศ USA, Canada, Panama, Argentina, Mexico แล้วบินมา UK ภายในวันเดียว –> ทำได้ไง !!! (ดังภาพด้านล่าง)

    เมื่อลองตรวจสอบ ก็จะพบว่า Username นี้ มีพฤติกรรม ส่ง Spam จริง ๆ ก็จะจัดการ “จำกัดความเสียหาย” ต่อไป

    วิธีการที่กล่าวมาข้างต้น สามารถสร้างเป็น Process อัตโนมัติ (เว้นแต่ขั้นตอนการ จำกัดความเสียหาย จะ Automatic ก็ได้ แต่ตอนนี้ขอ Manual ก่อน) เอาไว้สำหรับ Monitoring ได้ โดยอาจจะสั่งให้ เฝ้าดู 1 ชั่วโมงล่าสุด และ Refresh ทุก 1 นาที ดังภาพ

    หวังว่าจะเป็นประโยชน์

    ส่วนรายละเอียด คอยติดตามตอนต่อไปครับ

  • อ่านข้อความจากภาพ ด้วย Tesseract-OCR

    OCR หรือ Optical Character Recognition จริง ๆ ก็มีใช้กันมานานมากแล้ว แต่การใช้งานก็จะผูกติดกับ Hardware พอสมควร แต่ในปัจจุบัน เราสามารถใช้ความรู้ด้าน Machine Learning / Deep Learning เพื่อให้คอมพิวเตอร์เข้าใจภาพได้ และสามารถนำมาประกอบกับเป็น Software สำหรับใช้งานของตนเองได้

    ในบทความนี้ ทดลองใช้ Tesseract-OCR พี่พัฒนาโดย Google อ่านภาพ เอกสารที่ Print จาก Computer เป็นกระดาษ -> มีการเซ็นต์ชื่อ -> นำกลับมา Scan อีกครั้ง

    *** มันเป็น Paperless ตรงไหน ? กฏหมาย Digital Signature ก็มีแล้วนะ ***

    เอาเป็นว่า ดูผลงาน

    ด้านซ้าย เป็นเอกสารที่ Scan จากกระดาษ ด้านขวาเป็นผลการอ่านด้วย Tesseract-OCR

    อ๊ะ บางคนบอกว่า เคยใช้แล้ว แต่ทำไมไม่ได้ผลอย่างนี้หล่ะ (โดยเฉพาะ ภาษาไทย) อิอิ มันมีรายละเอียดพอสมควร ไว้มีเวลาจะมาเล่าให้ฟัง

    แต่แบบนี้ ต้องทำอะไรเพิ่มก่อน จึงจะอ่านได้

    ต้นฉบับ มีตราประทับงี้ ตัวอักษรเล็ก เลขไทย ปน เลขอังกฤษ ปน ภาษาอังกฤษ อันนี้ ยากหน่อย

    ผลก็พอจะอ่านได้ แต่ต้องทำอะไรเพิ่มก่อนจะให้ OCR อ่าน –> อันนี้คือยังไม่ทำอะไรเพิ่ม

    ผล แบบยังไม่ได้ Preprocessing ใด ๆ สังเกตว่า ตัว ตราประทับ ทำให้เกิดปัญหา และ ตัวอักษรที่เล็กมาก ๆ ทำให้ OCR อ่านผิดได้ แต่มีทางแก้ไข

    มันไม่มีคำว่า “ก็ง่าย ๆ” หรอก หึ หึ หึ

  • วิธีใช้ Google Calendar เพื่อบันทึกปฏิบัติงาน และใช้ Google Sheets เพื่อรายงานผลการปฏิบัติงาน

    บทความนี้ นำเสนอแนวทางที่ผมใช้ในการ “บันทึกการปฏิบัติงาน” และ “รายงานผลการปฏิบัติงาน” เพื่อนำไปกรอกในระบบ TOR ของมหาวิทยาลัยสงขลานครินทร์

    เครื่องมือที่ใช้

    1. Google Calendar
    2. Google Sheets
    3. Google Sheets Add-ons ชื่อ “Timesheet”
    4. Google Keep

    เป้าหมาย

    การบันทึกผลปฏิบัติงาน เพื่อ รายงานผลการปฏิบัติงานในระบบ TOR

    ระบบ TOR ของมหาวิทยาลัยสงขลานครินทร์

    TOR Online – ระบบประเมินผลการปฏิบัติงาน มหาวิทยาลัยสงขลานครินทร์

    ผู้ปฏิบัติงาน จะต้องตกลงกับหัวหน้าฝ่าย ว่า รอบ TOR นี้ เราจะทำอะไร และมีเป้าหมายอย่างไรบ้าง เอาเป็นว่า … จะกำหนดเป็น “ภาระงาน” แบ่งเป็น 3 ด้าน ได้แก่
    1. งานประจำ
    2. งานเชิงพัฒนา/งานพิเศษ
    3. ผลงานอื่นๆ(ตามที่คณะกำหนด)

    ในแต่ละ หัวข้อใหญ่ ก็จะแจกแจงว่า ทำอะไร เป็นสัดส่วนเท่าไหร่ เช่น

    1.1 5ส
    1.2 ประชุมติดตามงานของทีมงาน

    อะไรทำนองนั้น

    หัวข้อย่อย ของ ผลงานประจำ — มันสำคัญตรงการกรอก ผลการปฏิบัติงาน และ เอกสาร/ข้อมูลอ้างอิงนี่แหล่ะ

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

    ขอยกตัวอย่าง หัวข้อ “ภาระงาน” ของผมใน TOR ปี 2562
    ( TwT )

    
    1.1 5 ส
    1.2 ประชุมติดตามงานของทีมงาน
    1.3 ติดตั้ง Server/Software บริการ PSU Email
    1.4 เฝ้าระวังบริการ PSU Email
    1.5 ตอบคำถาม/ให้คำแนะนำบริการ PSU Email
    1.6 ประยุกต์ใช้ DialogFlow พัฒนา Chatbot กับ Facebook Page ของศูนย์คอมพิวเตอร์
    1.7 ประยุกต์ใช้ Deep Learning ในการคัดกรองอีเมลขยะ
    1.8 พัฒนาระบบหน่วยตรวจสอบภายใน
    1.9 โครงการปรับปรุงความปลอดภัย PSU Email
    1.10 โครงการพัฒนาอะไรสักอย่าง
    
    2.1 งานปรับปรุงและพัฒนา
    2.2 Helpdesk
    2.3 Internal Auditor
    
    3.1.1 อบรมประชุมที่ศูนย์จัด
    3.1.2 กิจกรรมมหาวิทยาลัย
    3.1.3 กิจกรรมศูนย์คอมพิวเตอร์
    3.1.4 กรรมการ/คณะทำงาน
    3.2   กิจกรรมกลุ่มงาน
    3.2.1 ประชุมติดตามโครงการ

    แล้วเราจะบันทึกผลการปฏิบัติงานอย่างไร ให้ ง่าย และสามารถ นำมากรอกใน TOR ได้ด้วย

    เริ่มจาก Google Keep

    เอาข้อหัวย่อย ของภาระงานข้างต้น มาสร้างเป็น Note ใหม่ใน Google Keep ตั้งหัวข้อว่า TOR 2562 (หรือใครอยากจะทำไว้ใช้ของ TOR 2563 ก็ค่อยลองทำดู)

    ต่อไป เราจะสร้าง Label ของแต่ละหัวข้อย่อย โดยการใส่ # ไว้ด้านหน้า หัวข้อย่อย เช่น
    1.10 โครงการพัฒนาอะไรสักอย่าง
    เป็น
    [Update – สำหรับให้รายงานสวยงามยิ่งขึ้น แนะนำให้ Replace ” ” ด้วย “_”]
    #1.10_โครงการพัฒนาอะไรสักอย่าง

    พอใส่ # หน้า 1.10 แล้ว Google Keep จะขึ้น Popup ให้สร้าง Label “1.10” เราก็สร้างไว้ (มันมีเหตุผล ทำตามไปก่อน เดี๋ยวเล่าให้ฟัง)

    Popup ให้สร้าง Label “1.10”

    ทำจนครบทุกข้อ เราจะได้ Note ใน Google Keep อย่างนี้
    จากนั้น ให้คลิก รูป Pin เพื่อปักหมุดเอาไว้
    แล้วกดปุ่ม Close ด้านล่างได้เลย

    [Update: ใน Google Keep สามารถเอาภาพ เช่น เกณฑ์การประเมิน การพิจารณาว่าเรื่องนี้ เข้าในส่วน งานประจำ หรือ งานเชิงพัฒนา เพื่อประกอบการตัดสินใจได้ จะได้ไม่ต้องไปค้นหาหลาย ๆ ที่]

    บันทึกการปฏิบัติงานใน Google Calendar

    ใน Google Calendar จะมี Panel ด้านขวามือ จะเห็น Icon ของ Google Keep สีเหลือง ๆ คลิกสิครับ รออะไร

    Icon ของ Google Keep ใน Google Calendar

    เราก็จะเห็น Note ของ Google Keep ที่เรา Pin ไว้ตะกี้ อยู่บนสุด

    Note ที่ Pin ไว้ จะอยู่บนสุด

    ใน Google Calendar นั้น ปรกติเราจะลงนัดหมายต่าง ๆ ลงไปใน Default Calendar ของเรา แต่ในที่นี้ แนะนำให้สร้างอีก Calendar นึงขึ้นมา ตั้งชื่อว่า worklog

    แนะนำให้สร้าง Calendar ใหม่ ชื่อ worklog เพื่อแยกบันทึกปฏิบัติงาน กับ การนัดหมายทั่วไป

    วิธีลงบันทึก

    เช่น วันนี้ เวลา 10:00-13:30 ทำงานของหน่วยตรวจสอบภายใน เป็นการ “ปรับปรุงโปรแกรมหน่วยตรวจสอบ” และบันทึกสิ่งที่จะต้องทำ กับ สิ่งที่ทำเสร็จไปแล้ว

    วิธีการบันทึก

    1. [Update] Copy ข้อความจาก Google Keep เช่น ข้อ #1.8_พัฒนาระบบหน่วยตรวจสอบภายใน มาใส่ใน Title
    2. [Update] อาจจะเพิ่ม ” ปรับปรุงโปรแกรมหน่วยตรวจสอบ” เป็นคำบรรยาย ในหัวข้อการทำงาน
    3. ใส่ เวลา 10:00 – 13:30 ว่าเราทำงานนี้ในช่วงเวลานี้
    4. บันทึกสิ่งที่จะต้องทำ กับ สิ่งที่ทำเสร็จไปแล้ว
    5. เลือกบันทึกลงใน worklog
    6. กดปุ่ม Save
    ขั้นตอนการบันทึกผลการปฏิบัติงาน

    วางแผนการทำงาน

    อย่างเช่น ผมมีงานที่ต้องทำทุกเช้า คือ “1.4 เฝ้าระวังบริการ PSU Email”

    1. [Update] ใส่ #1.4_เฝ้าระวังบริการ_PSU_Email
    2. เลือกบันทึกใน worklog
    3. คลิก More Option
    บันทึกปฏิบัติงาน ที่จะต้องทำทุกวัน

    เลือกเป็น Repeat > Every Weekday

    เลือกให้เกิดการบันทึกนี้ ทุกวัน

    แล้วมา Uncheck “All day” ออก เพื่อกำหนดช่วงเวลา เช่น ผมจะทำงานนี้ประจำทุกวันทำงาน เวลา 09:00-10:00 จากนั้น คลิกปุ่ม Save

    กำหนดเวลา

    สร้างนัดหมาย แล้วเอามาเป็นบันทึกปฏิบัติงานก็ได้

    เบื่อไม๊ เวลาจะนัดประชุม นอกจากจะต้องหาเวลาว่าง ห้องว่าง แล้วต้องมาหาว่า ใครว่างวันไหน แถม ลงนัดไปแล้ว ก็ยังไม่รู้ว่า ใครจะตอบรับการเข้าประชุมบ้าง

    ปัญหาเหล่านี้จะหมดไป เมื่อใช้ Google Calendar

    1. ใส่หัวข้อ เช่น “#1.10 นัดประชุม” –> เพื่อลงในบันทึกปฏิบัติงานของภาระงาน “1.10 โครงการพัฒนาอะไรสักอย่าง”
    2. ลงเวลานัด
    3. เพิ่ม Email ผู้เข้าร่วมประชุม
    4. ดูได้ว่าผู้เข้าร่วมประชุมว่างไม๊ในเวลานัด (ถ้ามันใช้ Calendar เป็นอ่ะนะ)
    5. ถ้าคนนี้ไม่สำคัญ ไม่มาก็ได้ ก็ Mark Optional
    6. ใน G Suite for Education สามารถจอง Resource ได้ เช่น จองหัองได้ ใน Free Gmail ไม่มีจร้า
    7. ใน G Suite for Education สามารถสร้างห้อง เพื่อ Video Conference ใน Google Meet ได้ ส่วน ใน Free Gmail ไม่มีจร้า
    8. คลิก Save

    ตอบ Email ก็เอามาลงบันทึกปฏิบัติงานได้

    เช่น มี Order มาให้ทำอะไร มาทาง Email ก็สามารถ เอามาลงบันทึกปฏิบัติงานได้เลย

    ก็สามารถเอามาใส่ในหัวข้อ ภาระงาน ที่ถูกต้องได้ แถม ถ้า email นี้ ถึงใครบ้าง ก็จะสร้างนัดหมายให้ได้ด้วย

    ผลการบันทึกปฏิบัติงาน

    เมื่อเวลาผ่านไป …

    วัน ๆ ไม่ได้ว่างงานนะ

    เมื่อถึงเวลารายงานผลการปฏิบัติงาน

    ใน Google Drive สร้าง Google Sheets ขึ้น จากนั้น ติดตั้ง Add-Ons ชื่อ “TimeSheet”

    เมื่อติดตั้งเสร็จจะได้อย่างนี้

    และนี่คือเหตุผลว่า ทำไมต้องใส่ # ไว้หน้าชื่อของ Event

    เริ่มเลยแล้วกัน

    Add-Ons > TimeSheet>Create Report

    เลือก Calendar และ กำหนดช่วงระยะเวลาที่ต้องการ

    ผลที่ได้

    ผลที่ได้ เรียงตามหัวข้อภาระงาน และ นับจำนวนชั่วโมงได้

    เช่น หัวข้อ #1.8 พัฒนาระบบหน่วยตรวจสอบภายใน ก็จะสามารถดูรายละเอียดและจำนวนชั่วโมงได้

    และเอาไปใส่ใน TOR ได้แระ

    ส่วน Google Sheets บันทึกผลข้างต้น ก็เอาไป Share ได้ตามปรกติ

    หวังว่าจะเป็นประโยชน์ครับ

  • เมื่อฉัน “แหก” (ใบแจ้งค่าน้ำประปา) การประปาส่วนภูมิภาค

    Disclaimer: คำเตือน บทความนี้ ผู้เขียนมีจุดประสงค์ “แค่” นำเสนอ วิธีการแก้ปัญหาเมื่อจ่ายค่าน้ำประปา ผ่านทาง Mobile Application ไม่ได้เท่านั้น

    ปัญหา: ทุก ๆ เดือน เจ้าหน้าที่การประปาจะมาจดมาตรวัตน้ำ และปริ้นท์ใบเสร็จมาใส่กล่องจดหมายหน้าบ้าน และก็สามารถจ่ายผ่าน True Money Wallet ได้ทุกครั้ง … แต่มาครั้งนี้ จ่ายไม่ได้

    จากภาพ จะเห็นว่า ใบเสร็จประกอบด้วยข้อมูลต่าง ๆ แต่ที่น่าสนใจ ได้แก่
    – เลขที่ใบแจ้งค่าน้ำ: 1227620229846
    – เลขที่ผู้ใช้น้ำ: 1227052xxxx
    – หน่วยงาน: 1227-21
    – วันที่อ่าน: 09/06/62
    – รวมเงินที่ต้องชำระทั้งสิ้น: 353.10

    คราวนี้ … ใบแจ้งนี้ จะมี QR Code และ Barcode ซึ่ง ทดลองใช้ Google Lens อ่านพบว่า ได้ค่าออกมาเป็น

    |09940001649041111227052xxxx1906621227620229846000930000035310

    นับแล้ว ได้ความยาว 62 ตัวอักษร

    ลองแล้วลองอีก ก็ไม่สามารถจ่ายได้ โทรไปถามการประปา ท่านก็ว่า ให้ไปที่สำนักงาน ซึ่ง … ไกลมวากกกกก คิวก็ยาวววววว จ่ายผ่านบัตรเครดิตไม่ได้ด้วย

    ก็เลย ไปที่ 7-Eleven ผลคือ ก็ยิง Barcode ได้ แต่ไม่สามารถจ่ายเงินได้อยู่ดี !!!

    พอดีสาขาที่ไป ช่วงนั้นลูกค้าไม่คับคั่ง จึงสอบถามพนักงานว่า ไม่ทราบมีวิธี Manual ไม๊ จะได้ทราบว่า มี โดยที่ Counter สามารถ Key เลขที่ใบแจ้งค่าน้ำ, เลขที่ผู้ใช้น้ำ, หน่วยงาน ได้

    แต่ …. เมื่อ Key ตามช่องที่ระบบมีให้นั้น ปรากฏว่า ตั้งแต่ เลขที่ใบแจ้งค่าน้ำ ระบบก็บอกว่าไม่ถูกต้อง

    ก็เลย ขอรบกวนเค้า ให้ลอง Key ตัวเลขใต้ Barcode ขนาดความยาว 58 ตัวอักษร ลงไป ในช่อง เลขที่ใบแจ้งค่าน้ำ เลย ผลปรากฏว่า จ่ายได้ !!!

    12276202298461227052xxxx122721190662000035310

    อึ่มมมมม มันต้องมีอะไรแน่ ๆ …. ก็เลขมาสังเกตดู

    ถ้าเอา เลขที่ใบแจ้งค่าน้ำ, เลขที่ผู้ใช้น้ำ, หน่วยงาน มาต่อกัน จะได้
    1227620229846 1227052xxxx 122721

    ส่วนต่อมา
    190662
    น่าจะเป็น 19/06/62 ซึ่ง ก็คือ 10 วัน หลังจาก วันที่อ่าน (09/06/62)

    และ
    000035310
    น่าจะเป็น จำนวนเงิน หลักล้าน ทศนิยม 2 ตำแหน่ง Padding ด้วย 0 ด้านหน้า
    0,000,353.10

    อย่ากระนั้นเลย ไหน ลองเอาของเดือนที่แล้วมาดูซิ ซึ่งเคยจ่ายผ่าน App ได้

    09940001649041111227052xxxx2105621227620148723000930000037343

    เปรียบเทียบ 2 เดือน

    |09940001649041111227052xxxx1906621227620229846000930000035310
    09940001649041111227052xxxx2105621227620148723000930000037343

    อ่อ เพราะเดือนที่ยิงไม่ได้ มีเครื่องหมาย | ข้างหน้า

    และ มีเลข 0994000164904111
    UPDATE: 0994000164904 คือ เลขที่ผู้เสียภาษี (Tax ID) ส่วน 111 อาจจะเอาไว้คั่น มั้ง

    สรุป

    เดือนไหนจ่ายไม่ได้ ลองเอาเลขใต้ Barcode ให้ 7-Eleven คีย์เข้าไปดูในช่อง “เลขที่ใบแจ้งค่าน้ำ” ก็จะจ่ายได้จร้า

    แล้ว …. ถ้าเอา
    09940001649041111227052xxxx1906621227620229846000930000035310
    ไปสร้าง QR Code หล่ะ (ไม่เอา | นำหน้า)

    เฮ้ยยยยยยยย !!!!

  • วิธีสร้างสมุดโทรศัพท์ของหน่วยงานด้วย Google Contact

    เคยเป็นไม๊ จะโทรศัพท์หาเพื่อนร่วมงาน แต่ไม่รู้ว่า เบอร์มือถือ เบอร์ที่โต๊ะ หรือ Email อะไร วิธีการที่บางหน่วยงานทำ คือ ทำแผ่นพับเป็นสมุดโทรศัพท์เก็บใส่กระเป๋าตังค์บ้าง เป็นกระดาษแปะบ้าง บางทีก็หาย บางทีก็ไม่ได้พกบ้าง หรือ บางทีทำเป็นเว็บให้ค้นหาบ้าง … บางแห่งถึงกับต้องลงแรงเรียน Mobile App ก็มี (อิอิ)

    จะดีกว่าไม๊ ถ้าแค่ฝ่ายบุคคล แค่รวบรวม ชื่อ นามสกุล ชื่อเล่น เบอร์มือถือ เบอร์โต๊ะ และ Email ใส่ Excel แล้วจากนั้น ใครใคร่จะ Import ใส่ Google Contact ของตนเองได้เลย แล้วหลังจากนั้น จะโทร จะค้นหา ก็สามารถทำในมือถือของตนเองได้เลย !!! ไม่ต้องพก ไม่ต้องติดตั้ง App เพิ่ม ใช้ได้ทั้ง iOS, Android และบน Computer ก็ยังได้

    มาดูกัน

    สร้าง Excel เก็บข้อมูล

    การนำเข้า (Import) ข้อมูลเข้า Google Contact มีทริคนิดเดียว คือ บรรทัดแรกของไฟล์ จะต้องเป็น Header ที่กำหนดชื่อตามรูปแบบมาตราฐาน กล่าวคือ ตั้งหัวข้อว่า “ชื่อ”, “นามสกุล”, “ชื่อเล่น”, “มือถือ”, “เบอร์โต๊ะ” อะไรอย่างนี้ +++ไม่ได้+++

    ต้องตั้งเป็น

    "Given Name","Family Name", "Name Suffix","Phone 1 - Type","Phone 1 - Value","Phone 2 - Type","Phone 2 - Value","Group Membership"

    Given Name = ชื่อ
    Familay Name = นามสกุล
    Name Suffix = ใช้เป็นชื่อเล่นก็ได้
    Phone 1 – Type = ประเภทโทรศัพท์อันที่ 1 (เช่น Mobile)
    Phone 1 – Value = หมายเลขโทรศัพท์อันที่ 1 (เช่น เบอร์มือถือ)
    Phone 2 – Type = ประเภทโทรศัพท์อันที่ 2 (เช่น Work)
    Phone 2 – Value = หมายเลขโทรศัพท์อันที่ 2 (เช่น เบอร์โต๊ะ)
    Group Membership = จะให้ Label ว่าอย่างไร

    ดังตัวอย่างนี้

    จากนั้น Save เป็นแบบ CSV File สมมุติชื่อว่า contact.csv

    นำเข้า Google Contact

    เปิด Gmail/Google Mail แล้วคลิกที่ App > Contacts
    ใน Google Contact คลิกที่ More > Import
    เลือกไฟล์

    เสร็จแล้ว ก็จะได้ใน Google Contact มี Label ตามภาพ (1 contact มีหลาย ๆ label ได้)
    ในภาพ จะเห็นว่า Contact ที่เพิ่งนำเข้าไป จะปรากฏใน Label cc2019, myContact และ Imported on 5/7 ซึ่งเป็น Default

    วิธีการนี้ มีข้อดีคือ แม้จะมี contact ที่ซ้ำกัน ก็ไม่เป็นไร เราสามารถ Merge ทีหลังได้ หรือ เลือกลบที่เป็น Label ของปีก่อน ๆ ได้ ถ้าต้องการ


    พร้อมใช้งานทันที

    เมื่อ Import เสร็จแล้ว ในมือถือที่ Sync กับ Google Account ที่เราเอา Contact ใส่เข้าไปก็จะสามารถค้นหาได้ทันที

    หาตามเบอร์โทรศัพท์ก็ได้

    เย ๆ

  • วิธีการจองทรัพยากร (ห้องประชุม/รถ/Projector/etc…) ใน Calendar ของ G Suite for Education

    ข้อแตกต่างระหว่าง Calendar ของ G Suite for Education กับ Free Gmail

    สร้าง Event เพิ่มผู้เข้าร่วมประชุม และ จองทรัพยากร

    คลิกในช่อง วันบนปฏิทิน ที่เราต้องการนัดประชุม

    กรอกหัวข้อการประชุม แล้ว
    ใส่รายชื่อ ผู้เข้าร่วมประชุม
    และเลือกห้องประชุม


    คลิกที่ See guest availability เพื่อดูว่า ว่างพร้อมกันหรือไม่ ทั้งผู้เข้าร่วมประชุม และ ห้อง

    หากบางคนไม่ว่างในเวลาที่กำหนด สามารถคลิก Suggested times เพื่อให้ Google Calendar หาเวลาที่ว่างพร้อมกันหมดได้

    ใส่คำอธิบาย หัวข้อการประชุมก็ได้

    เมื่อกดปุ่ม Save ระบบจะแจ้งว่า ให้ส่ง Email ไปแจ้งผู้เข้าร่วมประชุมหรือไม่ แนะนำว่าควรคลิก Send

    เพิ่มเติม เมื่อคลิกเข้ามาดูรายละเอียดการนัดประชุม

    • ใน G Suite for Education มีบริการ Hangouts Meet ให้ในตัว (นัดหมายด้วย Free Gmail จะสร้างห้องเองไม่ได้ ทำได้แต่ Join เข้ามา) ซึ่งทำได้ทั้ง Video Call หรือ จะ Phone In ก็ได้ (อันนี้ไม่เคยลอง)
    • ดูได้ว่า ใครตอบรับ/ปฏิเสธ/ยังไม่ตอบ (เค้าเรียกว่า RSVP – Répondez s’il vous plaît – Please respond)
    • มีแจ้งเตือนก่อนการประชุมจะเริ่ม ตั้งค่าได้ว่าต้องการก่อนเวลานานขนาดไหน (ในตัวอย่างตั้งไว้ 10 นาที)

    Free Gmail ทำได้แค่นี้

    ต่อไป เป็นตัวอย่างนัดกับผู้ที่มีตารางนัดหมายแน่น ๆ
    และแสดงการจอง ห้องประชุม และ Projector

    เลือก จำนวนชั่วโมง (ในที่นี้ 1 ชั่วโมง) แล้วเลื่อนหาช่องที่ว่างตรงกันได้

    การทำรายงานการใช้ทรัพยาการ (ยกตัวอย่างห้องประชุม)

    คลิกที่ รูปแว่นขยาย เลือก ปฏิทินของทรัพยากร (ในที่ คือห้องประชุม) ที่ต้องการดู




    แล้วเลือก ช่วงเวลาที่จะทำรายงาน (ในที่นี้ เป็นตัวอย่างการทำรายงานการใช้ ห้องประชุม ตั้งแต่ 1 พฤษภาคม – 31 พฤษภาคม) แล้ว คลิก ปุ่ม Search

    ก็จะได้รายงานอย่างนี้

    หวังว่าจะเป็นประโยขน์ครับ

  • ELK #08 Oracle Audit Trail

    ต่อจา ELK #07 – Logstash คราวนี้ มาใช้งานจริง โดยใช้ ELK เพื่อเก็บ Log ของ Oracle Audit Trail

    1. Oracle Audit Trail บน Database Server เก็บ Log ในรูปแบบ XML โดยแต่ละ Event จะมี tag <AuditRecord> … </AuditRecord> คุมอยู่ ที่แตกต่างจาก Log ทั่วไปคือ ในแต่ละ Event จะมีเครื่องหมาย CRLF (การขึ้นบรรทัดใหม่) เป็นระยะ ๆ
    2. ออกแบบให้ Logstash รับข้อมูล (Input Plugin) จาก TCP Port 5515 ซึ่งต้องใช้ Codec ในการรวบ Multiline ในแต่ละ Event เข้าด้วยกัน โดยหา pattern “<AuditRecord>” เป็นจุดเริ่มต้น ส่วนบรรทัดที่ไม่เจอ Pattern ดังกล่าวนั้นการตั้งค่า negate => “true” เป็นการบอกว่า “ให้ดำเนินการต่อไป” โดยจะเอาบรรทัดที่ตามมาจากนี้ ต่อท้าย ด้วยการตั้งค่า what=> “previous”
    3. ในส่วนของ Filter Plugin จะอ่านค่าจาก “message” และ ส่งสิ่งที่ถอดจาก XML ได้ ไปยัง “doc”
    4. ในส่วของ Output Plugin จะส่งออกไปยัง ElasticSearch ที่ TCP port 9200

    ดัง Configuration ต่อไปนี้

    input {
       syslog {
          port => 5515
          codec => multiline {
               pattern => "<AuditRecord>"
               negate  => "true"
               what    => "previous"
          }
       }
    }
    filter {
       xml {
          source => "message"
          target => "doc"
       }
    }
    output {
      elasticsearch {
         hosts => ["elk.server:9200"]
      }
    }

    จากนั้น ทาง Oracle Database Server ทำการเปิด Audit Trail แล้วเขียน Log ลงไฟล์ แล้วเขียน Cron เพื่อ Netcat ไฟล์ส่งมาให้ Lostash ที่เปิด Port TCP 5515 ไว้รอรับ

    ผลที่ได้คือ

    โดยวิธีนี้ จะเป็นการนำ Log ซึ่งจากเดิมเป็น Text Format นำมาเป็น NoSQL ได้ ซึ่งจะสามารถ Query ข้อมูลได้ง่ายยิ่งขึ้น

    หวังว่าจะเป็นประโยชน์ครับ

  • วิธีเชื่อมต่อ PostgreSQL จาก python

    ในการเชื่อมต่อกับ PostgreSQL จาก Python นั้น จะต้องใช้ Package ‘psycopg2’

    คำสั่งในการติดตั้งคือ

    pip install psycopg2

    วิธีการเรียกใช้จาก python

    
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    import psycopg2
    from IPython.display import display, HTML # used to print out pretty pandas dataframes
    import matplotlib.dates as dates
    import matplotlib.lines as mlines
    
    %matplotlib inline
    plt.style.use('ggplot') 
    
    # specify user/password/where the database is
    sqluser = 'username'
    sqlpass = 'userpasswordgohere'
    dbname = 'dbname'
    schema_name = 'someschema'
    host = 'host.postgresql.server'
    
    query_schema = 'SET search_path to ' + schema_name + ';'
    
    # connect to the database
    con = psycopg2.connect(dbname=dbname, user=sqluser, password=sqlpass, host=host)
    
    query = query_schema + 'select * from sometable'
    df = pd.read_sql_query(query,con)

    ก็จะได้ df เป็น Dataframe เอาไปใช้งานต่อได้

    จบ