Month: November 2020

  • ปรับแต่ง SQL ให้เร็วขึ้น

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

    ไม่จำเป็นต้องใช้ข้อมูลทุกอย่าง

    พิจารณาว่าจำเป็นต้องใช้ SELECT * หรือไม่? ควรจะดึงเฉพาะ Column ที่ต้องการเพื่อให้ได้ผลที่รวดเร็วขึ้น แทนที่จะใช้ SELECT * เพื่อดึงข้อมูลทั้งหมดออกมา

    หากมี Table ที่มีขนาดใหญ่หรือมีข้อมูลปริมาณมากใน Table ซึ่งมีแนวโน้มที่จะทำให้ Query Engine ต้องทำงานหนักในการดึงข้อมูลทุกอย่างไปสู่ Client Side ก็อย่าลืมที่จะใช้ LIMIT เพื่อจำกัดจำนวนของผลลัพธ์ เว้นเสียแต่ว่าต้องการดูข้อมูลในทุก ๆ Row

    ระวังการใช้ NOT IN

    พยายามหลีกเลี่ยงการใช้ ‘IN’ หรือ ‘NOT IN’ เพราะการทำเช่นนี้ หมายถึง กำลัง Scan ทั้ง Table อยู่ เพราะ Query Engine จะไล่ดูไปที่ทุก Row เพื่อตรวจสอบว่า ตรงตามเงื่อนไขหรือไม่ ให้เปลี่ยนมาใช้ ‘EXISTS’ หรือ ‘NOT EXISTS’ ดู เพราะมันจะส่งผลกระทบต่อ Query Plan น้อยกว่าการใช้ ‘NOT IN’

    ใช้ Wildcards เท่าที่จำเป็น

    การใช้ Wildcards ที่จุดเริ่มต้นและจุดสิ้นสุดของ LIKE จะทำให้การ Query ช้าลง และอาจจะทำให้ได้ผลลัพธ์ที่มากเกินกว่าที่คุณต้องการ ให้ใช้ Wildcards เฉพาะเมื่อต้องการใช้งานจริง ๆ เท่านั้น โดยทั่วไปจะใช้กันเพียงแค่จุดเดียวเท่านั้น ดังนั้น จึงควรคำนึงถึงสิ่งที่ต้องการจะให้ Query Engine ทำ

    ระวัง Nested Queries

    การ Run หลาย ๆ Queries ซ้อนกันไปเรื่อย ๆ (Nested Queries) เหมือนอย่าง Function ถือเป็นสิ่งที่ไม่แนะนำให้ทำ และมันจะเร็วกว่าหากเขียนลงใน Table ลองพิจารณาการสร้าง Staging Tables ซึ่งนั่นหมายถึง เรากำลัง Join Subset ของข้อมูลที่เล็กลง ทำให้การ Query เร็วขึ้น

    ระวังการใช้ Views ซ้อน ๆ กัน

    Views เป็น Queries ที่จะ Run เมื่อเราเรียกใช้งาน หรือดูข้อมูล ซึ่งหากกำลังเรียกหลาย ๆ View หรือในกรณีที่แย่ที่สุด คือ การเรียก Views ซ้อน Views ซ้อน Views ไปเรื่อย ๆ นั่นคือ เรากำลังบอกให้ Query Engine ทำการ Run หลาย ๆ Queries เพื่อ Return Row และ Column ที่ต้องการ ลองเปลี่ยนเป็นเขียนมันลงไปใน Table หากต้องการดูข้อมูลในแต่ละ วัน/สัปดาห์/เดือน แทนที่จะใช้ Views เพื่อ Filter ข้อมูล

    แต่ถ้าหากยังมีความจำเป็นใช้ Nested Views อยู่ อยากให้ลองพิจารณาดูว่า ยังมีวิธีอื่นอีกหรือไม่ ที่สามารถทำได้ตรงกว่านี้ในการเข้าถึง Row และ Column ที่ต้องการด้วยการเขียน Queries แทนการ Run หลาย Queries เพื่อไปยัง Column ที่ต้องการจาก Nested Views ตัวสุดท้าย

    Indexes

    Indexes จะช่วยเพิ่มความเร็วให้ Queries ของเรา โดยการจัดลำดับข้อมูลเพื่อให้ Database Engine ทราบว่าจะหาข้อมูลที่ต้องการได้จากที่ไหน หรือมี Lookup Table เพื่อที่มันจะสามารถทราบตำแหน่งที่จะค้นหาได้ ประเภทของ Indexes ที่ใช้จะเป็นตัวกำหนดวิธีการทำงานของ Indexes และใช้ Indexes สำหรับ Column ที่จะใช้งานมันบ่อย ๆ ใน Queries

    อ้างอิง : https://dev.to/helenanders26/sql-201-10-ways-to-tweak-slow-running-queries-3pkb

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

    สำหรับ EP นี้เราก็มาถึงวิธีการดึงข้อมูลการใช้งาน CPU กัน เพื่อไม่ให้เป็นการเสียเวลา เรามาเริ่มกันเลย

    สำหรับการดึงข้อมูลนั้น เราก็สามารถใช้งาน object PerformanceCounter ได้เหมือนเดิม โดยจะต้องระบุ parameter ที่จำเป็นดังนี้

    PerformanceCounter cpu = new PerformanceCounter("Processor", "% Processor Time", "_Total");

    และเมื่อทดลองเรียกใช้งาน จะปรากฏผลดังภาพ

    จะเห็นว่าผลลัพธ์ออกมาเป็น 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 หน้า สวัสดีครับ


    อ้างอิง

  • Database Design Tools (2)

     DbVisualizer

    DbVisualizer เป็น Tool ที่ออกแบบมาสำหรับการจัดการ Database มัน Integrate เข้ากับหลาย Databases และสามารถทำงานกับ Operating System หลัก ๆ ได้ทั้งหมด

    DbVisualizer มีการ Integrate Interface ที่ใช้งานง่าย มันสามารถถูกใช้เพื่อเรียกดู Schema ที่ซับซ้อนและ Data ที่แก้ไข Interface ช่วยให้ User สามารถทำสิ่งต่าง ๆ เช่น Drag & Drop, Pin Tabs, Detach Tabs ใน Windows ที่แยกออกไป รวมทั้ง Inline Edit

    Server Management

    DbVisualizer ช่วยให้ User สามารถจัดการกับ Instances, Security และ Session Storage ของ Database Server ,User ยังสามารถ Schedule และ Execute การดำเนินการต่าง ๆ กับ Oracle, MySQL, PostgreSQL และ SQL Server ได้

    Comparing

    Tool นี้ช่วยให้ User สามารถเปรียบเทียบ Objects อย่าง Table Data, Scripts หรือ DDL ของ 2 Tables หรือ Procedures ได้ โดย Interface ที่ทำการเปรียบเทียบนั้น Clean และสามารถเข้าใจได้ง่าย

    SQL Tools

    DbVisualizer มี Tools อื่น ๆ ที่มีประโยชน์อีก เช่น:

    • SQL Commander: Query Tool ที่รองรับ Editors และ Result Sets ต่าง ๆ
    • Query Builder: ช่วยให้ User สามารถเห็นการ Create และ Execute Queries ได้อย่างชัดเจน
    • Explain Plan: Tool ที่ใช้สำหรับวิเคราะห์ว่าจะใช้ Query อย่างไรใน Database แต่ Feature นี้สามารถใช้งานได้กับบาง Database เท่านั้น

    Tool นี้ Integrate SQL History Tool ซึ่งช่วยให้ User สามารถดู Query ก่อนหน้านี้ได้

    Supported Databases

    DbVisualizer มาพร้อมกับการ Integrate กับหลาย Databases หลัก ๆ ได้ และสามารถ Connect กับ Database โดยใช้ JDBC Drivers

    DbVisualizer เป็น Tool ที่ยอดเยี่ยมสำหรับการจัดการ Database มันมี Interface ที่เป็นมิตรกับ User และสามารถทำงานได้กับ Operating Systems ยอดนิยมต่าง ๆ แต่ ผู้ที่ใช้ Free Version ของ Tool นี้ ไม่สามารถใช้งานใน Feature ที่สำคัญ ๆ ได้ ในขณะที่ Paid Version ก็มีราคาที่ค่อนข้างสูง

    Vertabelo

    Vertabelo เป็น Database Design Tool แบบ Online ที่ช่วยให้สมาชิกในทีมสามารถทำงานร่วมกันใน Projects ได้อย่างง่ายดาย เนื่องจากมันอยู่ใน Online Platform จึงทำให้ User สามารถ Share การเข้าถึงไปยังสมาชิกในทีมผ่านทาง Email ได้

    Vertabelo มีระดับการเข้าถึงที่แตกต่างกันถึง 3 Levels คือ Owner, Editor และ Viewer , Vertabelo มี Interface ที่ทั้ง Clean และใช้งานง่าย คุณสามารถสลับไป-มาระหว่าง Models ต่าง ๆ โดยที่ไม่ต้องออกจาก Design Area

    Tool นี้ได้ Integrate Quick Search และ Fast Navigation Menu ซึ่ง Features เหล่านี้มีประโยชน์อย่างมากเมื่อต้องทำงานกับ Databases ขนาดใหญ่

    Vertabelo อนุญาตให้ User สามารถ Reverse Engineer Schema ได้จาก Database แต่น่าเสียดายที่ Reverse Engineer Tool ไม่มี Graphical Interface หากต้องการ Run มันคุณจะต้องไปที่ Website และใช้ Command Line จากที่นั่น

    ข้อเสียอีกอย่างหนึ่งของ Reverse Engineer Tool ก็คือคุณต้องจัดแต่ง Tables ให้เรียบร้อยด้วยตนเอง หลังจากการ Upload ขึ้นไป

    Model

    Vertabelo ใช้ Model เพื่อบันทึก Design โดย Model สามารถถูก Share ภายในทีมเป็น Document ซึ่งมี Access Levels ที่แตกต่างกัน โดยที่:

    • Model สามารถถูก Share ออกไปนอก Vertabelo ได้โดยใช้ Public Link
    • พวกมันสามารถถูก Clone เพื่อที่จะสามารถ Track Version ก่อนหน้าของ Design ได้
    • พวกมันคล้ายกับ DbSchema Project Files

    Supported Databases

    Vertabelo รองรับเฉพาะ 8 Databases หลัก ๆ: Oracle, MySQL, PostgreSQL, SQLite, IBM DB2, SQL Server, HyperSQL และ Amazon Redshift

    Vertabelo เป็น Database Designer ที่ดี มันมี Interface ที่เป็นมิตรกับ Users และมีความทันสมัย สามารถเข้าถึงได้ง่ายและสามารถ Share ในทีมได้ง่าย แต่ Database ที่รองรับมีจำนวนน้อย และ Reverse Engineer Tool ที่ไม่ค่อยดีนัก

    อ้างอิง : https://www.techstarthailand.com/blog/detail/Top-4-Database-Design-Tools/1324

  • Database Design Tools

    Database Design ที่ดีจะช่วยลดงานในส่วน Maintenance ลงได้อย่างมาก และลดโอกาสเกิดข้อผิดพลาดใน Project  เนื่องจากแต่ละ Project  มี Requirements ที่แตกต่างกัน ทำให้การค้นหา Tools ที่เหมาะสมอาจเป็นเรื่องยาก ดังนั้นบทความนี้จะมาแนะนำ Database Design Tools ที่คาดว่าจะมีประโยชน์กับคุณ

    Toad Data Modeler

    Toad Data Modeler เป็น Database Modeling Tool ที่ใช้ Automation, Intuitive Workflows และ Built-in Expertise อีกทั้ง Toad ยังเป็น Database Solution ยอดนิยมที่ Community ของมันมีการเติบโตอย่างต่อเนื่อง

    Toad มี User Interface ที่ช่วยให้ User เข้าใจ Databases และ Table Relationships ได้ดียิ่งขึ้น มันสามารถสร้าง Data Models ทั้งแบบ Logical และ Physical และยังสามารถ Map Attributes ทั้งหมดของ Database ใน Physical Model ให้โดยอัตโนมัติ

    Models และ Synchronization

    Toad ช่วยให้ User สามารถ Convert Logical Model เป็น Physical Model ที่เลือกไว้ (เช่น Oracle, SQL Server เป็นต้น) และสามารถ Convert Physical Model ที่เลือกไว้ เป็นรูปแบบอื่น อย่างเช่น Convert Oracle Model ไปเป็น SQL Server

    Tool นี้จะมี Feature ของการ Synchronization อีกทั้ง User สามารถเปรียบเทียบ Models กับ Database และสร้าง Migration Scripts ได้ นอกจากนี้ยังช่วยให้ User สามารถ Update Model จาก Database ได้โดยตรง

    Toad สามารถทำ Processes อย่าง การเปรียบเทียบ Data และ Schema ได้โดยอัตโนมัติ

    SQL Code Generation

    Toad สามารถสร้าง Database DDL Scripts ที่มีความซับซ้อน นอกจากนี้ยังสามารถเปิด SQL Scripts ที่สร้างขึ้นใน Application ที่เกี่ยวข้องได้

    Reporting

    มันสามารถสร้าง Report ในรูปแบบของ HTML, RTF หรือ PDF ได้

    Supported Databases

    Tool สามารถ Connect กับ Databases ที่หลากหลาย เช่น Oracle, SAP, MySQL, SQLServer, PostgreSQL และอื่น ๆ อีกมากมาย

    จะเห็นว่า Toad เป็น Platform ที่มีประโยชน์อย่างยิ่งสำหรับ Database Modeling ที่มี Features ที่ยอดเยี่ยมอยู่มากมาย แต่มี User Interface ที่ใช้งานได้ค่อนข้างยาก และ License มีราคาค่อนข้างสูง

    DbSchema

    DbSchema เป็น Visual Tool สำหรับการออกแบบและการจัดการ Database ที่ซับซ้อน โดย Tool นี้สามารถ Integrate เข้ากับ Operating Systems หลัก ๆ ทั้งหมดได้

    DbSchema มาพร้อมกับ User Interface ที่เข้าใจง่ายและช่วยลดความยุ่งยากในการออกแบบ Database ทุกอย่างถูกจัดเตรียมไว้พร้อมแล้วใน Layouts ซึ่งมีประโยชน์อย่างยิ่งเมื่อต้องจัดการกับ Database ขนาดใหญ่ พวกมันช่วยให้ User สามารถ Focus เฉพาะส่วนที่ต้องการของ Database ได้

    ตัว Interface จะช่วยทำให้ User สามารถ เรียกดู Diagram ได้อย่างอิสระ, Drag & Drop Tables ใน Layouts หรือ แก้ไข Table Data ด้วยการ Double-Click

    DbSchema สามารถทำการ Reverse Engineer Schema จาก Database ที่มีอยู่ได้อย่างง่ายดาย

    Project File และ Schema Synchronization

    DbSchema จะเก็บ Schema Design ลงใน Project File ซึ่งการทำงานกับ Project File จะช่วยให้ User สามารถ Modify Schema Design ได้โดยไม่ต้อง Connect กับ Database ส่วนการเปลี่ยนแปลงต่าง ๆ จะถูกบันทึกลงในเฉพาะ Project File เท่านั้น

    เมื่อ Connect กับ Database อีกครั้ง User จะเปรียบเทียบความแตกต่างระหว่าง Project File และ Database จากนั้นก็ Synchronize พวกมัน

    Sharing

    DbSchema Project Files สามารถถูก Share ภายในทีมได้อย่างง่ายดายโดยใช้ GIT หรือ Versioning System อื่น ๆ อีกทั้ง Schema 1 ตัว สามารถถูก Migrate ผ่านหลาย ๆ Servers ได้

    สำหรับ Project File จะอยู่ในรูปแบบ XML ซึ่งง่ายต่อการอ่านหรือแก้ไขด้วย Text Editor ต่าง ๆ

    Visual Data Tools

    DbSchema สามารถ Integrate กับ 3 Data Tools ดังต่อไปนี้:

    • Relational Data Browse: จะช่วยให้ User สามารถเรียกดู Data ได้จากหลาย Tables พร้อมกัน
    • Visual Query Builder: สามารถสร้าง SQL Queries ที่ซับซ้อนได้
    • SQL Editor: เป็น Editor ที่มีประสิทธิภาพ ที่ใช้สำหรับ Text Autocompletion

    Supported Databases

    DbSchema มาพร้อมกับการ Integrate กับ Databases ส่วนใหญ่ได้ ส่วน Databases อื่น ๆ สามารถ Connect ผ่าน JDBC Drivers

    DbSchema เป็น All-in-one Database Designer & Manager มันเป็น Tool ที่มีประโยชน์อย่างมากโดยเฉพาะการจัดการ Databases ที่ซับซ้อน แต่มี Forms และ Reports Engine ที่ค่อนข้างใช้งานยาก

    อ้างอิง : https://www.techstarthailand.com/blog/detail/Top-4-Database-Design-Tools/1324

  • SQL พื้นฐานสำหรับ Data Analyst

    สำหรับคนที่มีพื้นฐานหรือเคยใช้งาน SQL มาบ้างแล้ว จะรู้จักคำสั่ง SQL พื้นฐานต่างๆ มีบางส่วนที่ไม่ค่อยใช้งานมัน แต่มันมีประโยชน์อย่างยิ่งโดยเฉพาะสำหรับ Data Analyst เช่น

    Distinct

    ในบางครั้ง ถ้าต้องการ Records ของข้อมูลที่ไม่ซ้ำกัน สามารถใช้ Distinct มาช่วยเพื่อให้ได้ข้อมูลที่ไม่ซ้ำกัน โดยใช้งานกับ Columns

    Select distinct fac_id from student

    IN

    IN Operator ช่วยให้สามารถทดสอบได้ว่า Expression นั้นตรงกับ Value ใด ๆ ใน List ที่ระบุหรือไม่ มันจะช่วยลดการใช้งาน “OR” หลาย ๆ เงื่อนไข

    select * from student where campus_id in ('01','02', '03')

    Having

    มันเป็นการใช้เงื่อนไขกับกลุ่มของผลลัพธ์เพื่อกรองข้อมูลออกมา แต่คำถามที่น่าสนใจก็คือ ทำไมถึงไม่ใช้ “WHERE” ที่หลาย ๆ คนคุ้นเคยกันล่ะ แน่นอนว่าเราใช้ “WHERE” เพื่อระบุเงื่อนไขให้กับ Columns ที่เราเลือก ในขณะที่ “HAVING” จะถูกใช้เพื่อระบุเงื่อนไขให้กับ Groups ที่ถูกสร้างขึ้นโดย “GROUP BY” Clause

    “HAVING” Clause จะต้องถูกใช้ตามหลัง “GROUP BY” Clause แต่จะอยู่ก่อน “ORDER BY” Clause

    ในตัวอย่างด้านล่างนี้ SQL HAVING Clause จะ Filter ผลลัพธ์เฉพาะ คณะที่มีจำนวน นักศึกษา มากกว่า 500 คน เท่านั้น

    select fac_id, count(student_id)
    from student
    group by fac_id
    having count(student_id) > 500

    LIMIT

    “LIMIT” ถูกใช้เพื่อจำกัดหรือกำหนดจำนวนของผลลัพธ์ตามจำนวนที่แน่นอน เนื่องจากในบางครั้งก็จำเป็นต้องจำกัดจำนวนของผลลัพธ์ของการ Query

    select * from student LIMIT 10

    Wild Cards

    โดยทั่วไปแล้ว Wild Card เป็นวิธีในการค้นหาตัว Characters ผ่าน Strings ซึ่ง Wild Card ใช้ “LIKE” Operator โดย Wild Card ที่เป็นที่รู้จักและถูกใช้งานกันมากที่สุด ก็คือ “%” และ “_”

    • “%” : หมายถึง ศูนย์หรือมากกว่าหนึ่ง Character

    ในตัวอย่างด้านล่าง เรากำลังบอก SQL ให้ดึงข้อมูลจาก Table “student” ที่ใน Column “name” เริ่มต้นด้วยตัวอักษร “w” แล้วตามต่อด้วยตัวอักษรอะไรก็ได้และมีจำนวนกี่ตัวก็ได้

    select * from student where name like 'w%'

    อีกตัวอย่างหนึ่ง ซึ่งเรากำลังบอก SQL ให้ดึงข้อมูลจาก Table “student” ที่ใน Column “name” ลงท้ายด้วยตัวอักษร “wan” และสามารถเริ่มต้นด้วยตัวอักษรอะไรก็ได้และมีจำนวนกี่ตัวก็ได้

    select * from student where name like '%wan'
    • “_” : หมายถึง Character เพียงตัวเดียวเท่านั้น

    ใน Query ด้านล่าง จะทำการดึงข้อมูลที่เริ่มต้นด้วยตัวอักษรอะไรก็ได้ 1 ตัว แล้วตามด้วยตัวอักษรต่าง ๆ ตามรูปแบบ  “_ilaiwan”

    select * from student where name like '_ilaiwan'

    หรีอต้องการดึงผลลัพ์ธ์จาก Column “name” ที่เริ่มต้นด้วย “wilaiwa” แล้วตามด้วยตัวอักษรอะไรก็ได้อีก 1 ตัว 

    select * from student where name like 'wilaiwa_'

    และสามารถใช้งานด้วยการรวมทั้ง 2 อย่างเข้าด้วยกันเพื่อการกำหนดผลลัพธ์ที่เจาะจงมากขึ้น เช่น ดึงข้อมูลจาก Column “email” ที่ขึ้นต้นด้วยจำนวนตัวอักษรกี่ตัวก็ได้ และลงท้ายด้วยอักษรเพียงตัวเดียว

    select * from student where email like '%.co_'

    อ้างอิง : https://www.techstarthailand.com/blog/detail/SQL-Beyond-The-Basics/1296

  • รู้ยัง? สแกนเอกสารด้วย PC หรือ NoteBook ก็ได้นะ!!! (Office Lens ภาคต่อ)

    จากบทความที่แล้ว “เปลี่ยนมือถือ เป็นเครื่องสแกนเอกสารด้วย Office Lens”

    นอกจาก Office Lens จะมี Application ที่ใช้งานบน Moblie Device ต่าง ๆ บนระบบปฏิบัติการต่าง ๆ ได้แล้ว ยังสามารถทำงานบนเครื่องที่ลง Windows 10 ทั้ง PC และ Tablet โดยใช้งานร่วมกับเว็บแคมในการสแกนเอกสารที่ต้องการ ทั้งยัง สนับสนุนการใช้งานบัญชี Office 365 ของที่ทำงานหรือมหาวิทยาลัย

    ถึงแม้ว่าการใช้ Office Lens บนโทรศัพท์มือถือนั้นจะสะดวกสบายก็ตาม แต่ถ้าถึงคราวจำเป็นที่เรามีเพียง PC หรือ Note book เพียงเครื่องเดียวในการทำงาน ก็ไม่เป็นอุปสรรคในการสแกนภาพเอกสาร

    Office Lens มีการใช้งานคล้ายๆ กับ Mobile App Cam scanner แต่ใช้งานง่ายและหลากหลายกว่า รวมทั้งไม่จำกัดรูปแบบการแชร์

    Office Lens มีขั้นตอนการใช้งานบนเครื่อง PC หรือ Notebook ดังนี้

    1. เปิด Microsoft Store ดาวน์โหลด Office Lens App ลงที่เครื่องคอมพิวเตอร์ PC พร้อมติดตั้ง
    2. เปิด App Office Lens ตั้งค่ากล้องแสกนเนอร์
    3. จับภาพ และการครอบตัดรูปภาพ
    4. บันทึกภาพ สามารถเลือกเพื่อแปลงภาพเป็นไฟล์ Word (.docx), PowerPoint (.pptx) หรือ PDF (.pdf) ที่จะได้รับการบันทึกไปยัง OneDrive โดยอัตโนมัติ

    Office Lens ช่วยทำสำเนาดิจิทัลของเอกสารฉบับพิมพ์ ตัดแต่งได้อย่างแม่นยำ แม้จะวางเอกสารต้นฉบับเอียง
    และ ช่วยแก้ปัญหาการใช้งานเครื่องแสกนที่ติดตั้งไดร์เวอร์ภาษาอื่น ที่ไม่ใช่ภาษาไทยหรืออังกฤษ
    หากต้องการให้ได้ภาพที่คมชัดขึ้นควร “ตั้งค่า Resolution” ของภาพให้ความละเอียดมากขึ้นและ
    เวลาถ่ายภาพเอกสาร นอกจากใจนิ่ง ๆ ร่ม ๆ แล้ว “มือ ต้อง นิ่ง”นะคะ

    Download Office Lens on PC

    ขอบคุณ : Bblogdit : CCTC Tech Talk : คุยเฟื่องเรื่องเทคโนโลยีกับ สถช., www.microsoft.com,

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

    นักพัฒนาหลายๆ ท่านที่ออกรายงานด้วย Crystal Report อาจจะมีความต้องการแสดงสัญลักษณ์เครื่องหมายต่างๆ บนตัวรายงาน แต่ไม่มีเครื่องมือที่ออกแบบมาเพื่อการนี้โดยตรง แต่เราสามารถทำได้ด้วยวิธีการดังต่อไปนี้

    1. สร้าง Formula Field และกำหนดชื่อให้เรียบร้อย

    2. ป้อนคำสั่ง Chr(254) จากนั้น Save

    3. เพิ่ม formula field ที่เพิ่งสร้างลงไปในรายงาน และเปลี่ยนฟอนต์ให้เป็น “Windings”

    4. เมื่อทดสอบดูรายงาน ก็จะแสดงเป็นเครื่องหมายถูกภายในกล่องสี่เหลี่ยมดังภาพ

    5. นอกจากนี้เราสามารถกำหนดให้แสดงผลเป็นรูปแบบอื่นๆ ได้ด้วยการแก้ไขโค้ดเป็นอย่างอื่น เช่น

    6. เมื่อเราทราบโค้ดของสัญลักษณ์ที่เราต้องการแล้ว เราก็สามารถควบคุมการแสดงผลด้วยการเพิ่มเงื่อนไขใน Formula Field ดังตัวอย่าง

    If {Table.Gender} = "M" Then
        Chr(254)    //แสดงเครื่องหมายถูกในกล่องสี่เหลี่ยม
    Else
        Chr(168)    //แสดงกล่องเปล่า
    End If

    อ้างอิง

    https://stackoverflow.com/questions/279907/checkbox-in-a-crystal-report

  • แสดงข้อมูล 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” ดังโค้ดตัวอย่าง

    PerformanceCounter availMemory = new PerformanceCounter("Memory", "Available MBytes", null);

    โดยเราจะดึงข้อมูลออกมาผ่านเมทธอด NextValue() อย่างเช่น

    availMemory.NextValue();

    เมื่อทดลองรันโค้ดดังกล่าว โดยผู้เขียนได้ทดลองสร้างโปรเจ็คแบบ Console Application ได้ผลลัพธ์ดังต่อไปนี้

    โดยข้อมูลที่ได้อยู่ในรูปแบบ Megabytes ดังนั้นถ้าต้องการให้อยู่ในรูปแบบ Gigabytes จะต้องนำไปหารด้วย 1,024 เสียก่อน (ในส่วนนี้ผู้เขียนไม่แน่ใจว่า ในทางเทคนิคควรจะหารด้วย 1,024 หรือ 1,000)

    แต่ด้วยข้อจำกัด เราไม่สามารถหาหน่วยความจำทั้งหมดจาก PerformanceCounter โดยจะต้องดึงข้อมูลผ่านวิธีการอื่น นั่นคือการเรียกผ่าน Windows API Function และต้องประกาศ Structure เพิ่มเติมเพื่อให้รองรับข้อมูลที่ Windows API ส่งกลับมา ดังนี้

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
    private class MEMORYSTATUSEX
    {
    	public uint dwLength;
    	public uint dwMemoryLoad;
    	public ulong ullTotalPhys;
    	public ulong ullAvailPhys;
    	public ulong ullTotalPageFile;
    	public ulong ullAvailPageFile;
    	public ulong ullTotalVirtual;
    	public ulong ullAvailVirtual;
    	public ulong ullAvailExtendedVirtual;
    	
    	public MEMORYSTATUSEX()
    	{
    		this.dwLength = (uint)Marshal.SizeOf(typeof(MEMORYSTATUSEX));
    	}
    }
    
    [return: MarshalAs(UnmanagedType.Bool)]
    [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    static extern bool GlobalMemoryStatusEx([In, Out] MEMORYSTATUSEX lpBuffer);

    และตัวอย่างวิธีการเรียกใช้งานฟังก์ชัน

    ulong totalMemory;
    MEMORYSTATUSEX memStatus = new MEMORYSTATUSEX();
    if( GlobalMemoryStatusEx(memStatus))
    { 
       totalMemory = memStatus.ullTotalPhys;
    }

    เมื่อนำโค้ดไปทดสอบ จะได้ผลลัพธ์ดังภาพ

    โดยข้อมูลที่ได้จากฟังก์ชันนี้จะเป็นหน่วย byte ถ้าเราต้องการแปลงให้เป็น gigabyte ก็จะต้องหารด้วย (1024 * 1024 * 1024)

    ซึ่งก็จะได้ผลลัพธ์ประมาณ 4 gigabytes และจากโค้ดในส่วนแรกที่ใช้งานหน่วยความจำคงเหลือ เมื่อนำมาผนวกกัน และมีการคำนวณอีกนิดหน่อย ก็จะได้ผลลัพธ์ดังภาพ

    ตัวอย่างโค้ดทั้งหมด

    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Runtime.InteropServices;
    using System.Text;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
            private class MEMORYSTATUSEX
            {
                public uint dwLength;
                public uint dwMemoryLoad;
                public ulong ullTotalPhys;
                public ulong ullAvailPhys;
                public ulong ullTotalPageFile;
                public ulong ullAvailPageFile;
                public ulong ullTotalVirtual;
                public ulong ullAvailVirtual;
                public ulong ullAvailExtendedVirtual;
                public MEMORYSTATUSEX()
                {
                    this.dwLength = (uint)Marshal.SizeOf(typeof(MEMORYSTATUSEX));
                }
            }
    
            [return: MarshalAs(UnmanagedType.Bool)]
            [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
            static extern bool GlobalMemoryStatusEx([In, Out] MEMORYSTATUSEX lpBuffer);
    
            static void Main(string[] args)
            {
                float totalMemory = 0;
                MEMORYSTATUSEX memStatus = new MEMORYSTATUSEX();
                if (GlobalMemoryStatusEx(memStatus))
                {
                    totalMemory = memStatus.ullTotalPhys;
                    totalMemory = totalMemory / (1024 * 1024 * 1024);
                }
    
                PerformanceCounter pAvailMemory = new PerformanceCounter("Memory", "Available MBytes", null);
                
                Console.WriteLine("Total : " + totalMemory.ToString("0.00"));
                Console.WriteLine("Available : " + (pAvailMemory.NextValue() / 1024).ToString("0.00"));
                Console.WriteLine("Usage : " + (totalMemory - (pAvailMemory.NextValue() / 1024)).ToString("0.00"));
            }
        }
    }

    สำหรับวิธีการดึงหน่วยความจำของเครื่องก็คงจบลงเพียงเท่านี้ ครั้งหน้าเราจะมาดูวิธีการดึงข้อมูลการใช้งาน CPU กัน

    สวัสดีครับ


    อ้างอิง

  • เปลี่ยนมือถือ เป็นเครื่องสแกนเอกสารด้วย Office Lens

    เพียงแค่คุณมีมือถือ ก็สามารถสแกนเอกสารได้โดยไม่ต้องวิ่งหาเครื่องสแกนอีกต่อ!!!

    Office Lens เป็น Free Application จาก Microsoft Corporation สามารถใช้งานบน Mobile Device
    รองรับทั้งระบบ Windows Phone, Android และ iOS

    รูปหน้าจอสำหรับดาวน์โหลด Application Office Lens บน iOS และ Adriod

    การใช้งาน Office Lens
    ข้อดี ของตัวแอปพลิเคชันนี้คือไม่มี โฆษณา หรือ Ad โผล่ขึ้นมา ให้กวนใจเวลาใช้งานและใช้งานไม่ยาก
    สามารถแปลงรูปที่สแกนให้เป็นไฟล์เอกสาร Microsoft Office ได้ ไม่ว่าจะเป็น Word , PowerPoint,ไฟล์รูป .JPG หรือแม้แต่ .PDF ก็สามารถทำได้

    Office Lens มี 4 โหมดในการถ่าย คือ

    • Whiteboard : กระดาน Whiteboard
    • Document : หน้าเอกสาร,โปสเตอร์
    • Business Card : นามบัตร
    • Photo : ถ่ายรูปทั่วไป
      โดยมันจะปรับรูปภาพที่ถ่ายสแกนมาให้เหมาะสมกับชนิดของเอกสารที่สแกนมา

    Office Lens ขั้นตอนการใช้งานบน Mobile Device ดังนี้

    1. เปิด App Office Lens จับภาพ
    2. เลือกโหมดการถ่าย รอกรอบครอบตัดรูปภาพ กด “ถ่าย”
    3. ปรับแต่งภาพ ตามเครื่องมือที่ App จัดเตรียมไว้
    4. บันทึกภาพ สามารถเลือกการบันทึกเป็น OneNote, ไฟล์ JPG หรือบันทึกชุดไฟล์ภาพเป็น PDF
    รูปขั้นตอนการใช้งาน Office Lens บน Mobile Device

    รูปไฟล์ PDF ที่ได้จาก Application Office Lens

    Office Lens สามารถใช้แบบออฟไลน์ (Offline) ได้
    ผู้ใช้งานสามารถใช้ Office Lens ได้แม้ว่าจะไม่ได้เชื่อมต่ออินเทอร์เน็ตได้ โดยบันทึกไฟล์ JPG, PDF ลงเครื่อง โดยไม่ต้อง Login และไม่ต้องเชื่อมต่อกับ Internet
    เมื่อใช้ Office Lens บน iOS และ Android App ถ่ายภาพ แล้วแปลงเป็นเอกสาร สามารถเลือกบันทึกเอกสารที่อยู่ในรูปแบบไฟล์ JPG, PDF เข้าตัวอุปกรณ์โดยตรง ไม่ถูกจำกัดว่าจะต้องบันทึกเข้า OneDrive ที่ผู้ใช้งานต้อง Login Microsoft accont เชื่อมต่อ Internet จัดเก็บไว้ที่ OneDrive

    หวังว่าบทความนี้จะมีช่วยให้ทุกท่านสะดวกในการ จัดการเอกสารที่ต้องการได้ ไม่มากก็น้อยนะคะ

    ขอบคุณ : ครูหนึ่งสอนดี, THAIWERE