Month: May 2022

  • กรณีศึกษา การสำรองข้อมูล Neo4j Graph Database

    สวัสดีครับ

    บทความนี้เป็นกรณีศึกษาเกี่ยวกับการสำรองข้อมูล Neo4j Graph Database เรื่องมันมีอยู่ว่า สำนักนวัตกรรมดิจิทัลและระบบอัจฉริยะ หรือชื่อเดิมคือ ศูนย์คอมพิวเตอร์ ได้พัฒนาระบบเอกสารอิเล็คทรอนิกส์ เวอร์ชั่นใหม่ ซึ่งได้เปลี่ยนเทคโนโลยีในการเก็บข้อมูลมาใช้ Neo4j Graph Database แทนของเดิมที่ใช้ Microsoft SQL Server จึงต้องมีการวางแผนความเสี่ยงในเรื่องของการสำรองข้อมูล คราวนี้ตัวผมเองไม่ได้มีความเชี่ยวชาญหรือรู้จักกับ Neo4j Graph Database มากเท่าไหร่ แต่น้องที่สำนักนวัตกรรมที่เป็นผู้พัฒนาระบบและเรียนรู้การใช้งานก็ได้ไปศึกษา ทดสอบวิธีการส่งออกและนำเข้าข้อมูลจนมีความรู้ ความเข้าใจ ก็ได้มาถ่ายทอดต่อ ส่วนตัวผมเองก็นำวิธีการนี้ไปบวกกับความรู้เรื่อง Batch Script + PowerShell เล็กน้อย ทำเป็นระบบสำรองข้อมูลขึ้นมา ซึ่งขณะนี้ได้ทดสอบมาประมาณ 1 เดือนก็ยังสามารถทำงานได้ จึงจะขอมาเล่าสู่กันฟังในบทความนี้ครับ

    ข้อมูลที่ได้รับมาก็คือ

    1. Neo4j Graph Database ที่ใช้เป็นรุ่น Community ข้อดีคือ ไม่มีค่าใช้จ่ายในการใช้งาน แต่จะมีข้อจำกัดคือ ในการส่งออกและนำเข้าไฟล์ฐานข้อมูลนั้นจะไม่มีเครื่องมือให้ใช้งานมากมายจะต้องใช้คำสั่่งผ่านทาง Command Line

    2. ข้อจำกัดอีกอย่างคือ การส่งออกไฟล์นั้นจะทำในขณะ Neo4j ทำงานอยู่ไม่ได้ ต้องหยุดการทำงานก่อนเสร็จแล้วจึงทำการสตาร์ท Neo4่j ขึ้นมาทำงานใหม่

    นำข้อมูลที่ได้มาวางแผนการเขียน Script

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

    – เนื่องจากมีหลายขั้นตอนในการทำงานจีงใช้วิธีเขียนไฟล์ Script แยกการทำงานออกไป เช่น

    • Batch File ชื่อ neo4j-stop.bat เอาไว้หยุดการทำงาน Neo4j
    • Batch File ชื่อ neo4j-dump.bat เอาไว้ส่งออกไฟล์ฐานข้อมูล Neo4j ออกมา

    เมื่อได้รับข้อมูลและวางแผนการทำงานเรียบร้อยแล้ว จึงเริ่มต้นเขียน Script ตามลำดับขั้นตอนดังนี้

    1. สร้าง Batch File ชื่อ neo4j-stop.bat เอาไว้สำหรับหยุดการทำงานของ Neo4j จะมีคำสั่งที่เขียน ดังนี้

    @echo off

    for /f %%a in (‘powershell -Command “Get-Date -format ‘HH:mm:ss’”‘) do set “TimeStart=%%a”echo === Start Backup Neo4j On %DATE% %TimeStart% === > log.txt

    net stop neo4j >> log.txt

    call neo4j-dump.bat

    อธิบายได้ดังนี้
    – เริ่มต้นจะมีการรับค่าวันและเวลาปัจจุบัน คือ %DATE% และ %TimeStart%
    – จากนั้นจึงเริ่มใช้คำสั่งหยุดการทำงานของ Neo4j
    – สังเกตว่าทุกคำสั่งจะมีการส่งออกไปเก็บที่ log.txt
    – เสร็จแล้วจะมีการเรียก Batch Script neo4j-dump.bat ให้ทำงานต่อ

    2. สร้าง Batch File ชื่อ neo4j-dump.bat เอาไว้สำหรับส่งออกไฟล์ Neo4j จะมีคำสั่งที่เขียน ดังนี้

    @echo off

    for /f %%a in (‘powershell -Command “Get-Date -format ‘HH:mm:ss’”‘) do set “TimeDumpStart=%%a”

    echo == Start Dump Database On %TimeDumpStart% == >> log.txt

    neo4j-admin dump –database=neo4j –to=C:\neo4j_dump\backup_%date:~10,4%%date:~4,2%%date:~7,2%.dump > logtmp.txt 2>> log.txt & call neo4j-start.bat

    อธิบายได้ดังนี้
    – จะมีคำสั่ง dump ฐานข้อมูล Neo4j ออกมาเก็บไว้ที่ C:\neo4j_dump ตั้งชื่อไฟล์ว่า backup ต่อด้วยวันที่สร้าง เช่น backup_20220531.dump
    – เสร็จแล้วจะมีการเรียก Batch Script neo4j-start.bat ให้ทำงานต่อ

    3. สร้าง Batch File ชื่อ neo4j-start.bat เอาไว้สำหรับสตาร์ทการทำงานของ Neo4j จะมีคำสั่งที่เขียน ดังนี้

    @echo off

    net start neo4j >> log.txt

    call backup-to-nas03.bat

    อธิบายได้ดังนี้
    – จะมีคำสั่งสตาร์ทการทำงานของ Neo4j
    – เสร็จแล้วจะมีการเรียก Batch Script backup-to-nas03.bat ให้ทำงานต่อ

    4. สร้าง Batch File ชื่อ backup-to-nas03.bat เอาไว้สำหรับส่งไฟล์สำรองข้อมูล Neo4j ไปเก็บยัง Nas Server Backup จะมีคำสั่งที่เขียน ดังนี้

    @echo off

    for /f %%a in (‘powershell -Command “Get-Date -format ‘HH:mm:ss’”‘) do set “TimeSendNas03Start=%%a”

    echo == Start Send Backup File to Nas03 On %TimeSendNas03Start% == >> log.txt

    net use z: \\nas03.psu.ac.th\backup2\docs /user:[user] [password] >> log.txt

    “C:\Program Files\7-Zip\7z.exe” a -tzip z:\docs_db_%date:~10,4%%date:~4,2%%date:~7,2%.zip C:\neo4j_dump\backup_%date:~10,4%%date:~4,2%%date:~7,2%.dump >> log.txt

    net use z: /delete /yes >> log.txt

    for /f %%a in (‘powershell -Command “Get-Date -format ‘HH:mm:ss’”‘) do set “TimeEnd=%%a”

    echo === Finish All Process Backup Neo4j On %DATE% %TimeEnd% === >> log.txt

    xcopy log.txt C:\admin-scripts\logs\log_%date:~10,4%%date:~4,2%%date:~7,2%.txt*

    Powershell.exe -executionPolicy ByPass -noexit -File C:\admin-scripts\sendmail.ps1

    อธิบายได้ดังนี้
    – จะมีคำสั่งสำหรับสร้าง Map Drive z: ที่ Mount มาจาก Nas Server Backup

       – /user:[user] [password] คือ parameter ที่เป็นการระบุชื่อผู้ใช้และรหัสผ่านที่มีสิทธิ์เข้าถึงพื้นที่ที่กำหนดไว้

    – จะใช้โปรแกรม 7zip ทำการบีบอัดไฟล์ backup ที่ได้สร้างขึ้นจากข้อที่ 2 ตั้งชื่อว่า docs_db ต่อด้วยวันที่สร้าง เช่น docs_db_20220531.zip ไฟล์ดังกล่าวจะไปสร้างที่ Nas Server Backup โดยตรง
    – เสร็จแล้วจะมีคำสั่ง Powershell เรียกไฟล์ sendmail.ps1 ให้ทำงานต่อ

    5. สร้างไฟล์ Powershell ชื่อ sendmail.ps1 เอาไว้สำหรับส่งเมลแจ้งไปยังผู้ดูแลพร้อมกับส่ง log.txt ไปกับอีเมลด้วยเพื่อให้สามารถตรวจสอบได้

    $DateTime = Get-Date -format ‘yyyy-MM-dd’
    $From = “docsdb@psu.ac.th”
    $To = “somchai.wa@psu.ac.th”
    $Copy = “somchai.wanathanasin@gmail.com”
    $Attachment = “C:\admin-scripts\log.txt”
    $Subject = “Server DocsDB Backup Successfully on $DateTime”
    $Body = “Dear Admin,

    The System send log file backup docsdb.Please see details in attached file.

    Thank you”
    $SMTPServer = “smtp.psu.ac.th”
    $SMTPPort = “25”

    Send-MailMessage -From $From -to $To -Cc $Copy -Subject $Subject -Body $Body -SmtpServer $SMTPServer -Port $SMTPPort -Attachments $Attachment

    stop-process -id $PID -Force

    อธิบายได้ดังนี้
    – ใน Powershell จะมีคำสั่งที่ใช้ในการส่งเมลคือ Send-MailMessage ซึ่งจะประกอบไปด้วยพารามิเตอร์หลายค่าที่จะต้องระบุให้ถูกต้อง โดยด้านบนจะมีการสร้างตัวแปรต่าง ๆ เพื่อเก็บค่าไว้ นำไปใช้ในการส่งอีเมล
    – ข้อสังเกตคือ ด้านล่างสุดจะมีคำสั่ง stop-process -id $PID -Force คำสั่งนี้เป็นการสั่งให้ Powershell หยุดทำงานคือปิดตัวลงไปทันทีที่ทำงานเสร็จ เพราะเคยพบปัญหาว่าเมื่อมีการรัน Script นี้แล้ว Process Powershell จะยังคงเปิดอยู่ ทำให้ Script ทำงานผิดพลาด

    6. จะสร้าง Batch File Script ที่ชื่อ backup-docsdb.bat เอาไว้สำหรับระบุพื้นที่เก็บ Script ไฟล์ทั้งหมดและทำการเรียกไฟล์ neo4j-stop.bat ให้ทำงานเป็นลำดับแรก จะมีคำสั่งที่เขียน ดังนี้

    @echo off

    cd C:\admin-scripts

    call neo4j-stop.bat

    อธิบายได้ดังนี้
    – Script ที่เขียนทั้งหมดจะทำงานอยู่ที่ C:\admin-scripts รวมทั้ง log ไฟล์ก็จะเก็บอยู่ที่นี้

    7. เพื่อให้กระบวนการสำรองข้อมูลทำงานอัตโนมัติทุกคืนตอนเวลา 02:00 น. โดยจะต้องไปสร้าง Task Schedule ใน Windows แล้วเรียกไฟล์ backup-docsdb.bat ให้ทำงานอัตโนมัติ

    8. ตัวอย่างเมลที่ส่งมาแจ้งผู้ดูแล มีดังนี้

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

    ขอบคุณครับ

  • การสร้าง Visual Studio Project Template

    ความสามารถอย่างหนึ่งที่น่าสนใจของ Visual Studio คือ การนำ Project ที่เราสร้างขึ้นมาใช้เป็นตัวตั้งต้นหรือ Project Template เพื่อสร้าง Project ต่อๆ ไปได้ ทำให้ Project ใหม่ที่สร้างขึ้น มีฟังกชันพื้นฐานพร้อมใช้งานแล้ว ตามที่กำหนดไว้ใน Template เช่น มีระบบเมนู มีตัวอย่างหน้าจอพร้อมการเชื่อมต่อฐานข้อมูล มีระบบ Authentication เป็นต้น ฟังกชันพื้นฐานต่าง ๆ เหล่านี้ จะทำให้เราสามารถเริ่ม Project ใหม่ได้อย่างรวดเร็ว

    วิธีการสร้าง Project Template ด้วย Visual Studio 2022 หลังจากที่เราเตรียม Project ตั้งต้นไว้แล้ว ดังนี้

    1. ไปที่เมนู Project -> Export Template

    2. Export Template Wizard เลือก Project template จากนั้นคลิก Next

    3. ระบุ Template name, Template description, Icon Image จากนั้นคลิก Finish

    เท่านี้ก็จะทำให้ได้ไฟล์ Project Template ไปใช้งานแล้ว โดย Visual Studio จะทำการนำเข้า Project Template ที่สร้างขึ้นมาให้โดยอัตโนมัติ ทำให้เราสามารถใช้สร้าง Project ใหม่ได้เลย

    วิธีการสร้าง Project ใหม่ จาก DIISBlazorTemplate

    1. เปิด Visual Studio 2022 ขึ้นมา แล้วไปที่เมนู File -> New -> Project
    2. จะปรากฏหน้าจอ Create a new project ให้เราพิมพ์ชื่อ DIIS ในช่องค้นหา ก็จะเจอผลลัพธ์ดังรูป ให้เลือก DIISBlazorTemplate และคลิกปุ่ม Next

    3. หน้าจอ Configure your new project ให้ระบุ Project name, Location จากนั้นคลิก Create

    4. ผลลัพธ์ที่ได้จะเป็น Project ใหม่ ดังรูป

    5. ทดลองรัน Project จะพบว่า เราสามารถใช้ฟังกชันพื้นฐานต่าง ๆ ได้ตามที่กำหนดไว้ใน Project ตั้งต้น เช่น การ Authentication, หน้าจอแสดงข้อมูลที่ได้จากการ Query จากฐานข้อมูล เป็นต้น

    หน้าจอเข้าสู่ระบบ
    หน้าจอตัวอย่างการแสดงผลข้อมูลจากฐานข้อมูล
  • สร้าง Dashboard ต้องคิดถึงอะไรบ้าง

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

    รูปแบบการวิเคราะห์ข้อมูลเบื้องต้น

    1.ต้องการแสดงความสัมพันธ์ (Relationship) เพื่อเชื่อมต่อสองข้อมูลตัวแปรที่สนใจ หรือมากกว่านั้น เช่น จังหวัดที่เกิดกับวิทยาเขตที่เรียน

    รูปแสดงตัวอย่างการวิเคราะห์ความสัมพันธ์ (Relationship)


    2.ต้องการเปรียบเทียบข้อมูล (Comparison) ใช้ Bar chart หรือ line chart เพื่อแสดงข้อมูลรับนักศึกษาในแต่ละปี

    รูปแสดงตัวอย่างการวิเคราะห์ข้อมูลแบบเปรียบเทียบ (Comparison)


    3.ต้องการแสดงการเปลี่ยนแปลงข้อมูลตามช่วงเวลา (Trend)

    รูปแสดงตัวอย่างการวิเคราะห์เปลี่ยนแปลงข้อมูลตามช่วงเวลา (Trend)


    4.ต้องการแสดงการจ่ายของข้อมูล (Distribution) โดยการเอาข้อมูลมาจัดกลุ่ม (Grouping) หรือเรียง (Ranking) แล้วนับจำนวนเพื่อดูการกระจายของข้อมูล
    เช่น อายุงานบุคลากรแยกทุก 10 ปีของการทำงาน เพื่อดูว่าบุคลากรส่วนใหญ่อายุงานอยู่ที่กี่ปี เป็นต้น

    รูปแสดงตัวอย่างการวิเคราะห์การจ่ายของข้อมูล (Distribution)

    สิ่งที่ต้องเอาใจใส่

    1. เลือก Data Visualization ให้ตรงกับจุดประสงค์ของการนำเสนอ และผู้ใช้งานต้องเข้าใจ Visualization ที่ใช้ด้วยเป็นสำคัญ
    2. โทนสีที่เลือกใช้งานควรจะไม่มากเกินไป และควรจะเป็นโทนเดียวกัน (ลองค้นหาตารางโทนสีใน Google ดูครับ)
    3. ควรจะคำนึงถึง ขนาด สี ที่มีความสัมพันธ์กัน เช่น ใน 1 Dashboard ใช้สีชมพูแทนเพศหญิง ก็ควรจะใช้สีชมพูในแต่ละ Visualization เพื่อแทนเพศหญิงเหมือนกัน
    4. ทำให้ผู้ใช้งานมองติดตามข้อมูลได้ง่ายและเข้าใจ
    5. การมีเส้นนำสายตาก็จะมีผลต่อการแบ่งกลุ่มข้อมูลโดยอัตโนมัติสำหรับผู้ใช้งาน
    6. (five-second rule) กฏ 5 วินาที Dashboard ควรจะตอบโจทย์ที่ได้รับมาโดยการมองเพียงแค่ 5 วินาที ซึ่งต้องได้คำตอบหลักแล้ว ส่วนถ้าต้องการหาสาเหตุหรือต้องการข้อมูลเชิงลึกก็จะเข้าส่วน
    7. ออกแบบแบบปรามิดคว่ำ คือส่วนบน เป็น indicators ส่วนที่ 2 เป็น Trends ส่วนที่ 3 เป็น รายละเอียด
    8. ใน 1 Dashboard ควรมี Visualization ประมาณ 5-9 Visualization (ตามข้อมูลการศึกษาการรับรู้ของสมองมนุษย์จะเข้าใจภาพได้ประมาณ 7 +- 2)
    9. จำไว้ว่าข้อมูลสมบูรณ์ครบถ้วน ไม่สู่ตอบโจทย์ที่ผู้ใช้ต้องการนะครับ เพราะเราต้องการตอบสนองผู้ใช้งานไม่ใช่ตอบสนองข้อมูลหรือตัวผู้จัดทำ Dashboard

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

    อ้างอิง :

    https://www.sisense.com/blog/4-design-principles-creating-better-dashboards/
    https://realmonkey.co/web-design/principles-of-effective-dashboard-design/
    https://www.netsolutions.com/insights/good-dashboard-design-principles/
    https://wandr.studio/blog/dashboard-design-principles/
    https://medium.com/madt-and-bads-nida/4-principles-of-dashboard-design-%E0%B8%AB%E0%B8%B1%E0%B8%A7%E0%B9%83%E0%B8%88-4-%E0%B8%82%E0%B9%89%E0%B8%AD%E0%B8%AA%E0%B8%B3%E0%B8%AB%E0%B8%A3%E0%B8%B1%E0%B8%9A%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%AD%E0%B8%AD%E0%B8%81%E0%B9%81%E0%B8%9A%E0%B8%9A-dashboard-957b79e0179a

  • การสร้างรหัสผ่านให้ไฟล์ PDF

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

    1. เข้าเว็บ https://www.ilovepdf.com/protect-pdf


    2. คลิก Select PDF

    3. เลือกไฟล์ PDF ที่ต้องการสร้างรหัสผ่าน

    4. ระบุรหัสผ่านให้เหมือนกันทั้ง 2 ช่อง จากนั้นกดปุ่ม Protect PDF

    5. ระบบจะสร้างรหัสผ่าน ให้กดปุ่ม Download protected PDFs เพื่อ Download เอกสารไปใช้งาน

    6. เมื่อ Download เรียบร้อยแล้ว ทดลองเปิดไฟล์ PDF จะพบว่า ไฟล์ของเราปรากฏให้ใส่รหัสผ่านก่อน

    7. เมื่อใส่รหัสผ่านที่เราได้ตั้งค่าไว้ ก็จะสามารถเปิดไฟล์ PDF ได้

    ลองนำไปประยุกต์ใช้กันดูนะคะ ถ้าไม่อยากให้ใคร ๆ ก็เปิดไฟล์ PDF ของคุณได้ วิธีการตั้งค่ารหัสผ่านไว้ก็เป็นอีกทางเลือกที่น่าสนใจค่ะ ^^

  • การสร้าง GenericList Component (Blazor) ตัวช่วยแสดงผลรายการข้อมูล

    การสร้าง User Interface สำหรับแสดงผลลัพธ์จากการ Query ข้อมูลในฐานข้อมูลนั้น โดยปกติ UI จะต้องสามารถกำหนดการแสดงผลเพื่อตอบสนองต่อเหตุการณ์ที่เกิดขึ้น 3 สถานะได้ คือ

    1. ระหว่างที่กำลังรอผลการ Query ข้อมูล UI ควรแสดงให้เห็นว่ากำลังประมวลผล โดยแสดงเป็นข้อความหรือรูปภาพ Loading ก็ได้
    2. กรณี Query แล้วไม่พบข้อมูล ความแสดงผลให้ทราบว่าไม่พบข้อมูล
    3. กรณี Query แล้วพบข้อมูล จะนำข้อมูลมาแสดงผลด้วย Table หรือ List หรือ อื่นๆ ตามความเหมาะสม

    ตัวอย่างเช่น ต้องการสร้างหน้าจอแสดงผลรายการข้อมูลสินค้าโดย Query ข้อมูลเก็บไว้ในตัวแปรชื่อ ProductList จะมีค่าในสถานะต่าง ๆ ดังนี้

    1. ระหว่างที่กำลังรอผลการ Query จะมี ProductList == null
    2. กรณี Query แล้วไม่พบข้อมูล ค่า ProductList.Count == 0
    3. กรณี Query แล้วพบข้อมูล ค่า ProductList.Count > 0

    จะเป็นว่าเราสามารถสร้าง Component พื้นฐานไว้ใช้งาน (Reuse) เพื่อตอบสนองต่อสถานะทั้ง 3 ได้ ในที่นี่จะตั้งชื่อว่า GenericList Component (GenericList.razor) มีโค้ดดังนี้

    วิธีการใช้งาน GenericList Component ทำได้โดยการกำหนด Parameter ชื่อ List และ WholeListTemplate ก็จะสามารถแสดงผลข้อมูลได้ตามต้องการ

    รูปที่  1 ระหว่างที่กำลังรอผลการ Query
    รูปที่  2 กรณี Query แล้วไม่พบข้อมูล
    รูปที่  3 กรณี Query แล้วพบข้อมูล
  • เล่าเรื่องเกี่ยวกับ cloning Windows (Windows 11)

    ผมได้ทำ google form สอบถามเกี่ยวกับการ cloning ต้นฉบับ Windows เพื่อนำไป cloned ลงยังเครื่องอื่น ๆ ในห้องปฏิบัติการหรือสำนักงาน

    ได้ข้อสรุปและคำถามมาดังนี้

    แผนภูมิ ข้อมูลจากแบบสอบถามใช้ซอฟต์แวร์ใดในการ cloning Windows

    มีผู้เข้ามาตอบจำนวน 14 คน ได้ผลสรุปตามรูปภาพ
    o มีผู้ที่ตอบว่าใช้ PSU12-Sritrang (opensource.psu.ac.th) จำนวน 7 คน
    o มีผู้ที่ตอบว่าใช้ โปรแกรมอื่น จำนวน 4 คน
    o มีผู้ที่ตอบว่าใช้ FogProject (fogproject.org) จำนวน 2 คน
    o มีผู้ที่ตอบว่าใช้ PSU12-Fog (opensource.psu.ac.th) จำนวน 1 คน

    โปรแกรมอื่นที่เลือกใช้ในการ cloning Windows มีดังนี้
    o Clonezilla
    o Aomei backupper
    o Acronis True Image ทำทีละเครื่อง
    o Acronis True Image 2014 premium (ใช้ในการ clone เครื่องในสำนักงาน)
    o Norton Ghost with Windows 7 PE ใช้งานร่วมกับ PSU12-Sritrang
    o Norton ghost

    ความคิดเห็นอื่น ๆ ที่เกี่ยวกับการเตรียม Windows ห้องคอมพิวเตอร์ มีดังนี้
    1.การติดตั้ง Windows11 และการปรับแต่งให้เหมาะสมสำหรับใช้ในห้องปฎิบัติการคอมพิวเตอร์
    2.ทั้ง PSU12-Sritrang และ PSU12-fog ใช้โคลน windows 10 ได้ดี และทั้งการโคลนและสูตรการจัดการให้บริการห้องแลปด้วย PSU 12 Sritrang สามารถใช้บริหารจัดการห้องแลปคอมที่ใช้ windows 10 ได้ดีครับ โดยเฉพาะเรื่องการจัดการเลือกบูต OS ได้ แต่การเลือก Boot OS ด้วย windows 11 จากการทดลองไม่สามารถทำได้แล้วเพราะมีการจัดการ Partition ในรูปแบบใหม่
    3.อยากให้เปิดการอบรมPSU12-Sritrang(opensource.psu.ac.th)อีกครั้งครับเพราะทำกับเครื่องจริงแล้วมีปัญหาหลายอย่าง
    4.ปัญหาการ Cloning Windows กับ SSD ssd nvme m.2
    5.ปัญหาเกี่ยวกับต้องใส่ cd key เสมอเวลา cloning windows ใหม่
    6.อยากทราบว่ามีท่านใดใช้โปรแกรมใดในการ clone harddisk ที่เป็น ssd เพราะ software รุ่นเก่าจะมองไม่เห็น เท่าที่ดู พาทของ /dev/sda ก้จะเปลี่ยน
    7.PSU12-Sritrang Support Windows11 มั้ยคับ

    ผมจะขอให้ข้อมูลเท่าที่พอจะมีความรู้นะครับ

    O เกี่ยวกับ PSU12-Sritrang (opensource.psu.ac.th)

    เนื่องจากผมทำชุดติดตั้งสำหรับ cloning Windows คือ PSU12-Sritrang (opensource.psu.ac.th) นั่นคือ ต้องมี server 1 ตัว ผมเลือกใช้ ubuntu server ทดสอบล่าสุดใช้ได้เพียง ubuntu server 20.04 เมื่อทดสอบกับ ubuntu server 22.04 จะเริ่มมีปัญหาในขณะ Boot client จึงยังคงไว้ที่รุ่นนี้ มาพูดถึงการ cloning Windows นั้น ชุดติดตั้งนี้รองรับเพียงแค่ Windows ที่สามารถจัดการ partition แบบ MBR ได้เท่านั้น เมื่อดู Windows 11 แล้วจะพบว่า ทำไม่ได้ แล้ว หากว่าเครื่อง clients ที่ลง Windows ยังสามารถทำ partition แบบ MBR ได้ ไม่ว่าจะเป็น disk ชนิด SATA หรือ SSD nvme M.2 ชุดติดตั้งนี้รองรับครับ ตั้งแต่รุ่น sysresccd-5.1.2-16.04-dvd-psu12-sritrang-server-autopartition-offline-2019-12-13.iso ครับ ปัจจุบันล่าสุดคือ sysresccd-5.1.2-20.04-dvd-psu12-sritrang-server-autopartition-offline-2022-03-18.iso

    หากใช้ PSU12-Sritrang รุ่นใด ๆ แล้วทดสอบกับคำสั่งดังนี้
    grep SSD /var/www/cloning/backup.sh
    ไม่พบข้อความ
    use for M.2 SSD

    ให้ดาวน์โหลดชุดติดตั้งได้ ซึ่งจะแบ็กอัพไฟล์เดิมไว้ให้ก่อนเขียนทับ backup.sh, welcome.sh และ multicast.sh
    wget https://ftp.psu.ac.th/pub/psu12-sritrang/download/diskselect/installdiskselect.sh
    bash installdiskselect.sh

    O เกี่ยวกับ PSU12-Fog (opensource.psu.ac.th)

    ชุดติดตั้งนี้ ผมเลือกใช้ FogProject 1.5.9 มาใช้เป็นตัว cloning Windows ซึ่งจะเป็นแบบ Web-base GUI โดยผมปรับปรุง script เดิมของ PSU12-Sritrang ตัดส่วนที่เป็น cloning ทิ้งไป คงเหลือส่วนที่เป็น dhcp server เอาไว้ ซึ่งผมขอแนะนำให้ใช้ชุดนี้เพราะว่า รองรับ M.2 SSD และรองรับ partition หลากหลายชนิด ผมทดสอบแล้วกับ Windows 11 สามารถทำต้นฉบับและ cloning ได้ครับ

    ตัวอย่างการตั้งค่า BIOS เครื่องที่ทดสอบ ลง Windows 11 ดังนี้
    Power
    Power On by Onboard LAN = Enabled
    BIOS Setup Utility
    Secure Boot = Disabled
    Boot Options
    CSM = Disabled
    Launch PXE OPROM = UEFI
    Launch Storage OPROM = UEFI
    Launch Video OPROM = UEFI
    Boot Filter = UEFI
    Boot Priority Order
    1st Boot Device = [UEFI: PXE IPv4…]
    2nd Boot Device = [Windows Boot Manager]

    และที่โปรแกรม Web-base GUI FogProject
    เมนู Image ให้ตั้ง Host EFI Exit Type แบบ REFIND_EFI

    O เกี่ยวกับ FogProject (fogproject.org)

    FogProject รองรับ M.2 SSD และรองรับ partition หลากหลายชนิด ผมทดสอบแล้วกับ Windows 11 สามารถทำต้นฉบับและ cloning ได้ครับ แต่เท่าที่สำรวจดูที่เว็บไซต์ จะพบว่า เวอร์ชั่นล่าสุด ยังหยุดอยู่ที่ 1.5.9 ซึ่งรองรับ ubuntu 20.04 เท่านั้น หากนำไปติดตั้งใน ubuntu 22.04 ณ วันที่เขียนบทความนี้ ติดตั้งไม่สำเร็จ เพราะว่า FogProject จะมีการระบุ php เวอร์ชั่นที่ต่ำกว่า php8 ซึ่ง php8 เป็นค่า default ของ ubuntu 22.04 ครับ FogProject รองรับ M.2 SSD และรองรับ partition หลากหลายชนิด ผมทดสอบแล้วกับ Windows 11 สามารถทำต้นฉบับและ cloning ได้ครับ

    O ปัญหาเกี่ยวกับต้องใส่ cd key เสมอเวลา cloning windows ใหม่

    มีคำแนะนำว่า ให้ใช้แผ่นจาก Volume Licensing เพราะปกติมันจะใส่ key ที่เป็น KMS ไว้ให้แล้ว แค่ set ให้ถูกก็จะ activate เอง

    O การติดตั้ง Windows11 และการปรับแต่งให้เหมาะสมสำหรับใช้ในห้องปฎิบัติการคอมพิวเตอร์

    เรื่องนี้ เราไปคุยกันในเฟสบุ๊คกรุ๊ปนี้กันดีมั้ยครับ Smart computer lab (Cloning and computer management) ที่ https://www.facebook.com/groups/1916830435076306

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

  • Blazor Server Application : วิธีการ Export ข้อมูลเป็นไฟล์ XML

    แนะนำวิธีการ Export ข้อมูลเป็นไฟล์ XML

    วิธีการเขียน Code
    1) สร้าง Folder xml สำหรับเก็บไฟล์ xml ในกรณีนี้อยู่ใน (wwwroot/files/xml)

    2) สร้าง Razor Component ชื่อ ExportXML.razor ในกรณีนี้อยู่ใน (Pages/ExportXML.razor)
    3) จากนั้นเขียน Code ดังนี้

    4) ผลลัพธ์จากการ Export ข้อมูลเป็นไฟล์ XML

    4.1) กรอกข้อมูล และกดปุ่ม Export XML

    4.2) จะได้ไฟล์ person.xml

    4.3) เมื่อเปิดไฟล์ person.xml จะแสดงข้อมูล ดังนี้

  • Blazor Server Application : การสร้างรูปภาพลายเซ็นโดยวิธีการพิมพ์ข้อความ

    แนะนำวิธีการสร้างรูปภาพลายเซ็นโดยวิธีการพิมพ์ข้อความ

    วิธีการเตรียมฟอนต์
    1) เข้าเว็บไซต์ https://www.f0nt.com/release/worasait/
    2) ดาวน์โหลด ฟอนต์ Worasait (worasait.ttf)

    วิธีการเขียน Code
    1) ติดตั้ง NuGet ชื่อ System.Drawing.Common
    2) สร้าง Folder ชื่อ files สำหรับเก็บไฟล์ฟอนต์ ในกรณีนี้อยู่ใน (wwwroot/files/worasait.ttf)

    3) สร้าง Razor Component ชื่อ SignatureType.razor ในกรณีนี้อยู่ใน (Pages/SignatureType.razor)
    4) จากนั้นเขียน Code ดังนี้

    5) ผลลัพธ์จากการสร้างรูปภาพลายเซ็นโดยวิธีการพิมพ์ข้อความ

    หมายเหตุ: วิธีการเปลี่ยนสีภาพลายเซ็น
    1) graphics.DrawString(Txt, oFont, Brushes.Black, 0, 0);
    2) เปลี่ยนจาก Brushes.Black เป็นสีที่ต้องการ เช่น Brushes.Red เป็นต้น

  • มาลองสร้าง Website ด้วย Google Site แบบง่ายๆกันดีกว่า

    ใครจะไปคิดว่าการสร้าง Website จาก Google Site จะง่ายขนาดนี้ ถ้าอยากรู้ว่าต้องเริ่มยังไงมาดูกันเลย

    ขั้นตอนที่ 1. เริ่มจากไปที่ https://sites.google.com จะมี Template ให้เลือกใช้หรือ จะสร้างหน้า Website ขึ้นมาเองก็ได้นะ มาลองดูกันเลย

    ในตัวอย่างนี้ ได้เลือกใช้ Template ที่ชื่อว่า “โครงการ” มาสร้าง Website

    ขั้นตอนที่ 2. หลังจากที่เราได้โครงสร้างของ Website ของเรามาแล้ว เราต้องทำการตั้งชื่อ Website ของเราก่อน โดยสามารถเปลี่ยนชื่อได้จากรูปเอกสารมุมซ้ายบน

    นอกจากการเปลี่ยนชื่อ Website แล้วนั้น เรายังสามารถเปลี่ยนโลโก้ได้อีกด้วย

    แต่ข้อสำคัญของการจะเผยแพร่ / publish Website ของคุณนั้น ต้องมีหน้า Website 2 หน้าขึ้นไป

    ขั้นตอนที่ 3. หลังจากที่เราแก้ไขชื่อ และโลโก้ แล้วเรายังสามารถปรับแก้ไขเนื้อหาที่เราต้องการจะมานำเสนอ หรือเพิ่มลงบน Website ได้เองอีกด้วย โดยใช้เครื่องมือทางด้านขวามือที่ Google Site ได้มีไว้ให้

    ลากสิ่งที่ต้องการใช้มาวางในพื้นที่ที่ต้องการได้เลย

    ตัวอย่างการนำ “บล็อกเนื้อหา” มาวางบน Website

    ขั้นตอนที่ 4. หลังจากที่เราสร้างหน้า และใส่เนื้อหาที่ต้องการจะแสดงบน Website แล้ว เรายังสามารถสร้างหน้าเพิ่มเติมได้จากการเลือกเมนู “หน้าเว็บ” ทางด้านขวามือ

    แถบเมนูจะแสดงหน้า Website ทั้งหมดที่เรามีในตัว Website นี้ โดยการสร้างหน้าเว็บเพิ่มสามารถกดได้จาก ปุ่ม + ที่มุมด้านล่าง

    ความพิเศษของ Google Site คือ ตัวช่วยเหล่านี้ เราสามารถสร้างหน้าใหม่ได้ถ้าเกิดต้องการจะวางโครงหน้า เนื้อหน้าให้เหมือนหน้าอื่น โดยกดที่ “ทำซ้ำหน้าเว็บ” จากหน้าที่เราต้องการจะให้เป็นต้นแบบ

    ขั้นตอนที่ 5. การกำหนดแถบเมนู ต้องการจะให้แสดงด้านบน หรือต้องการให้แสดงด้านข้างสามารถจัดได้โดยการที่ กดที่รูปฟันเฟือง หรือการตั้งค่าดังรูป

    สามารถตั้งค่าได้ที่คำสั่ง “โหมด” ว่าต้องการจะให้อยู่ด้านบน หรือด้านข้าง นอกจากนั้นยังสามารถกำหนดสีแถบเมนูได้อีกด้วยนะ

    ตัวอย่างเมนูที่อยู่ข้างบน

    ตัวอย่างเมนูที่อยู่ด้านข้าง

    และในที่สุด เราก็มาถึงขั้นตอนสุดท้ายที่สำคัญที่สุดคือการเผยแพร่ Website เพียงแค่คุณ กด เผยแพร่/Publish หากคุณมี Domain เป็นของตัวเองสามารถนำมาใช้ได้เลย

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

    จบกันแล้วการสร้าง Website ไม่ได้อยากเหมือนที่คิดใช่ไหม ขอบคุณทุกคนที่เข้ามาอ่านนะคะ