Category: Operating System

  • Script สำหรับ หาวันที่ของไฟล์ล่าสุดใน directory

    Q: ถ้าจะเขียน คำสั่ง หรือ script บน linux เพื่อหา วันที่ของ file ล่าสุดใน folder ของ user จะเขียนยังไงดี มีไอเดียไหมครับ

    A: สมมติ folder ของ user คือ /home/user/Documents

    $ ls -t /home/user/Documents
    

    จะได้ไฟล์เรียงตามลำดับวันที่/เวลาของไฟล์ โดยไฟล์ล่าสุดจะโผล่มาเป็นไฟล์แรก

    ถ้าเราต้องการไฟล์ล่าสุดแค่ไฟล์เดียว ก็สามารถใช้คำสั่ง head -1 เพื่อตัดให้เหลือไฟล์เดียวได้ ก็จะได้คำสั่งเป็น

    $ ls -t /home/user/Documents | head -1
    

    ทีนี้ จากชื่อไฟล์ที่ได้ ถ้าต้องการวันที่ เราก็สามารถใช้คำสั่ง date โดยใช้ option -r สำหรับให้มันแสดงวันที่ของไฟล์ใดๆ ตย. เช่น ต้องการรู้วันที่ ของไฟล์ /etc/passwd ก็ใช้คำสั่ง

    $ date -r /etc/passwd
    

    เอาสองอย่างนี้มาใช้งานร่วมกันได้ตามนี้ครับ

    $ date -r `ls -t /home/user/Documents | head -1`
    

    ทีนี้ ถ้าต้องการให้ format ของวันที่ออกมาตามที่เราต้องการ อย่างเช่น ให้ format เป็น yyyy-mm-dd HH:MM:SS
    ก็เพิ่ม option ให้กับคำสั่ง date ประมาณนี้ “+%Y-%m-%d %H:%M:%S”

    รวมกันทั้งหมดเป็น

    $ date -r `ls -t /home/user/Documents | head -1` "+%Y-%m-%d %H:%M:%S"
    

    Q: ถ้าจะลงลึกไปหลาย level ต้องทำอะไรเพิ่มครับ
    A: หมายถึงต้องการไฟล์ล่าสุด ไฟล์เดียว จากใน directory นั้นและ sub directory ย่อยทั้งหมดใช่ใหมครับ?
    Q: ใช่ครับ
    A: งั้น คงต้องพึ่งพาคำสั่ง find ครับ เพื่อที่ list เอาเฉพาะไฟล์ทั้งหมดออกมาก่อน เพราะคำสั่ง ls ธรรมดามันจะไล่ไปตาม directory ทีละ directory

    เริ่มจาก

    $ find /home/user/Documents
    

    มันจะ list ทุกอย่างทั้งไฟล์ และ ไดเรคตอรี่และในไดเรคตอรี่ย่อยออกมา

    เราต้องการเฉพาะไฟล์ ระบุ option -type f
    เราต้องการให้มันแสดงวันที่ของไฟล์ออกมาด้วย อันนี้ต้องพึ่งคำสั่ง ls โดยใช้ option ของ ls เป็น –full-time

    $ find /home/user/Documents -type f -exec ls --full-time {} \;
    

    โดย {} เป็นการระบุว่าให้ find ใช้คำสั่ง ls –full-time กับ output ของ find ส่วน \; เป็นตัวระบุว่า จบ option ของ คำสั่ง find แค่นี้

    output ที่ได้ จะเป็นไฟล์ “ทั้งหมด” โดยที่ในแต่ละบรรทัดจะมี ข้อมูลอย่างอื่นของไฟล์นั้นออกมาด้วย เช่น permission, owner, group, size ซึ่งเราไม่สนใจ เราตัดเอาข้อมูลที่อยู่ข้างหน้าเหล่านั้นออกไปได้ โดยใช้คำสั่ง cut โดยในกรณีนี้ใช้ space ‘ ‘ เป็นตัวแบ่ง field และ เอาข้อมูลตั้งแต่ column ที่ 6 เป็นต้นไป

    $ find /home/user/Documents -type f -exec ls --full-time {} \; | cut -f6- -d' '
    

    คราวนี้เราก็ได้ไฟล์ทั้งหมดออกมาโดยนำหน้าชื่อไฟล์ด้วยวันที่/เวลา ซึ่งเราสามารถส่งเข้าไป sort โดยให้เรียงจากหลังมาหน้า
    sort -r และ เอา output ทั้งหมดมาตัดเอาเฉพาะบรรทัดแรกโดยใช้ คำสั่ง head -1 เหมือนเดิม

    $ find /home/user/Documents -type f -exec ls --full-time {} \; cut -f6- -d' ' | sort -r | head -1
    

    ซึ่ง output ที่ได้จากคำสั่ง head อันนี้จะมี วัน/เวลาของไฟล์ นำหน้า ตามด้วยชื่อไฟล์ ซึ่งอาจจะเอาไปใช้งานได้เลย
    หรือ ถ้าต้องการเฉพาะชื่อไฟล์ เพื่อจะเอาไปทำอะไรอย่างอื่นต่อ ก็ต้องส่งไปให้คำสั่ง cut เพื่อตัด field ข้อมูลที่อยู่ด้านหน้าออก

    ขอบคุณคำถามจาก Garnet Komane ครับ

    ปล. สุดท้ายแล้วจากคำสั่งข้างบนที่ว่า แทนที่จะพิมพ์เอาบน command line แล้วไปเปลี่ยน path ที่จะให้ค้นหา เขียนมันใหม่เป็น shell script เลยจะเรียกใช้งานได้ง่ายกว่า ซึ่งจะได้ shell script ประมาณนี้ครับ

    #!/bin/bash
    
    LOCATION="$1"
    
    [ -z "$LOCATION" ] && { echo "Usage: $0 LOCATION"; exit; }
    
    FILE=$(
    find $LOCATION -type f -exec ls --full-time {} \;  |\
    cut -f6- -d' '                                     |\
    sort -r                                            |\
    head -1                                            |\
    cut -f4- -d' '
    )
    
    STAMP=$(date -r "$FILE" "+%Y-%m-%d %H:%M:%S")
    
    echo "$STAMP $FILE"
    

    หรือ ดาวน์โหลด script ได้จาก ที่นี่

  • การสร้าง Hybrid App ด้วย Ionic Framework

    ในบทความนี้จะนำขั้นตอนการพัฒนา Hybrid App อย่างง่ายด้วย Ionic Framework เพื่อเป็นแนวทางการพัฒนาแก่ผู้ที่สนใจ โดยเครื่องที่ใช้ในการทดลองเป็นปฏิบัติการ Windows 10 มีขั้นตอนการติดตั้งเครื่องมือต่าง ๆ เพื่อให้สามารถใช้ Ionic ได้ดังนี้

    1. ติดตั้ง js โดยดาวน์โหลดไฟล์ node-v4.4.7-x64.msi ได้จาก http://nodejs.org วิธีการติดตั้งก็ไม่ยุ่งยากครับ ใช้ Next Technology ได้เลย จะมีหน้าจอขั้นตอนต่าง ๆ ดังรูป
      node_js_setup
    1. ติดตั้ง Cordova และ Ionic command line tool โดยการเปิด command prompt ของ windows ขึ้นมา แล้วรันคำสั่ง
      $ npm install -g ionic
      install_ionic

    เริ่มต้นสร้าง App อย่างง่าย

    หลังจากที่เตรียมความพร้อมของเครื่องที่พัฒนาเรียบร้อยแล้ว ขั้นตอนต่อไปก็จะเป็นการสร้าง App ขึ้นมา ซึ่ง Ionic ได้เตรียม template ตั้งต้นไว้ให้เราแล้ว ได้แก่ side menu, maps, salesforce, complex-list, blank เราก็ดูว่า App ของเราสามารถใช้ template ตัวไหนได้บ้าง ก็เลือกมาใช้ได้เลย
    ionic_template
    รูปที่ 1 Ionic Template [ที่มา : http://ionicframework.com]

    ขั้นตอนการสร้าง App โดยใช้ command line tools

    1. เปิด command line ขึ้นมา แล้วกำหนด working directory เป็นที่ที่สำหรับใช้เก็บ project (ในที่นี้จะกำหนดเป็น “C:\ionic” )
      cmd
    1. สร้าง project กำหนดชื่อ myApp และใช้ tabs เป็น template ตั้งต้นโดยใช้คำสั่ง
      $ ionic start myApp tabs
      ผลลัพธ์ที่ได้จากคำสั่งนี้ จะทำให้ได้ไฟล์ต่าง ๆ ดังรูป
      file_structureจะพบว่ามีโฟลเดอร์ชื่อ www สำหรับเก็บโค้ด HTML, CSS, Java Script เหมือนกับการพัฒนาเว็บไซต์ ให้เราใช้ความรู้ด้านการเขียนเว็บไซต์สร้างไฟล์ต่าง ๆ เก็บไว้ในโฟลเดอร์นี้ได้เลย
    1. หลังจากสร้างไฟล์ App ขึ้นมาแล้ว ก็จะเข้าสู่ขั้นตอนการ Build ให้ App สามารถรันบน Platform ต่าง ๆ ได้ สำหรับในบทความนี้จะแสดงเฉพาะการ Build สำหรับ Android เพื่อให้เห็นเป็นแนวทางการพัฒนา เนื่องจากเครื่องที่ใช้ทดสอบเป็น Windows 10 หากจะ Build ให้รันบน iOS ได้ ก็ต้อง Build บนเครื่องที่ใช้ระบบปฏิบัติการ iOS ในส่วนของการเตรียมความพร้อมสำหรับการ Build ให้รันบน Android ได้ เครื่องที่ใช้ในการพัฒนาจะต้องติดตั้ง Java Development Kit (JDK) 7 และAndroid Stand-alone SDK Tools หรือ Android Studio  ก่อน ซึ่งขั้นตอนการติดตั้งก็ไม่ยากครับ ใช้ Next Technology เช่นเคย
    1. Build และ Run บน Android โดยใช้คำสั่งต่อไปนี้
      $ ionic platform add android
      $ ionic build android
      $ ionic emulate androidจะทำให้ได้ผลลัพธ์ดังรูป
      android_app
      จากรูปเป็นผลลัพธ์ที่ได้จากการใช้ Tab template ซึ่งผู้พัฒนาจะต้องแก้ไขโค้ดให้เป็นไปตามที่ได้ออกแบบไว้ ก็จะได้ Android App ตามต้องการ

     

     

     

  • สร้าง Shortcut ในการ Remote Desktop Connection

    ในการพัฒนาระบบงานหลาย ๆ ระบบ ซึ่งแต่ละระบบก็ต้องมี Server ถ้าระบบมีปัญหาสิ่งแรก ๆ ที่ต้องเข้าไปดูปัญหานั่นคือการ Remote ไปยัง Server นั้น ๆ เช่นดู Process Task ต่าง ๆ มีอะไรรันอยู่ มีอะไรทำงานอยู่จึงทำให้ระบบช้า หรือทำให้ระบบมีปัญหาเป็นต้น เมื่อมีหลาย Server ครั้นจะมาจดจำ IP เครื่องที่จะ Remote ไป หรือบางเครื่องที่นาน ๆ จะเกิดปัญหาที ทางออกของปัญหามีค่ะ แค่เพียงสร้างเป็น Shortcut ในการ Remote Desktop Connection นั่นเอง มีขั้นตอนดังนี้

    1. ที่หน้าจอ Desktop คลิกขวา New
    2. เลือกหัวข้อ Shortcut
    3. พิมพ์ข้อความดังนี้ C:\Windows\System32\mstsc.exe /v:192.168.100.170 /w:800 /h:600
      –> 3.1 /v:ต่อด้วย IP Address:Port
      –> 3.2 /w:ต่อด้วยขนาดหน้าจอ ความกว้าง
      –> 3.3 /h:ต้อด้วยขนาดหน้าจอ ความสูง
      –> 3.4 อื่น ๆ เช่น /f หมายถึงเต็มหน้าจอ
      /admin หมายถึง Remote เข้าด้วย Session Admin13-7-2559 13-44-06
    4. คลิกปุ่ม Next
    5. ตั้งชื่อ Shortcut
      13-7-2559 13-46-33
    6. คลิก Finish จะเห็น Icon ของ Shortcut ที่ใช้ในการ Remote เพื่อเข้า Server ตามที่ได้สร้างไว้ที่หน้า Desktop
  • IEEE Explore Services and IPv6

    หลายวันก่อน (2016-06-28) คุณวันชัย พบปัญหาการเข้าใช้งาน web ieeexplore.ieee.org

    p1

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

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

    หลังจากผ่านการตรวจสอบ 2-3 ขั้นตอนก็ได้ข้อสรุปว่า ปัญหาที่เกิดขึ้นก็คือ จากเดิมทีที่เครือข่ายของมหา’ลัย ใช้งาน IPv4 ในการเข้าถึงเครือข่ายของ IEEE (สำหรับในกรณีนี้ก็คือ ieeexplore.ieee.org) ตอนนี้ เมื่อเครือข่ายของ มหาวิทยาลัยสงขลานครินทร์ พร้อมที่จะให้บริการ IPv6 เครื่องคอมพิวเตอร์ ซึ่งส่วนใหญ่พร้อมที่จะใช้ IPv6 อยู่แล้ว ก็จะเปลี่ยนไปใช้ IPv6 สำหรับการติดต่อกับเครือข่ายปลายทาง

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

    อย่างไรก็ตาม สำหรับกรณีนี้ บริการของ IEEExplore และ Academic Journals อีกจำนวนมากซึ่งมหาวิทยาลัยสงขลานครินทร์เป็นสมาชิกอยู่ (ซึ่งอาจจะเป็นสมาชิกโดยตรง หรือโดยอ้อมผ่านทาง UniNet/สกอ.) ไม่ได้เป็นบริการที่เปิดแบบ public ให้ใครๆก็สามารถเข้าถึงข้อมูลได้ทุกอย่าง ข้อมูลบางอย่าง เช่น ไฟล์ของบทความ จะดาวน์โหลดได้เฉพาะสมาชิกเท่านั้น ถ้าเป็นสมาชิกแบบบุคคล วิธีการที่ใช้ในการยืนยันตัวตน ก็คือการ login โดยใช้ username และ password แบบเดียวกับที่ใช้กับบริการบนเว็บอื่นๆทั่วไป แต่สำหรับสมาชิกแบบ “สถาบัน” แบบที่มาหวิทยาลัยสงขลานครินทร์เป็นอยู่ แทนที่จะต้องให้ นักศึกษาและบุคคลากร แต่ละคนจะต้องมีแอคเคาท์ เป็นของตัวเอง วิธีการที่ง่ายกว่าก็คือ ใช้หมายเลข IP เป็นตัวระบุ โดยสถาบันที่เป็นสมาชิก ก็จะต้องแจ้งไปทางผู้ให้บริการว่า หมายเลข IP ใด หรือ ช่วงใดบ้างที่เป็นของสถาบันนั้นๆ

    แน่นอนว่าก่อนหน้านี้ หมายเลข IP ที่มหาวิทยาลัยสงขลานครินทร์แจ้งไปจะมีเฉพาะ IPv4

    และแน่นอนว่าก่อนหน้านี้ไม่มีใครแจ้งปัญหาว่าสามารถดาวน์โหลดไฟล์จาก IEEExplore ไม่ได้ … เพราะเครือข่ายส่วนใหญ่ใน มหา’ลัย ใช้งานได้เฉพาะ IPv4

    [[

    ซึ่ง … อาจจะทำให้ผมตั้งข้อสงสัยขึ้นมาได้ว่า แล้วหน่วยงานบางหน่วยซึ่งใช้งาน IPv6 มาได้นานก่อนหน้านี้ ไม่เคยมีใครมีปัญหาบ้างเลยหรือ หรือจะเป็นเพราะว่าสมาชิกหน่วยงานเหล่านั้นไม่เคยใช้ IEEExplore เลย … แต่เนื่องจากว่า มีคำโบราณกล่าวไว้ … อะไรบางอย่าง…เกี่ยวกับการขว้างงู…และอวัยวะอะไรบางอย่างที่เป็นส่วนเชื่อมต่อระหว่างหัวและลำตัว… ผมก็เลยไม่ได้ตั้งข้อสงสัยใดๆทั้งสิ้นเกี่ยวกับเรื่องดังกล่าว เพราะไม่อยากให้คอของผมมีรู … และผมก็ไม่ชอบงูด้วย!

    ย้ำ, ผมไม่ได้ตั้งข้อสงสัยใดๆทั้งสิ้นจริงๆ

    EDIT (2016-07-08): ข้อมูลจาก ที่นี่ ทำให้พอเชื่อได้ว่า IEEE เริ่มใช้งาน IPv6 เมื่อประมาณ 2016-06-06 นั่นคือประมาณ 1 เดือนที่แล้ว ดังนั้นปัญหาในการเข้าถึงบริการของ IEEE Explore จากเครือข่ายของ มหาวิทยาลัยสงขลานครินทร์ โดยใช้งาน IPv6 แล้วใช้งานไม่ได้ จึงไม่ได้นานมากอย่างที่ผมคิดตอนแรก
    ]]

    กลับมาที่เรื่องของการใช้งาน IEEExplore ต่อ ปัญหาที่เกิดขึ้นครั้งนี้ เทียบเคียงได้กับการที่ทาง มหาวิทยาลัยแจ้ง IP address ที่มีใช้งานอยู่ให้กับทางผู้ให้บริการไม่ครบ เมื่อเครื่องคอมพิวเตอร์เริ่มใช้งาน IPv6 ได้และพยายามใช้งาน IPv6 ในการติดต่อกับเครื่องที่ให้บริการปลายทาง เครื่องที่ให้บริการปลายทาง ตรวจสอบแล้วไม่พบว่า หมายเลข IP address นี้อยู่ในรายการของหมายเลข IP ที่อนุญาตให้เข้าถึงข้อมูลได้ ก็เลยปฏิเสธการเข้าถึงข้อมูล

    วิธีการแก้ปัญหา ก็คือแจ้งหมายเลข IPv6 address ที่มหา’ลัยใช้อยู่ไป เพื่อให้ทางผู้ให้บริการอนุญาตให้เครื่องคอมพิวเตอร์ซึ่งใช้หมายเลขเหล่านี้เข้าถึงข้อมูลได้

    วันนี้ (2016-07-07)
    p2
    คุณสงกรานต์ และ หอสมุดคุณหญิงหลงประกาศผ่านกลุ่มของ facebook ว่าสามารถใช้งานบริการของ IEEE ได้แล้วทั้ง IPv4 และ IPv6

    ซึ่งในแง่ของผู้ใช้งานทั่วๆไป ควรที่จะใช้งานได้ โดยไม่จำเป็นจะต้องมาสนใจว่า โปรโตคอลที่คอมพิวเตอร์ของตัวเองใช้งานอยู่ในเข้าไปใช้งานบริการ IEEE เป็นโปรโตคอลใด

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

    ถ้าผู้ใช้งาน ใช้งานไม่ได้ ก็ควรเป็นหน้าที่ของ sysadmin/netadmin ของหน่วยงานนั้นๆ เป็นผู้ตรวจสอบและวิเคราะห์ว่าปัญหาเกิดขึ้นจากอะไร การปล่อยให้ผู้ใช้งาน ซึ่งส่วนใหญ่อาจจะคุ้นเคยแค่การใช้งานแอพลิเคชั่นโดยทั่วไป ต้องมายุ่งเกี่ยวกับ enable/disable v4 protocol ซึ่งจะต้องแก้ไข registry ของระบบ (ภายใต้ข้อสมมติฐานที่ว่า ผู้ใช้ส่วนใหญ่ใช่ Windows) เป็นเรื่องที่ อาจจะผลักภาระให้กับผู้ใช้งานมากเกินไป และ ถึงแม้ผู้ใช้จะยินดีทำ แต่ข้อผิดพลาดที่อาจจะเกิดขึ้นได้ จะส่งผลที่ทำให้เกิดปัญหาที่ยากต่อการตรวจสอบในภายหลัง ได้มากกว่าครับ

    โอเค คราวนี้กลับมาที่ sysadmin/netadmin ผมคิดว่า การจัดการ disable/enable IPv6/IPv4 protocol โดยเข้าไปยุ่งเกี่ยวกับ registry ของ Windows ไม่น่าจะเป็นปัญหาอะไรสำหรับ ผู้ดูแลระบบ ที่ต้องเผชิญหน้ากับปัญหาในลักษณะนี้เป็นปกติอยู่แล้ว แต่ในนามของผู้ใช้ Linux ซึ่งไม่มีความสามารถในการเข้าถึง registry ของ Windows ผมคิดว่ามีเครื่องมือ ซึ่ง สามารถเรียกใช้งานได้จาก command line ของ Windows เองได้ โดยไม่จำเป็นที่จะต้องไปแก้ไข Windows Registry และสามารถนำมาใช้งานในการตรวจสอบการเข้าถึง IEEExplore สำหรับแต่ละโปรโตคอลได้

    เครื่องมือนั้นมี 2 ตัวครับ ก็คือ wget และ grep

    เครื่องมือทั้งสองนี้ ถือเป็นเครื่องมือพื้นฐานสำหรับ Linux Distribution หลักๆทั่วไป ที่จะติดตั้งมาให้แล้วสามารถเรียกใช้งานได้เลย โดยไม่จำเป็นจะต้องติดตั้งเพิ่ม ส่วน สำหรับ Windows ก็สามารถ Download ได้จาก

    wget — http://gnuwin32.sourceforge.net/packages/wget.htm
    grep — http://gnuwin32.sourceforge.net/packages/grep.htm

    ผมไม่สามารถตรวจสอบได้ว่า tools ทั้งสองตัวนี้ใช้งานได้จริงสำหรับ Windows ใหม่ๆหรือเปล่า (ตัว tools ทั้งสอง built ตั้งแต่ปี 2008) แต่จาก comment ของ Stack Overflow ที่นี่ ก็น่าพอเชื่อได้ว่าใช้งานได้

    การใช้งาน

    1. คำสั่ง wget มี option สำหรับบังคับให้ใช้ IPv4 (-4) หรือใช้ IPv6 (-6) สำหรับการติดต่อไปยัง web ปลายทาง
    2. ในหน้าแรกของ IEEExplore จะมีข้อความว่า “Prince of Songkla University provided by UniNet” อยู่ในหน้าแรกด้วย ถ้าหากว่าเครื่องคอมพิวเตอร์ที่ใช้ในการดาวน์โหลดใช้ IP ของมหาวิทยาลัย และ ทาง IEEExplore ได้ register หมายเลข IP นั้นเอาไว้แล้ว

    ดังนั้น เมื่อใช้คำสั่ง

    wget -q -O- -4 http://ieeexplore.ieee.org | grep "Prince of Songkla"
    

    หรือ

    wget -q -O- -6 http://ieeexplore.ieee.org | grep "Prince of Songkla"
    

    แล้วได้ข้อความว่า

    <h4>Prince of Songkla University provided by UniNet</h4>
    ก็แสดงว่า สำหรับ protocol นั้นๆสามารถใช้งานกับ IEEExplore ได้ ถ้าไม่มีข้อความใดๆ ก็แสดงว่ายังใช้งานไม่ได้ครับ

    หมายเหตุ: option “-O-” ของ wget จะทำให้ wget แสดงข้อมูลที่ download มาได้ออกทาง standard output ซึ่งในกรณีนี้ก็จะเป็นการส่งต่อให้กับคำสั่ง grep ผ่านทาง pipe “|” ส่วน option “-q” (quiet) ไม่ให้มันแสดง message แสดงสถานะที่มันกำลังติดต่อว่ากำลังทำอะไร และ ดำเนินการไปถึงใหนแล้ว เพราะในกรณีนี้ เราสนใจเฉพาะข้อมูลที่จะ download มาจากเครื่องที่ให้บริการเท่านั้น
    ถ้าอยากจะรู้ว่า ในการติดต่อไปยัง IEEExplore ครั้งนั้นๆ เครื่องของเราใช้หมายเลข IP ใดก็สามารถตรวจสอบ โดยใช้คำสั่ง

    wget -q -O- -4 http://ieeexplore.ieee.org | grep geoip
    wget -q -O- -6 http://ieeexplore.ieee.org | grep geoip
    

    และ ถ้าอยากจะรู้ว่าปกติแล้ว ถ้าไม่มีการระบุโปรโตคอล เครื่องของเราจะใช้ IPv4 หรือ IPv6 ในการติดต่อไปยัง IEEExplore ก็ให้ใช้คำสั่ง

    wget -q -O- http://ieeexplore.ieee.org | grep geoip
    

    ครับ ถ้าไม่ระบุ protocol ใน option คำสั่ง wget ก็จะใช้ค่าที่กำหนดโดยระบบปฏิบัติการ ว่าจะให้ใช้ protocol ใดก่อนครับ

  • วิธีลดขนาดไฟล์ photo ให้เล็กลงก่อนอัปโหลดขึ้นเว็บไซต์

    ภาพถ่ายที่ได้จากสมาร์ทโฟนที่มีขนาดไฟล์ใหญ่เป็น 1-2 MB แล้วทำให้มันมีขนาดไฟล์เล็กลงได้ด้วย tool อะไรบ้าง เพื่อนำภาพไปแขวนบนเว็บไซต์ของเราที่ไม่มีความสามารถในการช่วยบีบอัดขนาดไฟล์ให้อัตโนมัติในขณะที่อัปโหลดภาพ

    เราคงจะข้ามการพูดถึงโปรแกรม Photoshop ไปไม่ได้ นั้นเป็นสิ่งที่ใครก็ตามที่มีเงินซื้อโปรแกรมมาใช้ แต่หากต้องการหา tool ที่ใช้งานได้โดยไม่มีค่าใช้จ่าย จะมีมั้ยนะ

    ผมค้นใน google search เจอเว็บนี้ https://tinypng.com/ เป็นการนำภาพถ่ายของเราไปบีบอัดด้วย online tool ไม่ต้องติดตั้งโปรแกรมใด ๆ (เพียงแต่หากกังวลเรื่องไม่อยากให้รูปไปถูกเก็บไว้ที่เซิร์ฟเวอร์ของเขา ก็อย่าใช้ครับ) ในเนื้อหาเว็บนี้บอกไว้ว่า ภาพถ่ายที่ได้จากการบีบอัดเมื่อนำไปวางบนเว็บไซต์ มันใช้ได้หมดทุกเบราว์เซอร์ ยกเว้น IE6 ซึ่งเก่ามากแล้ว

    และทางเลือกที่จะติดตั้งโปรแกรมเพิ่มบน Windows ครับ ขอแนะนำติดตั้งโปรแกรม GIMP for Windows (https://www.gimp.org/windows/) ทำดังนี้

    reduce-2016-06-28 14_59_42
    ขั้นตอน
    1.เปิดไฟล์เดิม
    2.แล้วเลือก export as… ตั้งชื่อไฟล์ตามต้องการ
    3.แล้วคลิก export จากนั้นมันจะมี dialog ถามให้กำหนด quality

    reduce-2016-06-28 15_01_14
    4.จากเดิม 91% ผมลองลดลงไปถึง 41% ภาพถ่ายขนาดเท่าเดิม (กว้างxยาว) แต่ขนาดไฟล์ลดลงจาก 2.1 MB เป็น 601.7KB

    reduce-2016-06-28 15_14_31

     

    นอกจากนี้ ก็อาจเลือกใช้

    ขอบคุณเพื่อน ๆ ที่ช่วยกันแนะนำมา และขอบคุณล่วงหน้าถ้าจะกรุณา comment มาครับ

  • วิธีการเปิด Audit Log ของ Windows 2012 เพื่อให้บันทึกการเปลี่ยนแปลงเกี่ยวกับ Account Management ต่างๆ

    บน Microsoft Windows 2012 โดยปรกติจะไม่ทำการบันทึกการเปลี่ยนแปลงต่างๆเกี่ยวกับ Account ขั้นตอนต่อไปนี้จะทำให้เกิดการบันทึกใน Event Log เพื่อให้ Administrator ทราบว่า ใคร เปลี่ยนแปลงอะไร  เมื่อไหร่

    1. ไปที่ Start Menu ค้นหา Group Policy Management
      2559-06-03 10_02_40-Program Manager
    2. เลือก
      Computer Configuration
      Policies
      Windows Settings
      Security Settings
      Local Policies
      Audit Policy
      จากนั้น Double Click “Audit account management”
      2559-06-03 10_03_26-Start
    3. คลิกที่
      Define these policy settings
      และเลือก Success
      แล้วคลิกปุ่ม OK
      2559-06-03 10_11_13-Start
    4. จะได้ผลดังนี้
      2559-06-03 10_13_01-windows2012 [Running] - Oracle VM VirtualBox
    5. เมื่อเปิด Event Viewer > Security Log จะได้ผลดังนี้ เมื่อมีการเปลี่ยนแปลงเกี่ยวกับ Account จะเกิด Task Category “User Account Management” มี Event ID 4738 ดังภาพ
      2559-06-03 10_13_54-Program Manager
    6. จะเห็นรายละเอียดว่า ใคร แก้ไข Account Name ใด เมื่อไหร่
      2559-06-03 10_15_23-windows2012 [Running] - Oracle VM VirtualBox
    7. และแก้ไข Attribute ใด เป็นอะไร
      2559-06-03 10_17_13-Start

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

    Reference:

    1. https://technet.microsoft.com/en-us/library/cc731607(v=ws.10).aspx
    2. https://support.microsoft.com/en-us/kb/977519

     

  • Oracle Database 12CR1 monitoring with MRTG

    • OS: Oracle Enterprise Linux  7.2  (CentOS 7.2)
    • วิธีติดตั้ง MRTG สามารถติดตั้งได้โดยสามารถดูคู่มือที่ ติดตั้ง mrtg บน ubuntu อาจไม่เหมือนกันแต่สามารถทำได้ทำนองเดียวกัน
    • กราฟสำหรับ Idle CPU and Load average, CPU Time spent waiting for IO, Traffic Analysis for eth0, TCP Current Establish สามารถใช้ script เดียวกับลิงค์ในข้อ ๒ ได้เลย
    • สร้างแฟ้ม /etc/mrtg/get-memory.sh มีข้อความว่า
      #!/bin/bash
      FREE=$(free |grep "Mem:"|awk '{print $7}')
      SWAP=$(free |grep "Swap:"|awk '{print $3}')
      TIME=$(uptime)
      echo "${FREE}"
      echo "${SWAP}"
      echo "$TIME"
      hostname 

      สร้างแฟ้ม /etc/mrtg/myhost-memory.cfg มีข้อความว่า
      WorkDir: /var/www/mrtg/myhost
      Target[myhost-mem]:`/etc/mrtg/get-memory.sh`
      MaxBytes[myhost-mem]: 20000000000
      Title[myhost-mem]: Free Memory and Swap Used
      PageTop[myhost-mem]: <H1>Free Memory and Swap Used</H1>
      ShortLegend[myhost-mem]: bytes
      YLegend[myhost-mem]: bytes
      LegendI[myhost-mem]:  Free Memory:
      LegendO[myhost-mem]: Swap Used:
      Legend1[myhost-mem]: Free memory, in bytes
      Legend2[myhost-mem]: Swap Used, in bytes
      Options[myhost-mem]: gauge, nopercent, growrightทดสอบสร้างภาพต้นแบบด้วยคำสั่ง

      env LANG=C /usr/bin/mrtg/myhost-memory.cfgปรับปรุงแฟ้ม index.html ด้วยคำสั่ง
      indexmaker --column=2 --output=/var/www/mrtg/myhost/index.html /etc/mrtg/myhost-cpu.cfg /etc/mrtg/myhost-cpu-io.cfg /etc/mrtg/myhost-speed-eth0.cfg /etc/mrtg/myhost-tcpestab.cfg /etc/mrtg/myhost-memory.cfg

    • โฟลเดอร์ที่ต้องเฝ้าระวังได้แก่ /u02/app/oracle/adump, /u02/app/oracle/diag/rdbms/regist/regist/alert, /u02/app/oracle/rdbms_trace ซึ่งเป็นโฟลเดอร์สำหรับเก็บ Log ไฟล์ต่างๆ ซึ่งอาจมีขนาดเพิ่มขึ้นจนระบบไม่สามารถให้บริการได้ และโฟลเดอร์ /u03 เป็นโฟลเดอร์ที่ใช้เก็บ archive log (ในกรณีที่ฐานข้อมูลเปิด archive log mode)
      • สร้างแฟ้ม /etc/mrtg/get-diskfree-misc1.sh มีข้อความว่า
        #!/bin/bash
        adump=$(du -sm /u02/app/oracle/adump|awk '{ print $1 }')
        free=$(df -m /u02|grep u02|awk '{ print $4 }')
        TEMP=$(uptime|grep -o "load average.*"|awk '{print $3}'|cut -d',' -f 1)
        LOAD=$(echo "${TEMP:-0} * 100"|bc|cut -d'.' -f 1)
        TIME=$(uptime)
        echo "${adump}"
        echo "${free}"
        echo "$TIME"
        hostname
      • สร้างแฟ้ม /etc/mrtg/myhost-diskfree-misc1.cfg มีข้อความว่า
        WorkDir: /var/www/mrtg/myhost
        Target[myhost-misc1]:`/etc/mrtg/get-diskfree-misc1.sh`
        MaxBytes[myhost-misc1]: 20000000000
        Title[myhost-misc1]: Free disk space and disk Used of /u02/app/oracle/adump
        PageTop[myhost-misc1]: Free disk space and disk Used of /u02/app/oracle/adump
        ShortLegend[myhost-misc1]: bytes
        kMG[myhost-misc1]: M,G,T
        kilo[myhost-misc1]: 1024
        YLegend[myhost-misc1]: bytes
        LegendI[myhost-misc1]: Disk Used:
        LegendO[myhost-misc1]: Free Disk:
        Legend1[myhost-misc1]: Disk usage, in Bytes
        Legend2[myhost-misc1]: Free Disk Space, in Bytes
        Options[myhost-misc1]: gauge, nopercent, growright
        Timezone[myhost-misc1]: Bangkok

        ทดสอบสร้างภาพต้นแบบด้วยคำสั่ง
        env LANG=C /usr/bin/mrtg /etc/mrtg/myhost-diskfree-misc1.cfg
        ปรับปรุงแฟ้ม index.html ด้วยคำสั่ง
        indexmaker --column=2 --output=/var/www/mrtg/myhost/index.html /etc/mrtg/myhost-cpu.cfg /etc/mrtg/myhost-cpu-io.cfg /etc/mrtg/myhost-speed-eth0.cfg /etc/mrtg/myhost-tcpestab.cfg /etc/mrtg/myhost-memory.cfg /etc/mrtg/myhost-diskfree-misc1.cfg
      • สร้างแฟ้มเลียนแบบข้อ 1 และ 2 สำหรับโฟลเดอร์ที่เหลือ
      • แก้ไขแฟ้ม /etc/mrtg/mymrtg.sh เพิ่มข้อความ  env LANG=C /usr/bin/mrtg /etc/mrtg/myhost-diskfree-misc1.cfg ต่อท้ายไฟล์และเพิ่มทุกไฟล์ของทุกโฟลเดอร์
      • สำหรับโฟลเดอร์ /u03 ให้สร้างแฟ้ม /etc/mrtg/get-diskfree-u03.sh มีข้อความว่า
        #!/bin/bash
        used=$(df -m /u03|grep u03|awk '{ print $3 }')
        free=$(df -m /u03|grep u03|awk '{ print $4 }')
        TEMP=$(uptime|grep -o "load average.*"|awk '{print $3}'|cut -d',' -f 1)
        LOAD=$(echo "${TEMP:-0} * 100"|bc|cut -d'.' -f 1)
        TIME=$(uptime)
        echo "${used}"
        echo "${free}"
        echo "$TIME"
        hostname
        nof=$(ls -d1 /u03/app/oracle/fast_recovery_area/REGIST/archivelog/* |wc -l)
        max=3if [ "${nof}" == "${max}" ]
        then
                nod=$(expr ${max} - 1)
                f2d=$(ls -d1 /u03/app/oracle/fast_recovery_area/REGIST/archivelog/*|head -${nod})
                rm -rf ${f2d}
                su - oracle -c "/bin/sh /home/oracle/reclaim.sh"
        fi
        สร้างแฟ้ม /home/oracle/reclaim.sh มีข้อความว่า
        rman target / <<EOF
        crosscheck archivelog all;
        delete noprompt expired archivelog all;
        quit
        EOF
        สร้างแฟ้ม /etc/mrtg/myhost-diskfree-u03.cfg มีข้อความว่า
        WorkDir: /var/www/mrtg/myhost
        Target[myhost-u03]:`/etc/mrtg/get-diskfree-u03.sh`
        MaxBytes[myhost-u03]: 20000000000
        Title[myhost-u03]: Free disk space and disk Used of /u03
        PageTop[myhost-u03]: Free disk space and disk Used of /u03
        ShortLegend[myhost-u03]: bytes
        kMG[myhost-u03]: M,G
        kilo[myhost-u03]: 1024
        YLegend[myhost-u03]: bytes
        LegendI[myhost-u03]: Disk Used:
        LegendO[myhost-u03]: Free Disk:
        Legend1[myhost-u03]: Disk usage, in Bytes
        Legend2[myhost-u03]: Free Disk Space, in Bytes
        Options[myhost-u03]: gauge, nopercent, growrightทดสอบสร้างภาพต้นแบบด้วยคำสั่ง
        env LANG=C /usr/bin/mrtg /etc/mrtg/myhost-diskfree-u03.cfg
        อย่าลืมปรับปรุงแฟ้ม index.html ด้วย
    • เฝ้าระวังขนาดของ Tablespace SYSTEM และ USERS
      • สร้างแฟ้ม /etc/mrtg/get-tablespace-system.sh มีข้อความว่า
        #!/bin/bash
        used=$(su - oracle -c "sh /home/oracle/monitor/tablespacesize.sh"|grep SYSTEM|awk '{ print $2 }'|sed -e 's/,//g')
        used=$(expr ${used} \* 1024)
        free=$(su - oracle -c "sh /home/oracle/monitor/tablespacesize.sh"|grep SYSTEM|awk '{ print $3 }'|sed -e 's/,//g')
        free=$(expr ${free} \* 1024)
        TIME=$(uptime)
        echo "${used}"
        echo "${free}"
        echo "$TIME"
        hostname

        สร้างแฟ้ม /home/oracle/monitor/tablespacesize.sh มีข้อความว่า
        #!/bin/bash
        sqlplus / as sysdba << EOF
        col "Tablespace" for a22
        col "Used MB" for 99,999,999
        col "Free MB" for 99,999,999
        col "Total MB" for 99,999,999
        select df.tablespace_name "Tablespace",
        totalusedspace "Used MB",
        (df.totalspace - tu.totalusedspace) "Free MB",
        df.totalspace "Total MB",
        round(100 * ( (df.totalspace - tu.totalusedspace)/ df.totalspace))
        "Pct. Free"
        from
        (select tablespace_name,
        round(sum(bytes) / 1048576) TotalSpace
        from dba_data_files
        group by tablespace_name) df,
        (select round(sum(bytes)/(1024*1024)) totalusedspace, tablespace_name
        from dba_segments
        group by tablespace_name) tu
        where df.tablespace_name = tu.tablespace_name ;
        quit
        EOF

        สร้างแฟ้ม /etc/mrtg/myhost-tablespace-system.cfg
        WorkDir: /var/www/mrtg/myhost
        Target[myhost-system]:`/etc/mrtg/get-tablespace-system.sh`
        MaxBytes[myhost-system]: 20000000000
        Title[myhost-system]: Tablespace SYSTEM disk usage
        PageTop[myhost-system]: Tablespace SYSTEM Disk Usage
        ShortLegend[myhost-system]: bytes
        kMG[myhost-system]: k,M,G
        kilo[myhost-system]: 1024
        YLegend[myhost-system]: bytes
        LegendI[myhost-system]: Disk Used:
        LegendO[myhost-system]: Free Disk:
        Legend1[myhost-system]: Disk usage, in Bytes
        Legend2[myhost-system]: Free Disk Space, in Bytes
        Options[myhost-system]: gauge, nopercent, growrightทดสอบสร้างภาพต้นแบบด้วยคำสั่ง
        env LANG=C /usr/bin/mrtg /etc/mrtg/myhost-tablespace-system.cfgอย่าลืมปรับปรุง index.html ด้วย
      • ทำแบบเดียวกันกับ tablespace users
    • จบขอให้สนุก
  • มาใช้งาน letsencrypt กันเถอะ

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

    เอาล่ะ ถ้าจะว่ากันตามตรงแล้ว งานที่ต้องเพิ่มขึ้นมาสำหรับการที่จะทำให้ เว็บเซิร์ฟเวอร์สามารถใช้ https ได้ ถ้าทำให้มันใช้ http ได้แล้ว โดยทั่วไปก็ไม่ได้ยุ่งยากมากขึ้นเท่าไหร่ ขึ้นอยู่กับระบบปฏิบัติการที่เลือกใช้ ขึ้นอยู่กับตัวเว็บเซิร์ฟเวอร์ที่เลือกใช้ ขึ้นอยู่กับเซอร์ติฟิเคท (certificate) ที่ใช้ด้วย แต่ว่ากันโดยทั่วไป ระบบที่มีผู้ใช้งานเยอะ ตัวติดตั้งซอฟต์แวร์ของระบบปฏิบัติการ ก็มักจะจัดเตรียมวิธีการตรงนี้ไว้ให้แล้ว เหลือแค่การเรียกใช้งานเพิ่มแค่ไม่กี่คำสั่ง ก็สามารถใช้งานได้เลย
    ขอยกตัวอย่างเลยก็แล้วกัน สำหรับระบบปฏิบัติการเดเบียนลินุกซ์ (Debian Linux) รุ่น เจสซี่ (jessie) และ ใช้งาน apache เวอร์ชัน 2 เป็นเว็บเซิร์ฟเวอร์

    วิธีการติดตั้งตัวเว็บเซิร์ฟเวอร์ก็คือ

    $ sudo apt-get install apache2

    เพียงเท่านี้ เราก็สามารถใช้งานเว็บเซิร์ฟเวอร์ สำหรับให้บริการแบบสแตติกไฟล์ และสามารถใช้สคริปต์แบบ CGI ได้แล้ว
    แล้วถ้าต้องการให้มันรองรับแบบไดนามิก โดยใช้ภาษา php ได้ด้วยล่ะ? ก็ไม่ได้ยากอะไร ก็เพียงเพิ่มโมดูลของ php เข้าไป โดยใช้คำสั่ง

    $ sudo apt-get install libapache2-mod-php5

    ตัวโปรแกรมสำหรับติดตั้ง (apt-get) ก็จะตรวจสอบ แพกเกจที่จำเป็นต้องใช้และยังไม่ได้ติิดตั้งเอาไว้ เช่น php5 แล้วก็ติดตั้งแพกเกจเหล่านั้นให้ด้วยเลยโดยอัตโนมัติ หลังจากนั้นเราก็สามารถสร้าง index.php ในไดเรคตอรี่ /var/www/html/ แล้วก็เขียนโปรแกรมภาษา php ให้บริการบนเว็บได้เลย

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

    $ sudo a2enmod ssl
    $ sudo a2ensite default-ssl

    และสั่ง restart ตัวเว็บเซิร์ฟเวอร์โดยใช้คำสั่ง

    $ sudo systemctl restart apache2

    เท่านี้ ก็จะสามารถใช้งาน https โปรโตคอลเพิ่มเติมขึ้นมาจากเดิม ที่ใช้งานได้เฉพาะ http โปรโตคอล

    แต่ … มันไม่ได้จบง่ายๆแค่นั้นน่ะสิ ถึงแม้ว่าการให้บริการจะโดยใช้ https โปรโตคอลจะมีการเข้ารหัสข้อมูลที่มีการรับส่งระหว่างตัวเบราเซอร์กับตัวเซิร์ฟเวอร์ แต่ เซอร์ติฟิเคท (certificate) สำหรับกุญแจที่ใช้ในการเข้ารหัสข้อมูลนั้น จะเป็นแบบที่เรียกว่า self-signed certificate ซึ่งตัวเบราเซอร์โดยทั่วไปจะ ไม่เชื่อถือ (un trusted) ว่าเป็นเซอร์ติฟิเคท ที่ออกให้กับเว็บไซท์ ที่ระบุว่าเป็นโดเมนนั้นๆจริง

    ในการใช้งานเว็บไซท์ที่ตัวกุญแจเข้ารหัสใช้ self-signed certificate ตัวเบราเซอร์ก็จะ “เตือน”, และสร้างความยุ่งยากในการใช้งานให้กับ ผู้ใช้ที่ต้องการเข้าใช้งานเว็บไซท์นั้นๆ

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

    แต่นั่น อาจจะเป็นปัญหาในเรื่องของความน่าเชื่อถือ ถ้าเว็บไซท์ดังกล่าว เปิดให้บริการให้กับบุคคลภายนอกหน่วยงานด้วย

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

    มันเป็นสิ่งที่ไม่ดี ในทางหนึ่ง มันเป็นการฝึกให้ผู้ใช้งานเว็บไซต์ ยอมรับ ในความไม่ปลอดภัยที่อาจจะมี และ นำไปใช้งานกับเว็บไซท์อื่นๆด้วย

    ทางแก้ล่ะ ก็ไม่ได้เป็นเรื่องยุ่งยาก “มาก” แต่อย่างใด ก็แค่หาเซอร์ติฟิเคทที่ยอมรับโดยตัวเบราเซอร์มาใช้งานแค่นั้นเอง

    อย่างไร? … ก็ … จ่ายตังค์ ซื้อ … 🙂

    นั่นอาจจะทำให้เป็นเรื่องยุ่งยาก “มาก” ขึ้นมาทันทีสำหรับ หลายๆหน่วยงาน (ฮา)

    สำหรับหน่วยงานภายในมหาวิทยาลัยสงขลานครินทร์ อาจจะมีอีกหนึ่งทางเลือก นั่นคือว่า ถ้าเว็บไซท์ที่ผู้ดูแล มีโดเมนเป็น .psu.ac.th และไม่ได้เป็นโดเมนย่อยของ .psu.ac.th อีกที ตัวอย่างเช่น เว็บไซท์ www.psu.ac.th ถือว่าอยู่ในโดเมน .psu.ac.th แต่เว็บไซท์ www.coe.psu.ac.th จะอยู่ในโดเมนย่อย .coe ของ โดเมน .psu.ac.th อีกทีนึง

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

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

    ก็ … จ่ายตังค์ซื้อสิ … เฮ่ย ไม่ใช่!
    งั้น … ใช้ self-signed certificate ต่อ … เฮ้ย! … แล้วจะเขียนมาหาพระแสงของ้าว อะไร …

    โอเค อีกทางเลือกนึง ก็ตามที่เขียนไว้ในหัวข้อบทความน่ะแหละครับ มันมีทางเลือกที่เราจะใช้เซอร์ติฟิเคทที่รองรับโดยเบราเซอร์ทั่วไป และ ไม่ต้องจ่ายตังค์ นั่นคือใช้บริการของ letsencrypt ซึ่ง … ยังมีเรื่องที่ต้องพูดถึงกันอีกยาวพอสมควร และ โดยความขึ้เกียจของผู้เขียน ถ้าจะรอให้เขียนเสร็จเป็นบทความเดียวแล้วค่อยตีพิมพ์เลย ก็เดาได้ว่า คงจะไม่เสร็จแหละ สำหรับใครๆที่สนใจจะอ่านก่อนว่าขั้นตอนที่จะเอามาใช้งานทำได้อย่างไรบ้าง ก็เริ่มต้นจาก ที่นี่ https://letsencrypt.org/getting-started/ ได้ครับ

    ผมขอจบบทความนี้ ไว้แค่นี้ก่อน แล้วค่อยมาต่อ ภาค 2 (หวังว่า) ในเวลาอีกไม่นาน 🙂

  • file checksum integrity verifier

    Microsoft มี file checksum integrity verifier เป็น command line สามารถดาวน์โหลดมาใช้เพื่อตรวจสอบ file.iso ที่ดาวน์โหลดมาว่ามี md5sum ตรงกับที่หน้าเว็บไซต์แจ้งไว้หรือไม่ เพื่อจะได้ไม่หยิบเอา file.iso ที่อาจโดนใส่โปรแกรมไว้เนื่องจากเว็บไซต์ที่วางไฟล์ไว้อาจโดยแฮก ดาวน์โหลดได้ที่นี่ https://www.microsoft.com/en-us/download

    และค้นด้วยคำว่า file checksum integrity verifier

    fciv-website

    แตกไฟล์ออกมาไว้ใน Folder ที่ต้องการ เช่น Downloads

    นำมาใช้โดยเปิด Command Prompt และพิมพ์คำสั่ง fciv.exe file.iso ดังตัวอย่าง

    fciv-example