แสดงข้อมูล Memory CPU Disk ด้วย C# EP.2

สำหรับ EP นี้เราก็มาถึงวิธีการดึงข้อมูลการใช้งาน CPU กัน เพื่อไม่ให้เป็นการเสียเวลา เรามาเริ่มกันเลย สำหรับการดึงข้อมูลนั้น เราก็สามารถใช้งาน object PerformanceCounter ได้เหมือนเดิม โดยจะต้องระบุ parameter ที่จำเป็นดังนี้ และเมื่อทดลองเรียกใช้งาน จะปรากฏผลดังภาพ จะเห็นว่าผลลัพธ์ออกมาเป็น 0 เนื่องจากค่าที่ได้ จะเป็นค่าที่เกิดจากการเปรียบเทียบกับค่าก่อนหน้า การเรียกใช้งานครั้งแรกจึงแสดงผลเป็น 0 เสมอ เราจึงจำเป็นต้องหน่วงเวลาไว้ประมาณหนึ่ง จากนั้นจึงเรียกใช้งานอีกครั้งจึงจะได้ค่าที่ตรงตามความเป็นจริง ดังตัวอย่างต่อไปนี้ จากตัวอย่าง หลังเรียกใช้งานครั้งแรก จะหน่วงเวลาไว้ 1 วินาที จึงเรียกใช้งานอีกครั้ง ซึ่งเทคนิคนี้ เอกสารของทาง Microsoft ก็ได้ระบุเอาไว้ ดังนี้ If the calculated value of a counter depends on two counter reads, the first read operation returns 0.0. Resetting the performance counter properties to specify a different counter is equivalent to creating a new performance counter, and the first read operation using the new properties returns 0.0. The recommended delay time between calls to the NextValue method is one second, to allow the counter to perform the next incremental read. เพื่อให้เห็นภาพที่ชัดขึ้น ผมจะใช้การวนลูปเข้ามาช่วยเพื่อให้เห็นการทำงานของ CPU ที่เป็นจริงมากยิ่งขึ้น ดังโค้ดตัวอย่าง โดยผลลัพธ์จากโค้ดด้านบน ก็จะแสดงการทำงานของ CPU ทุก 1 วินาทีเป็นจำนวน 10 ครั้ง จะเห็นว่าการดึงข้อมูลการใช้งาน CPU ไม่ได้ยุ่งยาก แค่มีทริคนิดเดียวตรงที่จะต้องมีการเรียก NextValue() 2 ครั้ง และต้องมีการหน่วงเวลาก่อนการเรียกครั้งที่ 2 ก็จะได้ผลลัพธ์ที่ถูกต้อง แล้วพบกันใน EP หน้า สวัสดีครับ อ้างอิง https://stackoverflow.com/questions/278071/how-to-get-the-cpu-usage-in-c https://stackoverflow.com/questions/2181828/why-the-cpu-performance-counter-kept-reporting-0-cpu-usage https://gavindraper.com/2011/03/01/retrieving-accurate-cpu-usage-in-c/ https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.performancecounter.nextvalue?view=dotnet-plat-ext-5.0

Read More »

แสดงเครื่องหมายถูกใน Crystal Report

นักพัฒนาหลายๆ ท่านที่ออกรายงานด้วย Crystal Report อาจจะมีความต้องการแสดงสัญลักษณ์เครื่องหมายต่างๆ บนตัวรายงาน แต่ไม่มีเครื่องมือที่ออกแบบมาเพื่อการนี้โดยตรง แต่เราสามารถทำได้ด้วยวิธีการดังต่อไปนี้ 1. สร้าง Formula Field และกำหนดชื่อให้เรียบร้อย 2. ป้อนคำสั่ง Chr(254) จากนั้น Save 3. เพิ่ม formula field ที่เพิ่งสร้างลงไปในรายงาน และเปลี่ยนฟอนต์ให้เป็น “Windings” 4. เมื่อทดสอบดูรายงาน ก็จะแสดงเป็นเครื่องหมายถูกภายในกล่องสี่เหลี่ยมดังภาพ 5. นอกจากนี้เราสามารถกำหนดให้แสดงผลเป็นรูปแบบอื่นๆ ได้ด้วยการแก้ไขโค้ดเป็นอย่างอื่น เช่น 6. เมื่อเราทราบโค้ดของสัญลักษณ์ที่เราต้องการแล้ว เราก็สามารถควบคุมการแสดงผลด้วยการเพิ่มเงื่อนไขใน Formula Field ดังตัวอย่าง อ้างอิง https://stackoverflow.com/questions/279907/checkbox-in-a-crystal-report

Read More »

แสดงข้อมูล Memory CPU Disk ด้วย C# EP.1

