Month: May 2022

  • ✏️ More than noting “Notion”

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

    จะดีไหมถ้ามีเครื่องสักตัวหนึ่งที่ เราสามารถจดโน๊ตของเราได้อย่างมีประสิทธิภาพแล้ว มันสามารถนำข้อมูลที่เราจดไป มาใช้งานต่อได้อีก เช่นการจดรายงานการประชุมโดยมีการแปะลิ้งค์ รูป ข้อความได้ลงในหน้ากระดาษ แล้วใช้การ mentions ผู้เข้าร่วมประชุมให้มา revise และ approve ได้ จุดไหนผิดถูกสามารถ comment ได้ เมื่อแก้ไขเสร็จแล้วก็สามารถ Lock ไฟล์นั้นๆได้และ Export ออกไปเป็น PDF สำหรับการส่งรายงานก็ทำได้เช่นกัน

    🤔 What is Notion?


    Website: Notion – One workspace. Every team.

    Notion เป็นเครื่องมือการจดโน๊ตที่เป็นได้มากกว่าการจด จดแล้วก็สามารถนำไปประยุกต์ใช้ได้ ในระหว่างการจดก็มีเครื่องมือที่อำนวยความสะดวกเช่น การใส่ Heading1,2,3 List ประเภทต่างๆ Checkbox และอื่นๆอีกมากมาย และที่สำคัญ เราสามารถเก็บข้อมูลในรูปแบบของ Database ได้ ซึ่งเราก็จะสามารถเรียกใช้ซ้ำ ใส่ความเชื่อมโยงให้กับ Database หลายๆอันที่เราสร้างขึ้นมาได้ อันนี้แค่ยกตัวอย่างมาส่วนหนึ่งนะครับ ตัวเครื่องมือนี้เราสามารถนำไปประยุกต์ให้เข้ากับการใช้งานในชีวิตประจำวันของเราด้วยท่าทางไหนก็ได้ จะเห็นได้ว่ามีประโยชน์มากๆ ผมจึงอยากแนะนำให้ทุกคนมาใช้กัน

    Notion เป็น base on web-browser application สามารถทำได้จากอุปกรณ์ไหนก็ได้ แถมยังมีเวอร์ชั่น Windows/Mac OS iOS และ Android อีกด้วย

    Used cases of using Notion


    Note

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

    Work log

    เป็นการจดบันทึกการปฏิบัติงานโดยการใช้ส่วนของ Database มาเก็บข้อมูลและจัดการข้อมูลประเภทของ work log และรายละเอียดการทำงาน สามารถตั้งให้แสดงผลในรูปแบบของ Table หรือ List หรือ Calendar ก็ได้ด้วย เมื่อถึงรอบรายงานก็ Export ออกเป็น csv หรือทำการแชร์หน้าที่จดบันทึกไปยังผู้ประเมินได้โดยตรง

    Software Document

    เป็นการประยุกต์ใช้การจดบันทึก แต่เราสามารถสร้าง Template ให้กับเอกสารได้ซึ่งเราสามารถตั้งให้มี Layout แบบเฉพาะได้ ตั้งส่วนของ Header ส่วนต่างๆตั้งไว้ได้ ตั้งส่วนของตัวอย่างข้อมูลไว้ได้ เวลาเราจะสร้างเอกสารก็สามารถเลือก Template นั้นมาใช้งานได้เลยโดยไม่ต้องเสียเวลาสร้างใหม่ตั้งแต่ต้น


    จริงๆแล้วตัว Notion เองก็มี Template สำเร็จรูปมาให้เราใช้งานด้วยเช่นกัน มีเยอะมาก หลากหลายหมวด สามารถเลือกใช้มาตั้งต้นแล้วใช้งานต่อได้เลย

  • DevToys รวมเครื่องมือใช้บ่อยของโปรแกรมเมอร์

    เคยมั้ยครับ

    ได้ข้อมูลรูปแบบ JSON มาอยากจัดรูปแบบให้อ่านได้ง่าย (ค้น google หาเว็บจัดรูปแบบ)

    อยาก Decode JWT ออกมาดูก่อนเริ่มเขียนโปรแกรมอ่านค่า (ค้น google หาเว็บ Decode)

    อยากทดสอบ Regex ที่เขียนว่าถูกต้องหรือไม่ (ค้น google หาเว็บทดสอบ)

    ฯลฯ

    https://devtoys.app/

    DevToys คือ ซอฟแวร์ที่รวมเอา Utility ที่เหล่า Dev ใช้งานบ่อยๆเอาไว้ที่เดียวกัน ในรูปแบบ Windows App ทำให้สะดวกต่อการเรียกใช้งานมากครับ และที่สำคัญฟรี เพราะพัฒนาขึ้นโดย Community ของ Dev ที่ทำงานบนระบบปฏิบัติการ Windows แล้วรู้สึกว่าขาดสิ่งอำนวยความสะดวกเหล่านี้ (แนวคิดคล้ายๆกับ PowerToys ชื่อยังล้อกันมาด้วย)

    โดยโปรแกรมนี้ก็จะมีเมนูที่แบ่งหมวดหมู่แยกไว้ตามแต่ละประเภท ดังรูป

    เมื่อเราคลิกเข้าไปในแต่ละเมนู ก็จะมี UI ที่เรียบง่าย สามารถเข้าใจวิธีการใช้งานได้ทันที

    ตัวอย่างการใช้งาน

  • แก้ปัญหาการเรียกใช้ font ผ่าน css แล้วเกิด error Access to font at has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.

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

    ขั้นตอนที่ 1 ไปตั้งค่าไฟล์ font ที่ต้องการ โดยในที่นี้ เป็น folder fonts โดยไปที่ IIS เลือก folder ที่ต้องการ จากนั้นเลือกเมนู “HTTP Response Headers” จากนั้น กด “Add” ดังรูป

    ขั้นตอนที่ 2 เพิ่ม Name: Access-Control-Allow-Origin และ Value: * ดังรูป

    ขั้นตอนที่ 3 ผลลัพธ์จากการเพิ่ม Name: Access-Control-Allow-Origin และ Value: * ดังรูป

    ขั้นตอนที่ 4 เพิ่ม Name: Access-Control-Allow-Origin และ Value: * ที่ไฟล์ font.css ด้วยเหมือนกัน

    ขั้นตอนที่ 5 ปรับแก้การเรียกใช้ css โดยใช้ SRI Hash Generator ผ่าน SRI Hash Generator

    ขั้นตอนที่ 6 เวบไซต์ปลายทางก็จะสามารถเรียกใช้ font จาก เวบไซต์ต้นทาง ดังรูป

    หวังว่าจะเป็นประโยชน์ให้กับคนที่มีปัญหาแบบเดียวกันนี้นะคะ

    ที่มา

  • วิธีการแปลงไฟล์จาก PDF เป็น Word แบบบ้าน ๆ โดยใช้ Google Drive

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

    ในตัวอย่างวันนี้จะมีวิธีการแปลงไฟล์ PDF เป็น Word วิธีเดียวเท่านั้นแต่….จะทดลองทำให้ดูกับ 2 ไฟล์ ได้แก่

    แบบที่ 1 : ไฟล์ PDF ที่เกิดจากการแปลงจาก Word มาโดยตรง ซึ่งการแปลงไฟล์ PDF มาเป็น Word

    สิ่งที่คิด คือ ข้อความในเอกสารส่วนใหญ่ จะถูกต้องครบถ้วน และสวยงาม

    แบบที่ 2 : ไฟล์ PDF ที่เกิดจากการสแกน หรือเป็นรูปถ่าย การแปลงไฟล์ PDF มาเป็น Word

    สิ่งที่คิด คือ ข้อความจะมีลักษณะไม่เหมือนกับต้นฉบับ อาจจะมีสระหรือวรรณยุกต์ที่ไม่ครบถ้วน แต่สามารถนำไปปรับปรุงต่อให้สวยงามได้ค่ะ

    มาดูวิธีการกันเลย และจะเปรียบเทียบทั้ง 2 แบบเอกสารให้ดูนะคะ

    แบบที่ 1 : เป็นเอกสารที่เกิดจากการแปลงมาจากเอกสาร Word

    เมื่อเปิดไฟล์ในรูปแบบ PDF

    วิธีการคือคลิกที่ไฟล์ที่ต้องการแปลงไฟล์จาก PDF เป็น Word (1) คลิกเลือก Open with (2) คลิกเลือก Google Docs ดังรูป

    รอระบบทำการแปลงไฟล์ ดังรูป

    เมื่อแปลงไฟล์เรียบร้อยจะแสดงเอกสาร Word มาให้ ดังรูป

    แบบที่ 2 : เป็นเอกสารที่เกิดจากการแปลงมาจากเอกสารที่ผ่านการสแกน

    เมื่อเปิดไฟล์ในรูปแบบ PDF

    เมื่อแปลงไฟล์เรียบร้อยจะแสดงเอกสาร Word มาให้ ดังรูป

    สรุปผลการแปลงไฟล์ทั้ง 2 รูปแบบ

    แบบที่ 1 : ไฟล์ PDF ที่เกิดจากการแปลงจาก Word มาโดยตรง ซึ่งการแปลงไฟล์ PDF มาเป็น Word

              สิ่งได้ คือ มีตัวสระที่ยังไม่ถูกต้องนัก อาจจะเป็นเพราะรูปแบบตัวอักษรที่แปลงมา แต่ภาพรวมก็ถือว่าดีมากแล้ว

    แบบที่ 2 : ไฟล์ PDF ที่เกิดจากการสแกน หรือเป็นรูปถ่าย การแปลงไฟล์ PDF มาเป็น Word

              สิ่งได้ คือ ว๊าวมากค่ะ ไม่คิดว่าตัวอักษรที่ออกมาจาะครบถ้วนสมบูรณ์ขนาดนี้ แต่ต้องปรับนิดหน่อยให้สวยงาน

    *** นี่เป็นทางเลือกอีกทางหนึ่งสำหรับคนที่ต้องการแปลงไฟล์จาก PDF มาเป็น Word โดยไม่ต้องง้อโปรแกรมหรือเว็บไซต์ออนไลน์ทั่วไปเลยค่ะ

    ขอบคุณผู้อ่านที่รักทุกท่านค่ะ ^^

  • upgrade crystal report version 10 ไปเป็น version 13

    เนื่องด้วยตอนนี้ crystal report version 10 มันเก่ามากแล้วทางผู้เขียนเลยอยากจะ upgrade crystal report version 10 ไปเป็น version 13 ดังนั้นจึงสรุปขั้นตอนไว้เพื่อเป็นแนวทางการทำงานของคนที่มีปัญหาเดียวกัน ดังนี้

    ขั้นตอนที่ 1 แก้ web.config ใน project web application โดยเปลี่ยนเลข version จาก 10.2.3600.0 เป็น 13.0.2000.0

    ขั้นตอนที่ 2 copy folder crystalreportviewers13 ใส่ไว้ที่ project web application

    ขั้นตอนที่ 3 แก้ page ที่เรียกใช้ crystal report โดยเปลี่ยนเลข version จาก 10.2.3600.0 เป็น 13.0.2000.0

    ขั้นตอนที่ 4 แก้ page ที่เรียกใช้ crystal report โดยเพิ่มการเรียก JavaScript ในส่วนของ tag head

    ขั้นตอนที่ 5 ลองเรียกใช้ page ที่มี crystal report ได้ผลลัพธ์ดังรูป

    ทางผู้เขียนหวังว่าจะมีประโยชน์ในการ upgrade crystal report version 10 ไปเป็น version 13 ใน source code ที่เรียกใช้ version เก่านะคะ

  • สร้าง UI หน้าเว็บแบบ Timeline ด้วย HTML+CSS

    เนื่องจากระบบที่กำลังพัฒนาอยู่ มีความต้องการแสดงผลข้อมูลในรูปแบบ Timeline ดังรูป

    เมื่อลองหาแนวทางดูพบว่ามี how to ที่เว็บไซต์ https://www.w3schools.com/howto/howto_css_timeline.asp ลองนำมาประยุกต์ใช้ โดยปรับสี เพิ่มเงา และส่วนแสดงผลรูป และไอคอนเข้าไป โดยใช้ https://getbootstrap.com/ เวอร์ชัน 5 เพื่อช่วยในการจัดตำแหน่งเนื้อหาด้านใน ก็จะได้ CSS และ HTML สำหรับนำไปใช้ในเว็บไซต์ดังนี้

    
    CSS (ตัด media query ออก เนื่องจากใช้ flex box ช่วยในการทำ responsive อยู่แล้ว)
    
    .timeline {
        position: relative;
        /*max-width: 1200px;*/
        margin: 0 auto;
    }
    
        .timeline::after {
            content: '';
            position: absolute;
            width: 6px;
            background-color: #977c44;
            top: 0;
            bottom: 0;
            left: 50%;
            margin-left: -3px;
        }
    
    .timeline-container {
        padding: 10px 40px;
        position: relative;
        background-color: inherit;
        width: 50%;
    }
    
        .timeline-container::after {
            content: '';
            position: absolute;
            width: 25px;
            height: 25px;
            right: -12px;
            background-color: white;
            border: 4px solid #FF9F55;
            top: 15px;
            border-radius: 50%;
            z-index: 1;
        }
    
    .timeline-left {
        left: 0;
    }
    
    .timeline-right {
        left: 50%;
    }
    
    .timeline-left::before {
        content: " ";
        height: 0;
        position: absolute;
        top: 22px;
        width: 0;
        z-index: 1;
        right: 30px;
        border: medium solid white;
        border-width: 10px 0 10px 10px;
        border-color: transparent transparent transparent white;
    }
    
    .timeline-right::before {
        content: " ";
        height: 0;
        position: absolute;
        top: 22px;
        width: 0;
        z-index: 1;
        left: 30px;
        border: medium solid white;
        border-width: 10px 10px 10px 0;
        border-color: transparent white transparent transparent;
    }
    
    .timeline-right::after {
        left: -12px;
    }
    
    .timeline-content {
        padding: 20px 30px;
        background-color: white;
        position: relative;
        border-radius: 6px;
    }

    HTML โดยในตัวอย่างได้นำโครงสร้าง html page และ ส่วนแสดงอีโมไอคอนออกเพื่อให้อ่านง่าย เห็นโครงสร้าง html ของ timeline ชัดเจน และต้องมีรูปอยู่ที่โฟลเดอร์ images (ภาพประกอบเนื้อหาของท่านเอง)

    /*Include Bootstrap 5*/
    <link href="css/bootstrap.min.css" rel="stylesheet" />
    
    <div class="timeline">
        <div class="timeline-container timeline-left">
            <div class="timeline-content shadow-lg">
                <div class="d-flex justify-content-between align-items-baseline">
                    <img src="/images/location01.jpg" class="rounded-3 img-shadow" width="150" height="150" />
                    <h3 class="text-brown text-shadow">พ.ศ. 1601-1700</h3>
                </div>
                <p>อุทยานประวัติศาสตร์พระนครศรีอยุธยา สัมผัสความรุ่งเรืองของกรุงศรีอยุธยา อดีตราชธานีที่ปกครองแผ่นดินมายาวนานถึง 417 ปี ภายในมีโบราณสถานมากมายน่าเที่ยว ทั้ง พระราชวังหลวง วัดพระศรีสรรเพชญ์ วัดราชบูรณะ วัดมหาธาตุ วัดไชย...</p>
            </div>
        </div>
        <div class="timeline-container timeline-right">
            <div class="timeline-content shadow-lg">
                <div class="d-flex justify-content-between align-items-baseline">
                    <img src="/images/location02.jpg" class="rounded-3 img-shadow" width="150" height="150" />
                    <h3 class="text-brown text-shadow">พ.ศ. 1601-1700</h3>
                </div>
                <p>อุทยานประวัติศาสตร์พนมรุ้ง ปราสาทหินพนมรุ้งเป็นโบสถ์พราหมณ์ลัทธิไศวะ มีการบูรณะก่อสร้างต่อเนื่องกันมาหลายสมัย ตั้งแต่ประมาณพุทธศตวรรษที่ 15 ถึงพุทธศตวรรษที่ 17 และในพุทธศตวรรษที่ 18 พระเจ้าชัยวรมันที่ 7 แห่ง...</p>
            </div>
        </div>
        <div class="timeline-container timeline-left">
            <div class="timeline-content shadow-lg">
                <div class="d-flex justify-content-between align-items-baseline">
                    <img src="/images/location01.jpg" class="rounded-3 img-shadow" width="150" height="150" />
                    <h3 class="text-brown text-shadow">พ.ศ. 1601-1700</h3>
                </div>
                <p>อุทยานประวัติศาสตร์พระนครศรีอยุธยา สัมผัสความรุ่งเรืองของกรุงศรีอยุธยา อดีตราชธานีที่ปกครองแผ่นดินมายาวนานถึง 417 ปี ภายในมีโบราณสถานมากมายน่าเที่ยว ทั้ง พระราชวังหลวง วัดพระศรีสรรเพชญ์ วัดราชบูรณะ วัดมหาธาตุ วัดไชย...</p>
            </div>
        </div>
        <div class="timeline-container timeline-right">
            <div class="timeline-content shadow-lg">
                <div class="d-flex justify-content-between align-items-baseline">
                    <img src="/images/location02.jpg" class="rounded-3 img-shadow" width="150" height="150" />
                    <h3 class="text-brown text-shadow">พ.ศ. 1792-2006</h3>
                </div>
                <p>อุทยานประวัติศาสตร์ศรีสัชนาลัย ศรีสัชนาลัย มีพัฒนาการมาแต่สมัยก่อนประวัติศาสตร์ตอนปลาย ประมาณ ๒,๓๐๐ – ๑,๕๐๐ ปีมาแล้ว โดยปรากฏชื่อควบคู่ไปกับเมืองสุโขทัยที่เป็นราชธานี สันนิษฐานว่าเมืองศรีสัชนาลัยมีความสำคัญในฐาน...</p>
            </div>
        </div>
    </div>

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

  • UX Design Processes

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

    รูปภาพแสดง design process โดย The Efficient Approach: How to Design a Lean UX MVP | Toptal

    Step 1 : Understanding Environment (Discovery phase)

    เป็น phase แห่งการทำความเข้าใจ การทำความเข้าใจในที่นี้หมายถึง การที่เราเข้าใจผู้ใช้, เข้าใจ brand, เข้าใจในเงื่อนไขต่างๆ เพื่อที่จะเอามาเป็นแนวทางในการทำ research ให้ phase ถัดไป

    • User การทำความเข้าใจผู้ใช้งานระบบ -> Pain Point discovery
      • การค้นหา Pain point ของผู้ใช้
      • เราต้องเข้าใจว่าปัญหาของผู้ใช้คืออะไรบ้าง
      • เราคิดว่าจะแก้ไขปัญหาให้กับผู้ใช้ได้อย่างไรบ้าง
    • Brand เป้าหมาย/จุดประสงค์ขององค์กร
      • เราต้องรู้โปรเจคนี้มีความเกี่ยวข้องกับภารกิจหรือเป้าหมายขององค์กรเราอย่างไร ต้องพยายามยึดติดอยู่กับเป้าหมายขององค์กรเพราะมันจะเป็นสิ่งที่ทำให้องค์กรประสบความสำเร็จได้
    • Clear Needs & Conditions ความต้องการและเงื่อนไขที่ชัดเจน
      • เราจะทำอะไร
      • เราต้องทำภายใต้เงื่อนไขอะไรบ้าง

    Step 2 : Research (Infomation Gathering, Hypothesis phase)

    เมื่อเราทราบถึงเป้าหมายของการสร้างหรือพัฒนาสินค้าและทราบถึงปัญหาของผู้ใช้แล้ว ขั้นต่อไปคือการค้นหาข้อมูลเพิ่มเติม

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

    Interview การสัมภาษณ์

    • 1:1 Interview การสัมภาษณ์ตัวต่อตัวกับผู้ใช้
      • จะเป็นเหมือนการพูดคุยทั่วไปถึงเรื่องการใช้งานระบบ เคยเจอปัญหาอะไรมาบ้าง ยังคงติดปัญหาในจุดไหนอยู่ไหม ในการใช้งานระบบเขามองหาอะไรอยู่
      • การสัมภาษณ์แบบตัวต่อตัวทำให้ทราบถึงความจริงใจและอารมณ์ของผู้ใช้ สามารถนำมาเป็นตัววัดความเที่ยงตรง เชื่อถือได้ของข้อมูลชุดนั้น
      • การสัมภาษณ์แบบนี้สามารถทำแบบพูดคุยตัวต่อตัวหรือทาง meeting/conference/telephone ก็ได้
    • Group Interview การสัมภาษณ์แบบกลุ่ม
      • เป็นวิธีการที่ให้ข้อมูลได้แบบไม่ค่อยละเอียด แต่ได้จุดที่สำคัญ มีการกรองกันจากการพูดคุยภายในกลุ่ม ลักษณะการถามก็จะเป็นเหมือนการสัมภาษณ์แบบตัวต่อตัว
      • การสัมภาษณ์ด้วยวิธีนี้อาจจะต้องนำข้อมูลมาวิเคราะห์ค่าเฉลี่ยเพิ่มขึ้นมา
      • กลุ่มของผู้ใช้ 3-5 คนก็เพียงพอไม่จำเป็นต้องไปเก็บจากผู้ใช้ 100-1000 คน (Rule of thumb)

    Surveys การทำแบบสอบถาม

    ในการสร้างแบบสอบถามขึ้นมา เราต้องรู้ถึงปัญหาของผู้ใช้ ปัญหานี้เกิดในผู้ใช้กลุ่มไหน แล้วนำข้อมูลนั้นมาวิเคราะห์ออกมาเป็นสมมติฐาน

    • หลักการสร้างแบบสอบถาม
      • แยกปัญหาออกมา โดยดูความสำคัญว่า ปัญหาอันไหนสามารถวัดและทำ Testing ได้แล้วนำมาทำให้เป็นคำถามแบบที่ Interactive ได้
      • พยายามตั้งคำถามปลายเปิดแต่ยังสามารถทำให้เรามองเห็นคำตอบได้
      • *ไม่ควรตั้งคำถาม Yes/No, Rating เนื่องจากไม่สามารถนำข้อมูลมาพัฒนาต่อได้
    รูปภาพแสดงการทำ Heat map analysis
    • ตัวอย่างของการทำ survey ที่ดี
      • Hypothesis: สงสัยว่าหน้าแรกของระบบมันไม่จูงใจผู้ใช้ ทำให้ผู้ใช้ออก (nothing grabs user’s attention)
        • วิธีถาม: 5seconds test นำหน้าเว็ปจริงๆมาและใช้ Heat map ในการวิเคราะห์โดยกำหนดโจทย์ว่า ให้ผู้ประเมินคลิกจุดแรกที่ผู้ใช้สนใจภายใน 5วินาที
        • คำตอบ: Heat map result ผู้ใช้สนใจตรงไหนมากที่สุด สามารถนำข้อมูลมาวิเคราะห์ต่อได้
      • Hypothesis: ข้อสงสัยที่คิดว่าลูกค้าไม่เข้าใจว่าเค้าทำอะไรได้บ้างบนเว็ปไซต์ของเขา
        • วิธีถาม: 5seconds test ดูหน้าเว็ปแล้วถามว่า คิดว่าหน้านี้เขาสามารถทำอะไรได้บ้าง
        • คำตอบ: ลำดับของความชัดเจนว่า ผู้ใช้สนใจอะไรเป็นอันดับแรก และอันดับตามๆมา
      • Hypothesis: สงสัยว่า content มันน่าจะไม่ดึงดูดผู้ใช้แน่ๆ
        • วิธีถาม: นำเว็ปไซต์คู่แข่งมาเปิดคู่กันกับเว็ปไซต์เราและทำในลักษณะของ A/B testing โดยทำ hot spot test ให้ผู้ประเมินเลือก section ของเว็ปตัวอย่าง 3 ชิ้นที่คิดว่าจำเป็นสำหรับเขา
        • คำตอบ: section ที่เขามองหาแต่เราไม่มี หรือจุดไหนที่มีเหมือนกัน หรือจุดไหนที่เรามีแต่คนอื่นไม่มี
    • ข้อดี:: Scale ได้, รวดเร็ว, วิเคราะห์ง่าย
    • ข้อเสีย:: คำตอบอาจจะมีการเอนเอียงได้ (Bias) ไม่สามารถอธิบายแทนสิ่งที่ผู้ใช้เจอมาได้ทั้งหมด คำตอบที่ได้ไม่หลากหลาย และมีความเสี่ยงต่อการสูญเสียข้อมูลจากผู้ใช้ ถ้ามีการออกแบบแบบสอบถามไม่ดี ทำให้เกิดการพลาดโอกาส

    Usability Testing การสำรวจการใช้งานในกลุ่มเป้าหมาย

    การทำ Usability test จะทำให้เราทราบถึง pain point และ happy point ของระบบได้ชัดเจนมากขึ้น

    • User testing คือการทำ test โดยการเปิดหน้าจอให้ผู้ใช้ลองทำ Task บางอย่างแล้วเราสังเกตุการใช้งาน แล้วบันทึกวิธีการ Interact และ Reaction ของผู้ใช้ระหว่างการใช้งาน
    • A/B Testing คือการทำ test โดยมีการสร้างระบบขึ้นมา 2 เวอร์ชั่นขึ้นไปมา แล้วนำไปทำ user testing เพื่อวัดผลว่าเวอร์ชั่นไหน user happy ที่สุด
      • อาจจะทำเป็น Prototype ก็ได้ ไม่จำเป็นต้อง Coding ขึ้นมาจริงๆ
    • Click heat คือการดูว่าผู้ใช้กำลังคลิกตรงไหน บริเวณไหนที่มีการ Interact บ่อยๆหรือไม่มีการ Interact ทำให้เราได้ข้อมูลสมมติฐานไปคุยกับ user ต่อไปได้ (tool e.g. Hotjar)

    Contextual Inquiry การสำรวจโดยลงพื้นที่จริง ที่มีการใช้งานจริง

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

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

    วิธีการทำ Research อื่นๆ ศึกษาต่อได้ที่ More Research Techniques


    Step 3 : Analyze (Brain Storming)

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

    รูปภาพแสดง User Persona

    User Persona สร้างโปรไฟล์ตัวอย่างของผู้ใช้

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

    • Bare necessities ข้อมูลจำเป็นเบื้องต้น
      • ชื่อ-นามสกุล อายุ เพศ ที่อยู่ อาชีพ และอื่นๆ
      • ประวัติโดยย่อ
      • แผนผังบุคลิก
    • User’s image รูปภาพของผู้ใช้
      • บางครั้งรูปภาพของผู้ใช้สามารถบ่งบอกได้ถึงหลายๆอย่าง มากกว่าการเขียนบรรยาย
      • การแต่งกายของผู้ใช้ก็สามารถบ่งบอกถึงบุคลิกได้
    • Personality แถบที่บ่งบอกถึงนิสัยของผู้ใช้
      • สามารถทำเป็นแถบค่าพลังบ่งบอกความเป็นบุคลิกต่างๆได้เช่น Extroverted ⇔ Introverted, Passive ⇔ Active, Analytical ⇔ Creative เป็นต้น
    • Goals and Motivations เป้าหมายและแรงบรรดาลใจ
      • เป้าหมายของผู้ใช้ ทำให้เราสามารถสร้างระบบที่ไปตอบโจทย์เป้าหมายของผู้ใช้
      • แรงบรรดาลใจของผู้ใช้ ก็สามารถนำมาเป็นปัจจัยที่ต้องนำมาวิเคราะห์ก่อนออกแบบ
      • ยกตัวอย่าง การซื้อของออนไลน์ผ่านระบบ e-commerce
        • เป้าหมายของผู้ใช้คือ อยากได้สินค้าที่มีราคาถูกที่สุด คุ้มค่าที่สุด
        • แรงบรรดาลใจของผู้ใช้คือ ต้องการการเปรียบเทียบสินค้าในเรทราคาเท่าๆกัน
        • เราสามารถนำข้อมูลทั้ง 2 มาวิเคราะห์ออกแบบระบบให้รองรับได้เช่น การแนะนำสินค้าใกล้เคียงกับสินค้าที่ผู้ใช้กำลังดูอยู่ มีการแนะนำร้านที่แนะนำโดย platform หรือเรียงตามเรทของสินค้า
    • Pain points จุดที่ผู้ใช้ไม่ชอบ หรือ ข้อเสียของระบบที่ต้องแก้
      • เป็นสิ่งที่ต้องวิเคราะห์ออกมาจากการสัมภาสหรือได้มาจากการสัมภาสโดยตรง ข้อมูลส่วนนี้คือสิ่งที่ต้องให้ความสำคัญมากๆ ระบบที่สร้างขึ้นมาจะต้องแก้ไข pain points เหล่านี้ให้ได้
      • แก้ได้ = User happy

    User Journey mapping แผนผังแสดง Interaction ของผู้ใช้

    รูปภาพแสดง User Journey mapping

    การทำ user journey จะช่วยให้เรามองเห็นภาพรวมของระบบ ในขั้นตอนต่างๆว่า ผู้ใช้รู้สึกอย่างไร จุดไหนที่ต้องมีการปรับปรุงอีก

    User journey จะประกอบด้วย Flow การทำงานของระบบที่ผู้ใช้จะต้องเจอ ข้อมูล Emotions หรืออารมณ์ที่ผู้ใช้จะต้องเจอในแต่ละหน้าแต่ละขั้นตอน ข้อมูลความคิดของผู้ใช้ ณ ขณะนั้นซึ่งสัมพันธ์กับข้อมูลอารมณ์ของผู้ใช้ ข้อมูลโอกาสที่เราวิเคราะห์ออกมาว่า ณ ขณะนั้น เราสามารถ Offer อะไรให้กับผู้ใช้ได้บ้าง ข้อมูลประสบการณ์ มีความง่ายในการใช้งานมากแค่ไหน น่าเบื่อหรือไม่ และข้อมูลอื่นๆเพิ่มเติมที่สามารถนำมาวิเคราะห์ได้

    **นอกเหนือจากการทำ User persona และ User journey ที่กล่าวมาข้างต้น ยังมีวิธีการทำ Analyze อีกหลายวิธีเช่น การทำ Storyboard, Card Sorting, SWOT Analysis, Use cases และอื่นๆ More Analyze Techniques


    Step 4 : Design (Experiment phase)

    หลังจากได้ผ่านขั้นตอนแห่งการวิเคราะห์มา ขั้นตอนต่อไปคือการทำให้เกิดขึ้นมา ทำให้ Test ได้ ไม่ว่าจะเป็นการทำ Wireframe หรือ Prototype ขั้นตอนนี้เป็น phase แห่งการทดลอง ลองผิดลองถูก อ้างอิงจาก use case ต่างๆ นำข้อมูลที่ได้จากการ Analyze มาสร้างเป็นสิ่งที่สามารถทดสอบได้ ในขั้นตอนนี้จะประกอบไปด้วยการออกแบบในหลายๆส่วน ส่วนหลักๆจะประกอบไปด้วย

    รูปภาพแสดง Wireframe low-fidelity
    • Site map แผนผังของระบบ
      • ไม่ซับซ้อน
      • หน้าต่างๆอยู่ถูกที่ ถูกลำดับชั้น
    • User flow แผนผังการดำเนินการของผู้ใช้ หน้าไหนไปหน้าไหน
    • Information Architechture ออกแบบโครงสร้างของข้อมูลเช่น จัดหมวดหมู่ให้กับข้อมูล
    • Design system แกนหลักในการออกแบบ ประกอบด้วย
      • Typography ชุดตัวอักษร
      • Color Scheme ชุดโทนสี (Primary, Secondary, Accent, Success, Danger, Warning, Default)
      • Icon ชุด Icon
      • Image โทนการใช้รูปภาพภายในระบบ (Photos, Vertor Images, 3D)
      • (optional) Component สำเร็จรูป
    • Wireframe low-fidelity ต้นแบบของระบบ ไม่จำเป็นต้องมีข้อมูล โครงแบบร่างในกระดาษหรือโปรแกรมที่สามารถบอกได้ถึงความเชื่อมโยงระหว่างหน้าและรูปแบบของหน้าจอ
      • แสดงข้อมูลต่างๆ ที่ต้องแสดงในแต่ละหน้า
      • เป็นตัวตีกรอบโครงสร้างของแต่ละหน้าได้
      • แสดงให้เห็น Flow การทำงานและเป็นตัวอธิบาย Interface ในหน้าต่างๆ
    • Prototype การนำ Wireframe มาลงรายละเอียดจริง และนำมา mockup บนอุปกรณ์ต่างๆ เพื่อใช้ในการทดสอบและประเมินผล

    Loop : Design > Test > Validate > Design > Test > …

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


    Step 5 : Build & Launch (Make it real phase)

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

    รูปภาพแสดง Wireframe Hi-fidelity

    Prototype หรือ Wireframe Hi-fidelity

    Prototype เป็นการนำ Wireframe มาต่อยอด มีการลงรายเอียดส่วนของสัดส่วน สี ตัวอักษร รวมถึง Icon และรูปภาพ ลงรายละเอียด Content จริงๆ มีการเชื่อมโยงปุ่มกับหน้าต่างๆหรือเรียกว่า Prototyping ให้เป็น Flow การทำงานจริงๆขึ้นมา เราสามารถนำผลงานมาขึ้น Mockup เป็น device จริงไปให้ผู้ใช้ได้ทดสอบแทนการเปิดหน้าจอ application ให้ดูผ่านจอก็ได้เช่นกัน ในส่วนนี้สามารถทำได้จากหลากหลายโปรแกรมเช่น Figma, Adobe XD และโปรแกรมอื่นๆเป็นต้น

    Implement an actual application

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

    Make sure your product is perfect! :: Do you trust in your research and analysis?

    ถ้าคิดว่าการ Launch Feature ใหม่หรือสินค้าใหม่ออกสู่ตลาดหรือออกสู่ public ยังไม่กล้าเสี่ยงลองนำผลงานที่ได้ไป

    • ทำ User testing นำไปให้ผู้ใช้ทดสอบเหมือนขั้นตอนการทำ Usability test ในขั้นตอน Research
    • ทำ Internal testing ทดสอบและรีวิวกันเองภายในทีม
    • ทำ Beta Launch ปล่อยระบบให้กับกลุ่มคนเล็กได้ทดสอบ เก็บ Feedback แล้วนำกลับมาแก้ไข

    สุดท้ายแล้วเมื่อปรับปรุงแก้ไขจนคิดว่าอยู่ในเกณฑ์ที่ยอมรับได้ ก็ถึงเวลา Launch ปรับ Version ตัวโปรแกรมจริงๆให้ผู้ใช้ได้ใช้


    Step 6 : Analyze Validation (Collect Feedback) aka ตรวจการบ้าน

    เมื่อเราได้ผ่านขั้นตอนของการสร้างมาแล้ว ผู้ใช้ได้เจอกับสิ่งที่เราปรับปรุงหรือสร้างขึ้นมาใหม่ สิ่งที่เรา research analyze design ไปนั้นมันถูกต้องแล้วใช่หรือไม่ ตอบโจทย์ปัญหา pain point ของผู้ใช้หรือไม่ ดึงดูดให้ผู้ใช้กลับมาใช้งานระบบไหม และแน่นอนสิ่งที่ต้องเกิดคู่กันกับการเปลี่ยนแปลงคือ ผลตอบรับหรือ feedback เราจะต้องมีการเก็บข้อมูล feedback มาวิเคราะห์ อาจจะมีจุดที่เราพลาดไป ทดสอบไม่เจอในกลุ่มการทดสอบ beta ก็จะได้แก้ไข ปรับปรุง feature ให้ตอบโจทย์กว่าเดิม หรือคิดว่าการปรับปรุงระบบไปในแนวทางอื่นๆอาจจะส่งผลได้ดีกว่านี้ ข้อมูลตรงนี้ก็จะไปเป็นสารตั้งต้นของการขึ้นรอบการออกแบบและพัฒนาในรอบถัดๆไป


    Loop Step 1-6 > Step 2-6 > … > Perfect** Product! (at that time)

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

    ปล. การวน loop ในแต่ละครั้งเราสามารถตัดขั้นตอนบางอย่างไปได้เช่น รอบที่ 2 อาจจะเป็นผู้ใช้คนเดิมก็ข้ามไปทำ research ได้เลย หรือมีข้อมูลจาก loop เก่าก็สามารถนำข้อมูลนั้นมา Design & Test ได้เลย การกระทำแบบนี้เราเรียกว่าการ Lean UX Process

    **Perfect มันไม่มีอยู่จริง ไม่ต้องไป keep perfect but ทำให้ใกล้คำว่า perfect ที่สุดจะดีกว่า เราไม่สามารถออกแบบหรือสร้างอะไรสักอย่างที่มันตอบโจทย์คนทั้งโลกได้ แต่ทำให้ดีที่สุดของเราได้

    Summary

    จบแล้วขั้นตอนการออกแบบ UX Design process เบื้องต้น ยาวหน่อยแต่รายละเอียดเกือบครบ จะเห็นได้ว่าจริงๆแล้วขั้นตอนทาง UX design process ได้เข้าไปเกี่ยวข้องกับทุกๆส่วนของชีวิตประวันและของรอบตัว มันมีวิธีการต่างๆหลากหลายรูปแบบ ขึ้นกับมุมมองของผู้ทำ แต่ทุกวิธี base on problem แน่นอน ถ้าเราวิเคราะห์ได้ว่าคนๆนั้นไปเจอปัญหาอะไรมา แล้วเราแก้ไขให้เขาได้ ทำไมเขาจะไม่ซื้อ/ใช้สินค้าของคุณ ที่สำคัญคือ Keep doing research, keep developing.

    Thanks for references:
    The UX design process in 6 stages | Inside Design Blog (invisionapp.com)
    What is user research? | Inside Design Blog (invisionapp.com)
    หลงไปในงาน UX Research at Agoda. เอะนั่นเห็นมี Event UX Research at… | by Dark_Spirit (Warm) | WIP team | Medium
    UX Process – UX Mastery

  • Figma: Scrolling  with overflow behavior (Horizontal Scrolling)

    บล๊อกนี้ผู้เขียนจะมาแนะนำวิธีการตั้งค่า Mobile App Prototype ที่เราได้พัฒนาขึ้นมา (ด้วย figma) เพื่อให้ผู้ใช้สามารถเลื่อน (Scrolling) ส่วนของเนื้อหาที่มีมากจนเกินขนาดของอุปกรณ์ได้ โดยใน figma นั้น สามารถทำ Scrolling เพื่อให้รองรับกับพฤติกรรมของผู้ใช้ได้ 3 แบบ ดังนี้ค่ะ

    แบบที่ 1 Horizontal Scrolling  คือ การเลื่อนในแนวนอน ซ้ายและขวาภายในเฟรม โดยยังคงตำแหน่งแนวตั้งไว้ เช่น ภาพสินค้า , แกลอรี่ภาพ

    แบบที่ 2 Vertical Scrolling คือ การเลื่อนในแนวตั้ง ขึ้นและลงภายในเฟรม เช่น เลื่อนดูเว็บไซต์ที่มีขนาดยาว หรือเนื้อหาที่อยู่ภายในแอป

    แบบที่ 3 Horizontal & Vertical Scrolling คือ การเลื่อนในแนวนอนและแนวตั้ง ผู้ใช้สามารถเลื่อนไปในทิศทางใดก็ได้ภายในเฟรม เช่น การดูแผนที่

    สำหรับบล๊อกนี้นั้น ผู้เขียนขอยกเอา Horizontal Scrolling มาแนะนำกันก่อนนะคะ

    ขั้นตอนหลักๆของการทำ Scrolling ก็มีตามนี้ค่าาาาา

    1. กดเลือก frame ที่ต้องการทำ Scrolling (ต้องเป็น Frame นะคะ จึงจะกำหนด Scrolling ได้)
    2. เปิด panel Prototype ที่แถบด้านขวา
    3. เลือก overflow behavior ตามที่ต้องการ ซึ่งมี 4 ตัวเลือกนะคะ คือ
      • No Scrolling
      • Horizontal Scrolling **
      • Vertical Scrolling
      • Horizontal & Vertical Scrolling

    Horizontal Scrolling ผู้ใช้เลื่อน content ซ้ายและขวาภายใน frame

    วิธีการดูในคลิปได้เลยค่า

    ในคลิป
    วินาทีที่ 0:00:11 ทำ Group ให้เป็น frame (คลิกขวาบน Group แล้วเลือก Frame Selection) อย่างที่บอกกันข้างต้น เนื่องจากหากไม่ใช่ frame จะกำหนด Scrolling ไม่ได้
    วินาทีที่ 0:00:11 ปรับขนาดของ frame และ ซ่อนเนื้อหาที่เกินกรอบ โดยติ๊กถูกที่ Clip Content
    วินาทีที่ 0:00:25 ไปที่ prototype panel แล้วกำหนด Overflow scrolling แบบ Horizontal scrolling
    วินาทีที่ 0:00:34 กด Present ลองดูผลลัพธ์กัน 😉

    Ref : https://help.figma.com/hc/en-us/articles/360039818734-Prototype-scrolling-with-overflow-behavior

  • การประยุกต์ใข้  Sequence เพื่อสร้างตัวเลขอัตโนมัติให้กับ Table ใน Oracle Database

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

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

    วิธีการดำเนินการก็ไม่ยุ่งยากแค่สร้าง sequence ตามโครงการและปีที่เปิดรับทั้งหมดไว้ให้ก่อนให้เรียบร้อยและเมื่อนักศึกษามาสมัครก็สามารถเรียกใช้ได้เลย

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

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

    ขั้นตอนที่ 1

    ตรวจสอบว่ามีสร้าง sequence หรือยัง โดยเราสามารถตรวจสอบได้จาก object : user_sequences ตามตัวอย่าง Oracle Function ดังต่อไปนี้

        FUNCTION CountSequence (var_seq_name IN VARCHAR2)

            RETURN NUMBER

        IS

            var_seq_count   NUMBER := 0;

            var_seq_query   VARCHAR2 (1000);

        BEGIN

            var_seq_query :=

                   ‘SELECT COUNT (*) FROM user_sequences WHERE sequence_name = ”’

                || var_seq_name

                || ””;

            EXECUTE IMMEDIATE var_seq_query

                INTO var_seq_count;

            RETURN var_seq_count;

        END;

    ขั้นตอนที่ 2

    ทำการสร้าง sequence ตามหลักการการตั้งชื่อ ตามตัวอย่าง Oracle Procedure ดังต่อไปนี้

    PROCEDURE CreateSequence (var_seq_name IN VARCHAR2)

        IS

            var_seq_count   NUMBER := 0;

        BEGIN

            var_seq_count := CountSequence (var_seq_name);

            IF var_seq_count = 0

            THEN

                EXECUTE IMMEDIATE   ‘CREATE SEQUENCE ‘

                                 || var_seq_name

                                 || ‘ START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 9999999            

                                 NOCACHE NOCYCLE’;

            END IF;

        END;

    ขั้นตอนที่ 3

    เมื่อทำการสร้าง sequence เสร็จเรียบร้อย เราสามารถดึงค่าถัดไปของลำดับด้วยคำสั่ง nextval

    การออกเลขที่ผู้สมัครให้กับนักเรียน ซึ่งจะถูกเก็บไว้ที่ตัวแปร var_app_no โดยมีความยาวขนาด 5 หลัก เริ่มต้นจาก 00001,00002,……  ตามตัวอย่าง

    หมายเหตุ : หลักการในการตั้งชื่อ sequence คือ  ‘SEQ_APP_NO_’  + รหัสโครงการ + ปีการศึกษา

    เราสามารถออกเลขที่ผู้สมัครได้ตามตัวอย่าง Oracle Procedure ดังต่อไปนี้

        PROCEDURE ToGetApplicationNO (var_seq_name   IN     VARCHAR2,

                                      var_app_no        OUT VARCHAR2)

        IS

        BEGIN

            CreateSequence (var_seq_name);

            EXECUTE IMMEDIATE   ‘SELECT LPAD (‘

                             || var_seq_name

                             || ‘.NEXTVAL, 5, ‘

                             || ”’0”)’

                             || ‘ FROM DUAL’

                INTO var_app_no;

        END;

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