Month: May 2021

  • Oracle Database 18c XE กับปัญหาการ import user

    Oracle Database XE คืออะไร

    Oracle XE หรือ Oracle Express Edition เป็นซอฟต์แวร์ฐานข้อมูล Oracle เวอร์ชันที่ให้สามารถดาวน์โหลดไปใช้งานได้โดยไม่มีค่าใช้จ่าย แต่จะมีข้อจำกัดในการใช้งาน ตัวอย่างเช่นในเวอร์ชัน 18c จะมีข้อจำกัด เช่น

    • จำกัดการใช้งานข้อมูลได้ไม่เกิน 12 GB
    • จำกัดการใช้งาน RAM ได้ไม่เกิน 2 GB
    • ฟังก์ชันการใช้งานหลายอย่างที่ไม่มีให้ใช้งานเหมือนเวอร์ชัน Standard หรือ Enterprise

    Oracle Database XE 18c กับการติดตั้งในรูปแบบ Multitenant

    Oracle Database XE 18c จะถูกติดตั้งในรูปแบบที่เรียกว่า Multitenant ซึ่งจะมีรูปแบบดังนี้คือ

    • มีฐานข้อมูลที่เป็น container database
    • ฐานข้อมูลที่สร้างภายใต้ container เรียกว่า pluggable database
    • ในการติดตั้งไม่สามารถเลือกได้ว่าจะลงเฉพาะ container database อย่างเดียวโดยไม่ลง pluggable database แต่ตัว pluggable database จะถูกติดตั้งมาให้ด้วย 1 pluggable database (มีได้สูงสุด 3 pluggable database)

    รูปตัวอย่างผลการติดตั้ง Oracle Database XE 18c

    • การเรียกใช้ service name จะเป็นดังนี้
      • XE เป็น service name สำหรับเรียกใช้ container database
      • XEPDB1 เป็น service name สำหรับเรียกใช้งาน pluggable database
      • service name ทั้ง XE และ XEPDB1 จะถูกกำหนดไว้แล้วตั้งแต่ตอนติดตั้ง

    ปัญหาที่พบกับการ import user

    • เมื่อมีการ import user ด้วยคำสั่ง impdp
    • พบปัญหากับฐานข้อมูล container หรือ XE ส่วน ตัว pluggable หรือ XEPDB1 จะไม่พบปัญหาเช่นนี้
    • ตัวอย่างข้อความ error ที่พบ

    ORA-39083: Object type USER:”๊USER” failed to create with error: //”USER” คือชื่อ user ที่ถูก import เข้ามา

    ORA-65096: invalid common user or role name

    ตัวอย่างการแก้ปัญหาเมื่อต้องการ import user เข้า XE

    • รันคำสั่ง alter session set “_ORACLE_SCRIPT”=true;
    • สร้าง user ใหม่ โดยตั้งชื่อให้ตรงกับ user ที่ต้องการ import
    • ทำการ import ด้วยคำสั่ง impdp ตามปกติ

    สิ่งที่น่าสนใจ

    จะเห็นว่า oracle database 18c XE ถูกติดตั้งมาในรูปแบบ multitenant โดยมี database เริ่มต้นให้ 2 database คือ container database และ pluggable database ดังนั้นการเลือกว่าจะใช้งานแบบไหนก็ขึ้นอยู่กับลักษณะงานที่เราต้องการใช้งาน แต่กรณีที่ต้องการใช้งานทั่วไปแบบปกติ จะเห็นว่าการเลือกทำงานกับฐานข้อมูล pluggable database ดูแล้วน่าจะพบปัญหาน้อยกว่าจะไปทำงานกับตัว container database

  • เชื่อมต่อจากฐานข้อมูล Oracle ไปยังฐานข้อมูลอื่นด้วย Oracle Database Gateway

    โดยปกติหากต้องการเชื่อมต่อฐานข้อมูลสองฐานข้อมูลสำหรับ Oracle สามารถทำได้โดยการสร้าง database link แต่กรณีที่ต้องการสร้างการเชื่อมต่อจากฐานข้อมูล Oracle ไปยังฐานข้อมูลที่สร้างโดยระบบจัดการฐานข้อมูลอื่นที่ไม่ใช่ Oracle เช่น MS SQL Server, MySQL สามารถทำได้โดยใช้เครื่องมือที่เรียกว่า Oracle Database Gateway นั่นเอง

    ตัวอย่างการใช้ Oracle Database Gateway เชื่อมต่อไปยัง MS SQL Server

    เพื่อให้เห็นภาพการใช้งานจะยกตัวอย่างการใช้งานกับ MS SQL Sever ดังนี้

    หมายเหตุ รุ่นของ Software ที่ใช้ในตัวอย่างนี้คือ

    • Oracle Database 12c R2 (12.2.0)
    • Oracle Database Gateways 12c (12.2.0)
    1. เตรียมข้อมูลที่จำเป็นก่อนการติดตั้ง

    ข้อมูลของ SQL Server ที่เราต้องการเชื่อมต่อ

    • ชื่อเครื่องหรือ IP Address ของเครื่องที่ SQL Server ติดตั้งอยู่
    • หมายเลข port ของ SQL Server ที่เราต้องการเชื่อมต่อ
    • ชื่อฐานข้อมูล SQL Server ที่เราต้องการเชื่อมต่อ

    2. ขั้นตอนการติดตั้ง Oracle Database Gateway

    เมื่อดาวน์โหลดตัวติดตั้งจากเว็บไซต์ของ Oracle แล้ว ดำเนินการติดตั้งจากตัวติดตั้งที่ดาวน์โหลด ดังตัวอย่างต่อไปนี้

    ขั้นตอนนี้จะเป็นการใส่ข้อมูลของฐานข้อมูล MS SQL Server ที่ต้องการเชื่อมต่อ

    หลังจากนั้นทำการติดตั้งไปตามขั้นตอนตามลำดับ จนถึงขั้นตอนการสร้าง listener

    หลังจากติดตั้ง listener สำเร็จแล้ว ก็เป็นอันเสร็จสิ้นการติดตั้ง Oracle Database Gateway

    *** หลังจากการติดตั้ง หากเรียกดู Service จะเห็นว่ามี service ของ listener ปรากฎขึ้นมา

    3. การตั้งค่าหลังจากติดตั้ง

    • ไปยังโฟลเดอร์ที่ติดตั้ง Oracle Database Gateway เช่น C:\app\tg\Administrator\product\12.2.0\tghome_1\dg4msql\admin
    • เปิดไฟล์ initdg4msql.ora
    • ตรวจสอบการตั้งค่าตรง  HS_FDS_CONNECT_INFO

    HS_FDS_CONNECT_INFO=[192.168.100.184]/1433/MSSQLSERVER

    กรณีมีแค่ instance เดียว  อาจจะละชื่อ instance ไว้ และระบุชื่อฐานข้อมูลได้เลย ดังตัวอย่าง

    HS_FDS_CONNECT_INFO=[192.168.100.184]:1433//FILMSDSQL

    4. สร้าง database link

    เมื่อติดตั้ง Oracle Database Gateway เสร็จแล้ว ขั้นตอนต่อมาคือการสร้าง database link บนฐานข้อมูล Oracle เพื่อทำการเรียกดูข้อมูลบน MS SQL Server ผ่านทาง database link ที่สร้างขึ้นมา

    • รูปแบบคำสั่งในการสร้าง Database Link เป็นดังนี้

    CREATE PUBLIC DATABASE LINK DBLinkName

    CONNECT TO sa IDENTIFIED BY password

    USING ‘dg4msql’;

    • DbLinkName คือ ชื่อของ database link
    • sa คือชื่อของ user บน MS SQL Server (อาจจะเป็น user อื่นก็ได้)
    • password คือ รหัสผ่านสำหรับ user บนฐานข้อมูล MS SQL Server

    5. การเรียกดูข้อมูล สามารถเรียกดูข้อมูลผ่าน database link ที่สร้างขึ้นโดยใช้คำสั่ง sql เช่น

    select * from table@DBLinkName;

    เมื่อ table คือ ชื่อตารางที่อยู่บน MS SQL Server

  • การใช้ grant และ grant with grant option ใน Oracle

    การใช้คำสั่ง grant

    โดยทั่วไปเมื่อต้องการให้สิทธิ์สำหรับดำเนินการกับ object ใด ๆ ของ user หนึ่งให้กับอีก user หนึ่ง จะใช้คำสั่งคือ grant ตัวอย่าง เช่น

    • user1 เป็นเจ้าของตารางชื่อ table01
    • ในฐานข้อมูลมี user ชื่อ user2 อยู่ในฐานข้อมูลเดียวกับ user1
    • ต้องการให้ user2 สามารถใช้คำสั่ง select ข้อมูลจากตาราง table01 ของ user1
    • บน user1 ดำเนินการโดยใช้คำสั่งในการให้สิทธิ์คือ

    grant select on user1.table01 to user2;

    • หลังจากให้สิทธิ์แล้ว บน user2 สามารถใช้คำสั่งในการ select ข้อมูลจากตาราง table01 ของ user1 ได้ ตังตัวอย่างดังนี้

    select * from user1.table01; //ต้องระบุ user คั่นด้วยจุด และตามด้วยชื่อตาราง

    • การให้สิทธิ์ นอกจาก select แล้ว ยังมีสิทธิ์อื่น ๆ อีก เช่น insert, update, delete, execute ฯลฯ
    • ตัวอย่างการให้สิทธิ์มากกว่าหนึ่งสิทธิ์

    grant select, insert, update, delete on user1.table01 to user2;

    การใช้คำสั่ง grant with grant option

    รูปแบบการใช้คำสั่งคือ หลังคำสั่ง grant ปกติ ตามด้วย with grant option

    เช่น grant select on user1.table01 to user2 with grant option;

    ผลจากการใช้คำสั่ง with grant option จะมีผลให้ user ที่ได้รับสิทธิ์ สามารถให้สิทธิ์ที่ได้รับมา grant ต่อไปให้กับ user อื่นต่อได้นั่นเอง

    • ต่อเนื่องจากตัวอย่างแรก มี user3 ในฐานข้อมูลเดียวกันกับ user1 และ user2
    • เมื่อ user1 ใช้คำสั่ง

    grant select on user1.table01 to user2 with grant option;

    • มีผลทำให้ user2 สามารถ grant สิทธิ์ในการ select ให้กับ user อื่นต่อได้ เช่น

    grant select on user1.table01 to user3;

    user ที่ได้รับสิทธิ์ grant with option สามารถ ใช้ grant with option ต่อให้กับ user อื่นได้หรือไม่ ???

    • user ที่ได้รับการ grant ด้วยคำสั่ง with grant option สามารถ grant ให้ user อื่นด้วยคำสั่ง with grant option ด้วยเช่นกัน
    • ตัวอย่าง เช่น มี user4 ในฐานข้อมูลเดียวกับ user1, user2, user3
    • ต่อเนื่องจากตัวอย่างก่อนหน้านี้ user3 สามารถใช้คำสั่ง with grant option ต่อให้กับ user4 ได้ หาก user2 ได้ grant ให้ user3 ด้วยคำสั่ง with grant option

    ข้อควรระวัง

    • จะเห็นว่าในการใช้คำสั่ง grant with grant option นั้น จะทำให้ user ที่ได้รับสิทธิ์นี้ สามารถ grant สิทธิ์ต่อ ๆ กันไปให้กับ user อื่น ๆ เป็นทอด ๆ ด้วยคำสั่ง with grant option เช่นกัน
    • เมื่อ user อื่นที่ไม่ใช่เจ้าของ object ที่ถูก grant ได้รับสิทธิ์ในการ grant with option จะเห็นว่าจะทำให้การควบคุมการให้สิทธิ์ทำได้ยาก หรืออาจจะเกิดความไม่ปลอดภัยเกิดขึ้น ดังนั้น ถ้าไม่จำเป็นจึงไม่ควรให้สิทธิ์แบบ with grant option นั่นเอง

    การยกเลิกการให้สิทธิ์

    เมื่อต้องการยกเลิกการให้สิทธิ์ สามารถทำได้โดยใช้คำสั่ง revoke ตัวอย่างเช่น

    revoke select, insert, update, delete on user1.table01 from user2;

    จะเป็นการยกเลิกการให้สิทธิ์ในการ select, insert, update, delete บนตาราง table01 ของ user1 ที่เคยให้กับ user2

    ตรวจสอบได้อย่างไร ว่าเคย grant อะไรไปบ้าง

    มี view ของระบบที่ช่วยให้สามารถตรวจสอบได้ว่า object ใด ถูก grant อะไรไปบ้าง ซึ่ง view นี้เป็นของ user sys

    • view ที่เก็บข้อมูลการ grant ของ object ต่าง ๆ ชื่อ dba_tab_privs
    • มีฟีลด์ที่น่าสนใจคือ
      • grantee คือ user ที่ได้รับสิทธิ์
      • owner คือ user ที่เป็นเจ้าของ object
      • table_name คือ ชื่อ object (ชื่อของ table, view ฯลฯ)
      • grantor คือ user ที่เป็นผู้ให้สิทธิ์ (อาจจะไม่ใช่เจ้าของ object ก็ได้)
      • privilege คือ สิทธิ์ที่ได้รับ
      • grantable คือ user ที่เป็น grantee สามารถ grant สิทธิ์ต่อได้หรือไม่

  • ตรวจสอบ Battery ด้วยคำสั่งเดียว (Windows OS)

    เคยมั้ยครับอยากรู้ว่า Battery ของ Notebook ที่เราใช้งานอยู่ Design Capacity จากโรงงานเท่าไหร่ Full Charge Capacity ตอนนี้เหลือเท่าไหร่ ปกติก็ต้องหาโหลดโปรแกรม ติดตั้งและค่าที่ได้ออกมาบางทีก็ไม่ครบถ้วน เสี่ยงต่อมัลแวร์ ต้องเลือกแหล่งที่มาดีๆ สำหรับท่านที่ใช้งานระบบปฏิบัติการ Windows นั้น มีเครื่องมือที่ชื่อว่า powercfg ติดมาอยู่แล้วนะครับ จริงๆความสามารถของมันที่เกี่ยวกับการจัดการพลังงานของเครื่องมีเยอะมากครับ สามารถใช้คำสั่ง powercfg /? เพื่อเรียกดูความสามารถอื่นๆได้ โดยในบทความนี้ผมจะแนะนำวิธีการออก Battery report เพื่อตรวจสอบ Battery ของเราครับ

    • เปิด cmd ขึ้นมา (พิมพ์ค้นหาว่า cmd )
    • พิมพ์คำสั่ง powercfg /batteryreport /output “c:\battery-report.html”

  • เสร็จเรียบร้อยครับเราก็จะได้ไฟล์ battery-report.html อยู่ที่ c:\ สามารถเปลี่ยนชื่อไฟล์ หรือที่จัดเก็บได้
  • ไฟล์ดังกล่าวสามารถเปิดดูด้วย Browser ได้ทุกตัวครับ โดยในไฟล์ดังกล่าวจะประกอบไปด้วย

    ข้อมูลเครื่องคอมพิวเตอร์ของเรา
    ข้อมูล Battery ชื่อรุ่นและสิ่งที่เราอยากทราบนะครับ จากโรงงานความจุเท่าไหร่ (Design Capacity) ตอนนี้ชาร์ทเต็มแล้วได้เท่าไหร่ (Full Charge Capacity)
    ถ้าใครอยากทราบประวัติก็มีให้ดูครับ (ลดเร็วมาก เนื่องจากผมใช้งานแบบเสียบสายชาร์ทไว้ตลอดเวลา)
    สุดท้ายคือค่าประมาณเวลาที่ Battery ใช้งานได้ โดยช่องแรกคือเวลาที่ใช้ปกติ ช่องที่สองคือเวลา Stand by โดยคิดจาก Full Charge Capacity ช่องที่สาม สี่ คิดจาก Design Capacity ซึ่งคิดจากประวัติการใช้งานเครื่องของเราครับ (น่าจะเป็นค่าเฉลี่ย เปิดโปรแกรมที่ใช้พลังงานเยอะๆ ตลอดเวลาก็น่าจะต่ำกว่านี้)
  • พิมพ์ข้อความใน Excel แล้วให้มีเสียงพูด

    วันนี้มาแนะนำเทคนิคง่าย ๆ ในการพิมพ์ลงในเซลให้มีเสียงอ่านอัตโนมัติ เราพิมพ์อะไรลงไปก็ให้มันอ่านคำนั้นออกมา มีวิธีการตั้งค่ายังไง มาดูกันค่ะ

    1.เปิด Excel ขึ้นมา ไปที่เมนู File > More > Options

    ตั้งค่าดังรูปข้างต้น จากนั้นจะมี Icon ดังกล่าวแสดงที่แถบ Ribbon ดังรูป

    วิธีการใช้งานให้คลิกปุ่มข้างต้น 1 ครั้ง สังเกตว่าเมื่อคลิกคือเปิดการใช้งาน จะแสดงในลักษณะเหมือนถูกกด ถูกคลิก ถูกใช้งาน จากนั้นมาทดสอบพิมพ์ข้อความช่องไหนก็ได้ เช่นพิมพ์คำว่า Hello แล้วกดปุ่ม “Enter” มันก็จะอ่านว่า “Hello” พิมพ์ประโยค แล้วกดปุ่ม “Enter” ก็จะอ่านทั้งประโยค พิมพ์ตัวเลข เช่น 1 ก็จะอ่านว่า “one” ข้อจำกัดคือจะอ่านเฉพาะภาษาอังกฤษเท่านั้น!!

    หากไม่ใช้งาน Function ดังกล่าวแล้วก็กดที่ปุ่มเดิม เพื่อยกเลิกการใช้งานค่ะ

    อันนี้เป็นเทคนิคน้อย ๆ นะคะในการใช้ Excel การพิมพ์แล้วให้มีเสียงยังไง

  • การตั้งรหัสผ่าน ใน Google Form

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

    1.สร้างฟอร์มขึ้นมา 1 ฟอร์ม กำนหดค่าต่าง ๆ ดังรูป

    หมายถึงต้องกรอกรหัสผ่านของฟอร์มชุดนี้คือ “abc123” หากกรอกผิดจะแสดงข้อความ “คุณกรอกรหัสผิดค่ะ!!!”

    2. Add Section เพื่อเป็นการลงชื่อเข้าใช้ ดังรูป

    3. มาทดสอบกัน กรณีกรอกรหัสผ่านผิด จะกดปุ่ม “Next” ก็ไม่ไปไหน

    4. กรณีกรอกรหัสผ่านถูกต้อง

    กดปุ่ม Next ก็จะสามารถเข้าไปยังหน้าฟอร์มถัดไปได้

    นี่คือเทคนิคการทำรหัสผ่านในการทำฟอร์ม เพื่อให้มีรหัสผ่าน จะทำให้ฟอร์มของเรานี้ปลอดภัยมากยิ่งขึ้นค่ะ

  • ขยับแถว (row) ขึ้น/ลง ใน ASP.NET Gridview ด้วย jQuery

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

    โดยมีขั้นตอนดังต่อไปนี้

    1. เพิ่มโค้ด HTML สำหรับแสดงผลข้อมูล Gridview

    <asp:ScriptManager runat="server"></asp:ScriptManager>
    
    <asp:GridView ID="gvBib" runat="server" AutoGenerateColumns="False">
        <Columns>
    
            <asp:BoundField DataField="BIB_NO" HeaderText="Bib#" />
            <asp:BoundField DataField="TITLE" HeaderText="Title" />
            <asp:BoundField DataField="AUTHOR" HeaderText="Author" />
            <asp:BoundField DataField="CALL_NO" HeaderText="CallNo" />
            <asp:BoundField DataField="ISBN" HeaderText="ISBN" />
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:UpdatePanel runat="server">
                        <ContentTemplate>
                            <button class="up">UP</button>
                            <button class="down">DOWN</button>
                        </ContentTemplate>
                    </asp:UpdatePanel>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

    จะสังเกตว่าจะมีฟิลด์ที่เป็น ItemTemplate สำหรับแสดงผลปุ่ม UP และปุ่ม DOWN สำหรับใช้ในการเลื่อน row นั้นๆ ขึ้นหรือลง

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

    2. เพิ่มโค้ดใน event Page_Load ในหน้า code behind เพื่อจำลองข้อมูลที่จะใช้แสดงใน GridView

    protected void Page_Load(object sender, EventArgs e)
    {
        if(!IsPostBack)
        {
            DataTable dt = new DataTable();
            dt.Columns.AddRange(new DataColumn[5] { new DataColumn("BIB_NO"), 
                                                    new DataColumn("TITLE"), 
                                                    new DataColumn("AUTHOR"),
                                                    new DataColumn("CALL_NO"),
                                                    new DataColumn("ISBN")});
            dt.Rows.Add("001", "1 ทศวรรษ ดัชนีสุขภาพคนไทย", "สำนักงานคณะกรรมการสุขภาพแห่งชาติ (สช.)", "WA13 ห159 2556", "9786160822258");
            dt.Rows.Add("002", "ความลับในร่างกายมนุษย์ที่เราไม่เคยรู้", "ฟรานซิส, เกวิน", "QS4 ฟ133a 2560", "9786168022887");
            dt.Rows.Add("003", "The best ICU", "ดุสิต สถาวร", "WX218 B561 2560", "9786168122020");
            dt.Rows.Add("004", "COVID-19 โรคระบาดแห่งศตวรรษ", "นำชัย ชีววิวรรธน์", "QW168.5.C8 น515c 2563", "9789740217060");
            dt.Rows.Add("005", "Good health & smart life ในวัย 40+", "ไวต์, จอห์น", "WT104 ว967g 2560", "9786160827237");
            gvBib.DataSource = dt;
            gvBib.DataBind();
        }
        
    }

    เนื่องจากโค้ดตัวอย่างมีการใช้งาน class DataTable และ DataColumn ซึ่งอยู่ใน namespace System.Data เพราะฉะนั้นจะต้อง Import namespace นี้ด้วย

    using System.Data;

    3. เพิ่มโค้ด jQuery สำหรับควบคุมการทำงานปุ่ม UP/DOWN โดยหลักการทำงานคือ เมื่อคลิกปุ่ม UP หรือ DOWN แถวที่เลือก จะถูกขยับหรือลง 1 เรคคอร์ด

    //เมื่อคลิกปุ่ม UP
    $(document).on("click", ".up", function () {
    
        //เก็บเร็คคอร์ดที่ถูกคลิกเอาไว้
        var curRow = $(this).closest('tr');
    
    
        //ย้ายเร็คคอร์ดปัจจุบัน ไปอยู่ในตำแหน่งก่อนหน้า เร็คคอร์ดที่อยู่ก่อนหน้า
        curRow.insertBefore(curRow.prev());
    
    });
    
    //เมื่อคลิกปุ่ม DOWN
    $(document).on("click", ".down", function () {
        var curRow = $(this).closest('tr');
        curRow.insertAfter(curRow.next());
    });

    เมื่อทดลองรัน จะปรากฏผลลัพธ์ดังรูปด้านล่าง

    เมื่อทดลองกดปุ่ม UP ในช่อง Bib#005 เรคคอร์ดนั้นก็จะขยับขึ้นไปอยู่บน Bib#004 ดังรูป
    แต่ถ้าทดลองกดปุ่ม UP ในเรคคอร์ด Bib#001 เรคคอร์ดนี้จะถูกเลื่อนขึ้นไปอยู่เหนือเรคคอร์ดที่เป็น Header ของตารางซึ่งไม่ถูกต้อง
    4. เราจะต้องแก้ไขโค้ด jQuery เพิ่มเติม โดยแก้ไขเฉพาะกรณีคลิกปุ่ม UP เพื่อตรวจสอบก่อนว่า เรคคอร์ดที่คลิกเป็นเรคคอร์ดบนสุด (ยกเว้น header) หรือยัง
    //เมื่อคลิกปุ่ม UP
    $(document).on("click", ".up", function () {
    
        //เก็บเร็คคอร์ดที่ถูกคลิกเอาไว้
        var curRow = $(this).closest("tr");
    
        //เก็บเร็คคอร์ดแรกสุดของตารางเอาไว้ ซึ่งก็คือเรคคอร์ดหัวตาราง 
        //ที่เราจะไม่อนุญาตให้เอาเรคคอร์ดอื่นมาแทรก
        var firstRow = $("[id*=gvBib] tr:first");
    
        //ตรวจสอบว่าเร็คอคอร์ดก่อนหน้าของเร็คคอร์ดที่เรากดปุ่ม คือเร็คคอร็ดที่เป็นหัวตารางหรือไม่
        //ถ้าไม่ใช่ก็จะทำการย้ายเร็คคอร์ด
        if (curRow.prev().html() != firstRow.html() ) {
    
            //ย้ายเร็คคอร์ดปัจจุบัน ไปอยู่ในตำแหน่งก่อนหน้า เร็คคอร์ดที่อยู่ก่อนหน้า
            curRow.insertBefore(curRow.prev());
        }
    });

    เมื่อทดสอบอีกครั้ง ก็จะพบว่า ไม่สามารถกด UP เรคคอร์ดที่อยู่ใต้ Header ได้อีกแล้ว

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


    แหล่งข้อมูลอ้างอิง

    • https://stackoverflow.com/questions/16524497/jquery-to-move-row-up-and-down
    • https://stackoverflow.com/questions/36243730/jquery-to-compare-rows-in-two-tables
  • วิธี Zoom icon บน iPhone

    เวลาที่เราจะต้องการ Capture เพื่อทำคู่มือ หรือ ต้องการส่งหน้าจอให้ผู้อื่นดูว่าใช้ Icon ไหนในการเข้าใช้งาน เราสามารถ Capture หน้าจอพร้อมทั้ง Zoom Icon ให้ผู้ใช้เห็นกันชัดๆ อีกด้วย โดยมีขั้นตอนดังนี้ค่ะ

    1. Capture หน้าจอ โดยกดปุ่ม Home พร้อมกับปุ่ม Power จะเข้าหน้าจอของการแก้ไขภาพ  เลือกเครื่องหมาย + กด แล้วเลือก Magnifier


    2. ปรากฏแว่นขยาย ให้เลือกเลื่อนไปยัง Icon ที่เราต้องการ Zoom แล้วปรับขนาดได้ตามต้องการ

    3. จะได้หน้าจอผลลัพธ์ที่เราได้ Zoom ไว้

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

  • Big Data Framework

    ออกตัวไว้ก่อนนะครับบทความนี้เป็นการย่อความหรือถอดสาระสำคัญมาจาก หนังสือกรอบการวิเคราะห์ข้อมูลขนาดใหญ่ภาครัฐ ภายใต้การกำกับดูแลของ สำนักงานพัฒนารัฐบาลดิจิทัล (สพร.) ซึ่งจะนำเสนอในส่วนของการตั้งทีมเพื่อพัฒนา Big Data แนวทางการพัฒนาทั้งข้อมูลและกลุ่มคนที่จะดำเนินการพัฒนาระบบให้บริการข้อมูล เพื่อประยุกร์ใช้กับการนำข้อมูลไปประกอบการพัฒนามหาวิทยาลัยของเราในรูปแบบ (Data Driven Organization)

    ภาพที่ 1 กลุ่มเป้าหมายการพัฒนาบุคลากรด้านการใช้ประโยชน์ข้อมูลขนาดใหญ่

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

    2) กลุ่มผู้วิเคราะห์ ประมวลและแสดงผลข้อมูล ได้แก่ นักวิทยาศาสตร์ข้อมูล (Data Scientist) นักวิเคราะห์ข้อมูล (Data Analyst) และนักนิทัศน์ข้อมูล (Data Visualizer) มีหน้าที่ในการนำข้อมูลมาจัดกลุ่ม วิเคราะห์และประมวลผล พร้อมทั้งพัฒนาภาพแบบ แสดงผลข้อมูลหรือ Dashboard สำหรับการนำเสนอข้อมูล

    3) กลุ่มผู้สร้างและพัฒนาระบบ ได้แก่ วิศวกรข้อมูล (Data Engineer) สถาปนิก ข้อมูล(Data Architect) นักวิเคราะห์ธุรกิจ(Business Analyst)ผู้จัดการโครงการ (Project Manager) และเจ้าหน้าที่เทคโนโลยีสารสนเทศด้านความปลอดภัยไซเบอร์ (Corporate Security IT Operator) มีหน้าที่ในการออกแบบและพัฒนาโครงสร้างพื้นฐานด้านข้อมูล รวมทั้งดูแลและบริหารจัดการข้อมูลให้อยู่ในสภาพที่พร้อมใช้งานอย่างต่อเนื่องและปลอดภัย

    นอกจากกรอบเรื่องของคนแล้วก็ยังมีกรอบเรื่องระยะเวลาด้วย

    ภาพที่ 2 กรอบระยะการดำเนินการ 3 ระยะ

    ระยะสั้น :  การพัฒนาแพลตฟอร์ม (Platform) เสริมสร้างทักษะที่เรียกว่า Sandbox สำหรับการพัฒนาบุคลากรในระยะสั้น เริ่มตั้งแต่การกำหนดโจทย์การพัฒนาโครงสร้าง และระบบข้อมูล การวิเคราะห์และประมวลผลข้อมูล การแสดงผลข้อมูลเชิงประจักษ์ ตลอดไปจนถึงการนำสารสนเทศและองค์ความรู้ที่ได้จากการวิเคราะห์และประมวลผลมาใช้ ประกอบการตัดสินใจและการดำเนินงานในรูปแบบต่างๆแพลตฟอร์มดังกล่าวเน้นการพัฒนา บุคลากรผ่านหลักสูตรที่นำรูปแบบการพัฒนาแบบการเรียนแบบใช้โครงงานเป็นฐาน (Project Based Learning) มาปรับใช้เพื่อให้ผู้เข้ารับการฝึกอบรมสามารถ “ทำได้ ทำเป็น” มากกว่า เรียนรู้จากทฤษฎีโดยการดำเนินงานร่วมกับหลักสูตรนักบริหารภาครัฐเพื่อการบูรณาการ การพัฒนาประเทศไทย ตามกรอบการปฏิรูปประเทศ ยุทธศาสตร์ชาติและการสร้าง ความสามัคคีปรองดอง (ป.ย.ป.) โดยมีหน่วยงานหลักที่เกี่ยวข้อง ได้แก่ กระทรวงดิจิทัล เพื่อเศรษฐกิจและสังคม (ดศ.)สำนักงานคณะกรรมการดิจิทัลเพื่อเศรษฐกิจและสังคมแห่งชาติ (สดช.) สำนักงานคณะกรรมการข้าราชการพลเรือน (สกพ.) สำนักงานพัฒนารัฐบาลดิจิทัล (องค์กรมหาชน) (สพร.)และสถาบันสถาบันส่งเสริมการวิเคราะห์และบริหารข้อมูลขนาดใหญ่ ภาครัฐ (GBDi) 

    ระยะกลาง : การวางแผนการบริหารจัดการกำลังคนเพื่อการใช้ประโยชน์ข้อมูล ขนาดใหญ่ที่มีความคล่องตัว สามารถสนับสนุนการพัฒนานโยบาย การตัดสินใจ การบริหาร จัดการ การให้บริการ และการพัฒนานวัตกรรมภาครัฐ มีกรอบการดำเนินงานดังนี้ 

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

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

      3) กลุ่มหน่วยงานที่ขาดแคลนบุคลากรด้านข้อมูล แต่มีความจำเป็นต้องนำข้อมูลมาใช้ประโยชน์เพื่อการตัดสินใจ การกำหนดนโยบาย หรือการบริหารจัดการต่าง ๆ
    • นำบุคลากรที่มีทักษะและความเชี่ยวชาญเฉพาะทางจากหน่วยงานต่าง ๆ       มารวมไว้ภายในหน่วยงานเดียว เช่นพัฒนารูปแบบการทำงานในลักษณะเป็น “ทีมที่ปรึกษา” (Agile Team) เพื่อให้บริการหน่วยงานภาครัฐโดยอาจนำที่ปรึกษาภายนอกหรือหน่วยงานเอกชนมาร่วมดำเนินงานในรูปแบบต่าง ๆ หรือให้มีการพัฒนารูปแบบการจ้างงานใหม่นอกเหนือจาก “ข้าราชการ/พนักงานราชการ” เพื่อดึงดูด/จูงใจ และอาจมีการเพิ่ม “สายงานเฉพาะทาง” สำหรับผู้ปฏิบัติงานที่ต้องใช้องค์ความรู้เกี่ยวกับการวิเคราะห์ข้อมูล มีการดูแลความก้าวหน้าในอาชีพ มีการสร้างโอกาสการพัฒนาที่ต่อเนื่อง มีการให้ค่าตอบแทนที่เหมาะสม มีการปรับกรอบอัตรากำลังให้สอดคล้องกับลักษณะงานที่มีความซับซ้อนและความต้องการบุคลากรที่มีสมรรถนะสูงและมีความเป็นมืออาชีพ ทั้งนี้อาจมีการนำ       วุฒิบัตรหรือประกาศนียบัตรรับรองมาตรฐานหรือสมรรถนะด้านการวิเคราะห์ข้อมูลมาใช้ในการบริหารจัดการกำลังคนด้วย
    • พัฒนาขีดความสามารถของผู้ใช้ข้อมูลกลุ่มต่างๆได้แก่ผู้บริหารระดับสูงผู้อำนวยการกอง ผู้ทำงานด้านนโยบายและวิชาการ และผู้ทำงานด้านบริการให้สามารถกำหนดโจทย์หรือประเด็นที่ต้องการวิเคราะห์ข้อมูลและนำสารสนเทศที่เป็นผลจากการวิเคราะห์และนำเสนอข้อมูลมาใช้ประกอบการดำเนินงานได้อย่างเหมาะสม รวมทั้งยกระดับศักยภาพผู้ปฏิบัติงานด้านเทคโนโลยีสารสนเทศของหน่วยงาน โดยอย่างน้อยให้มีความสามารถในการกำกับควบคุมงานจ้างที่ปรึกษา (Project Management) และในการบริหารจัดการข้อมูลอย่างปลอดภัยและมีธรรมาภิบาล (Data Governance) 
    • นำกลไกการให้ทุนรัฐบาลมาใช้สนับสนุนการสร้างและพัฒนากำลังคนด้านการวิเคราะห์และใช้ประโยชน์ข้อมูลขนาดใหญ่ทั้งในระยะสั้นและระยะยาว
    • วางระบบการบริหารองค์ความรู้และเก็บรวบรวมข้อมูลการดำเนินงานเพื่อสร้างความต่อเนื่องในการดำเนินงาน

    ระยะยาว : การต่อยอดขยายผลโดยมีเป้าหมายเพื่อให้เกิดการแบ่งปันและสร้าง ประโยชน์ในทรัพยากรข้อมูลของทุกภาคส่วน เพื่อการพัฒนาต่อยอดการสร้างมูลค่าเพิ่ม ให้กับระบบเศรษฐกิจ สร้างความมั่นคงให้กับสังคม และสร้างการพัฒนาที่ยั่งยืน โดยเน้นส่งเสริมสนับสนุนการพัฒนาพันธมิตรธุรกิจระหว่างภาครัฐและเอกชน ทั้งภายในและ ระหว่างประเทศภายใต้เจตจำนงค์ร่วมกัน โดยร่วมสร้าง Open Government DataPlatform for Business and Citizen ให้ความรู้และสร้างภูมิคุ้มกันเพื่อให้ประชาชนมีความเข้าใจ ที่ถูกต้องเกี่ยวกับการดูแลความปลอดภัยของข้อมูลส่วนบุคคล และการนำข้อมูลเปิดภาครัฐ มาใช้เพื่อพัฒนาต่อยอดและสร้างมูลค่าเพิ่ม

    ภาพที่ 3 ขั้นตอนการทำโครงการบิ๊กดาต้า

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

    ทั้งหมดนี้เป็นแนวทางโดยภาพรวมที่องค์กรพึ่งดำเนินการถ้าต้องการพัฒนาเป็นองค์กรที่ใช้ข้อมูลเพื่อการดำเนินงาน Data Driven Organization และต้องการมี Big Data เพื่อการพยากรณ์ความเป็นไปได้ในอนาคตและเพิ่มทางเลือกที่อาจจะซ่อนอยู่ในข้อมูลที่มีแต่ยังมองไม่เห็น ขอบคุณครับ