ในช่วงที่ผ่านมาผู้เขียนได้รับมอบหมายให้พัฒนาเครื่องมือสำหรับมอนิเตอร์การใช้งานทรัพยากรต่างๆ บน Server ที่ให้บริการลูกค้า ทั้งในส่วน Memory CPU และ Disk โดยโจทย์คือพัฒนา Service ขึ้นมาตัวนึงด้วยเครื่องมือที่เราใช้งานกันอยู่แล้วคือ Visual Studio.NET ด้วยภาษ C# สำหรับอ่านทรัพยากรต่างๆ บน Server แล้วจึงเขียนค่าเหล่านั้นลงไฟล์ จากนั้นจะมีเครื่องมืออีกตัวเข้ามาอ่านไฟล์ดังกล่าวแล้วนำไปแสดงผลเป็นกราฟในรูปแบบที่ต้องการต่อไป เริ่มต้นเรามาดูวิธีการดึงข้อมูลหน่วยความจำ Available (คงเหลือ) กันก่อน ซึ่งโชคดีที่ .NET มี object ตัวนึงที่ชื่อ PerformanceCounter ที่จะคอยเก็บข้อมูลต่างๆ ของ Server และเราสามารถดึงค่าต่างๆ มาใช้งานได้โดยการระบุ parameter ที่เราต้องการ อย่างเช่นในกรณีของหน่วยความจำ จะต้องระบุ parameter 2 ตัว คือ “Memory”, “Available MBytes” ดังโค้ดตัวอย่าง โดยเราจะดึงข้อมูลออกมาผ่านเมทธอด NextValue() อย่างเช่น เมื่อทดลองรันโค้ดดังกล่าว โดยผู้เขียนได้ทดลองสร้างโปรเจ็คแบบ Console Application ได้ผลลัพธ์ดังต่อไปนี้ โดยข้อมูลที่ได้อยู่ในรูปแบบ Megabytes ดังนั้นถ้าต้องการให้อยู่ในรูปแบบ Gigabytes จะต้องนำไปหารด้วย 1,024 เสียก่อน (ในส่วนนี้ผู้เขียนไม่แน่ใจว่า ในทางเทคนิคควรจะหารด้วย 1,024 หรือ 1,000) แต่ด้วยข้อจำกัด เราไม่สามารถหาหน่วยความจำทั้งหมดจาก PerformanceCounter โดยจะต้องดึงข้อมูลผ่านวิธีการอื่น นั่นคือการเรียกผ่าน Windows API Function และต้องประกาศ Structure เพิ่มเติมเพื่อให้รองรับข้อมูลที่ Windows API ส่งกลับมา ดังนี้ และตัวอย่างวิธีการเรียกใช้งานฟังก์ชัน เมื่อนำโค้ดไปทดสอบ จะได้ผลลัพธ์ดังภาพ โดยข้อมูลที่ได้จากฟังก์ชันนี้จะเป็นหน่วย byte ถ้าเราต้องการแปลงให้เป็น gigabyte ก็จะต้องหารด้วย (1024 * 1024 * 1024) ซึ่งก็จะได้ผลลัพธ์ประมาณ 4 gigabytes และจากโค้ดในส่วนแรกที่ใช้งานหน่วยความจำคงเหลือ เมื่อนำมาผนวกกัน และมีการคำนวณอีกนิดหน่อย ก็จะได้ผลลัพธ์ดังภาพ ตัวอย่างโค้ดทั้งหมด สำหรับวิธีการดึงหน่วยความจำของเครื่องก็คงจบลงเพียงเท่านี้ ครั้งหน้าเราจะมาดูวิธีการดึงข้อมูลการใช้งาน CPU กัน สวัสดีครับ อ้างอิง http://www.infoworld.com/article/3008626/how-to-work-with-performance-counters-in-c.html http://stackoverflow.com/questions/105031/how-do-you-get-total-amount-of-ram-the-computer-has

Read More »

ทำ functional design อย่างง่ายด้วยโปรแกรม Sandcastle Help File Builder

เมื่อพัฒนาโปรแกรมเสร็จแล้ว ก็ถึงเวลาทำเอกสารการเขียนอธิบายโค้ดต่อ บางครั้งมันยุ่งยากเสียเวลา วันนี้มีวิธีที่สะดวกและรวดเร็วเพียงแค่เขียนอธิบายใน Class ที่เราต้องการอธิบาย เช่น Constructors, Properties, methods โดยทั่วไปแล้วการเขียน Logic ต่างๆ เพื่อนำไปใช้งานต่อหรืออ้างอิงโค้ดที่เราเขียนมักจะ build code เป็นไฟล์ .dll เพื่อให้ระบบอื่นมาเชื่อมต่อและเรียกใช้งานได้ โดยขั้นตอนแรกเราใช้โปรแกรม Sandcastle Help File Builder สามารถอ่านรายละเอียดเพิ่มเติมตามลิ้งก์ https://github.com/EWSoftware/SHFB/releases และ download และติดตั้งตามลิ้งก์ SHFBInstaller_v2019.11.17.0.zip 45.1 MB เมื่อติดตั้งเสร็จเรียบร้อย หน้าตาก็จะประมาณนี้ ก่อนอื่นเราต้องไปตั้งค่าการ build code ใน Visual Studio ในส่วนของ XML ตามไฮไลต์สีเหลือง จากนั้นก็กด Build ใน Visual Studio เมื่อ build เสร็จ เราจะได้ไฟล์ .dll และ .xml เมื่อได้ไฟล์ .dll และ .xml เรียบร้อยแล้ว ก็เพิ่มในโปรแกรม Sandcastle Help File Builder โดยไปที่เมนู File > Project Explorer > Documentation Sources > Add Documentation Source เมื่อเลือกไฟล์ .dll และ .xml เรียบร้อยแล้ว ผลลัพธ์ที่ได้แสดงตามภาพ จากนั้นตั้งค่าเมนู Help File ตามตัวอย่างข้างล่าง จากนั้นตั้งค่าเมนู Visibility ตามตัวอย่างข้างล่าง เมื่อตั้งค่าโปรแกรมเสร็จเรียบร้อยแล้ว ไปที่เมนู Documentation > Build Project รอโปรแกรมประมวลผลสักครู่ เราก็จะได้ไฟล์ .chm ออกมา เมื่อเปิดไฟล์ .chm เราก็จะได้ผลลัพธ์ Help File ตามรูปแบบที่แสดงตามภาพด้านล่าง

Read More »

ตรวจสอบการสะกดคำด้วย NHunspell (.Net Framework Library)

สำหรับแอปพลิเคชันที่มีส่วนค้นหาแล้วนั้น หนีไม่พ้นคำถามจากผู้ใช้ว่า ถ้าสะกดคำผิดจะค้นเจอมั้ย (ก็ไม่เจอซิครับ) พร้อมยกตัวอย่างความสามารถในการแก้คำผิดของ Google, Bing ให้ฟัง สำหรับนักพัฒนาตัวคนเดียว หรือทีมงานเล็กๆ ที่ไม่สามารถใช้แนวทาง API แบบต้องมีค่าใช้จ่าย หรือ Machine Learning ที่ต้องใช้ความรู้เฉพาะด้าน ผมก็มี Library ขนาดเล็กที่อาศัยวิธีการทางสถิติ และไฟล์คลังคำศัพท์ (Dictionary) มาใช้งานไปก่อนครับ โดยได้ทำการทดสอบประสิทธิภาพเปรียบเทียบกับ PyThaiNLP, WeCantSpell.Hunspell มาแล้วทั้งในด้านความเร็ว และความถูกต้อง พบว่าดีที่สุด นั้นคือ NHunspell ขั้นตอนการนำมาใช้งาน ในตัวอย่าง เป็นการนำมาใช้งานร่วมกับ Console Application 1.เปิด Nuget Manager ด้วยการ คลิกขวาที่ชื่อโปรเจค เลือก Manage Nuget Packages 2.ค้นหา NHunspell เลือก Install 3.สร้างโฟลเดอร์สำหรับเก็บไฟล์ Dictionary โดยสามารถดาวส์โหลดได้จาก https://github.com/LibreOffice/dictionaries นำไปวางไว้ที่ [ProjectPath]/bin/Debug 4.สร้างโฟลเดอร์สำหรับเก็บไฟล์คำตัวอย่าง sentense_list.txt โดยมีบรรทัดละ 1 คำ เพื่อทำการโหลดข้อมูลเข้ามาให้ Library ประมวลผล และเก็บไฟล์ผลลัพธ์ไว้ที่ suggest_result.txt นำไปวางไว้ที่ [ProjectPath]/bin/Debug 5. จากนั้นก็เขียนโค้ดในไฟล์ Program.cs ดังนี้ 6.จากนั้นทำการ Run แบบ Debug จะปรากฎหน้าจอ Command Line แสดงข้อความ Processing… รอจนเห็นคำว่า Process Complete. แสดงว่าทำการประมวลผลเสร็จแล้ว 7.ผลลัพธ์จะถูกบันทึกลงในไฟล์ suggest_list.txt ดังรูป ในตัวอย่างนี้ เป็นเพียงโปรเจคสำหรับทดสอบการเรียกใช้งาน และดูผลลัพธ์ของ Library เท่านั้น การนำไปใช้งานร่วมกับระบบยังต้องการ การประยุกต์ให้เหมาะสมกับแต่ละระบบ แต่ก็หวังว่าจะเป็นประโยชน์กับคนที่กำลังหาเครื่องมือที่ใช้ตรวจสอบการสะกดคำให้กับระบบของตัวเองอยู่ไม่มาก ก็น้อยครับ

Read More »