Category: ไม่มีหมวดหมู่

  • Youtube ~ Checks !!

    Hi ผู้อ่านทุกๆ ท่านนนนนนน ช่วงนี้เป็นช่วงการระบาดระลอกใหม่ ของ COVID-19 ซึ่งเรื่องที่ตามอย่างหลีกเลี่ยงไม่ได้เรื่องนึงเลยก็คือ การต้องทำงานแบบ WFH นั่นเอง !! (เฮ้อ ….)

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

    ล่าสุด Youtube เหมือนจะมีเครื่องมือใหม่คือ Youtube Studio ที่มีส่วนเข้ามาช่วยตรวจสอบการละเมิดลิขสิทธิ์ของวิดีโอ ตั้งแต่ในส่วนขั้นตอนการอัปโหลด ก่อนการเผยแพร่ออกไป ซึ่ง … เฮ้ย มันโอเคเลยนะ ที่เราจะรู้ว่าวิดีโอเรามีการละเมิดลิขสิทธิ์ใดๆ หรือไม่ ไม่ใช่อัปโหลดแล้ว คนอื่นมาดูแล้ว แต่เพิ่งได้รับแจ้งว่าเนื้อหาภายในมีการละเมิดลิขสิทธิ์ !! (ตัวผู้เขียนเองก็เคยโดนอยู่บ่อยๆ แหะๆ)

    แล้วขั้นตอนการตรวจสอบทีว่าเพิ่มเข้ามาเนี่ย มันอยู่ตรงไหน ?

    งั้นไป ไปดูกันเลย …. ขอเริ่มต้นด้วยขั้นตอนหลักๆ ในการอัปโหลดวิดีโอ กันก่อนนะ ทุกคน

    ขั้นตอนที่ 1 เลือก “อัปโหลดวิดีโอ”

    ขั้นตอนที่ 2 เลือกวิดีโอที่ต้องการอัปโหลด

    ขั้นตอนที่ 3 อัปโหลดวิดีโอ เตรียมเผยแพร่

    ทุกคนสังเกตุ เห็นอะไรมั้ย …. นั่นไง ส่วนที่เขียนว่า “ตรวจสอบ” (Checks) เมื่อระบบประมวลผลเรียบร้อยแล้ว หากวิดีโอของเราที่อัปโหลดขึ้นไป ได้รับการตรวจสอบเบื้องต้น และพบว่าผ่าน ตรงส่วน “การตรวจสอบ” ดังกล่าวจะขึ้นเครื่องหมายถูก เหมือนตัวอย่างในภาพ จากนั้นให้เรากดปุ่ม “ถัดไป

    เมื่อเราคลิกมาจนถึงส่วนของการตรวจสอบ ภายในก็จะมีข้อความบอกเราถึงรายละเอียดในการตรวจสอบลิขสิทธิ์ พบ/ไม่พบปัญหา และเราก็ยังสามารถคลิก “ดูข้อมูลเพิ่มเติม” เพื่อศึกษารายละเอียดได้มากยิ่งขึ้นด้วยนะ

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

    ข้อดี ของเจ้าตัวเครื่องมือใหม่นี้ จะช่วยให้เราๆ หรือชาว youtuber, creator ได้มีโอกาสแก้ปัญหาในวิดีโอของเราก่อนที่จะเข้าสู่ขั้นตอนการเผยแพร่ จะแสดงให้เราเห็นรายละเอียดของปัญหา และผลกระทบที่จะมีตามมาได้ หรือง่ายๆ เลย Checks จะช่วยปกป้องตัวเราให้ไม่ต้องไปเผชิญกับปัญหาการร้องเรียนการละเมิดลิขสิทธิ์ด้วยมิได้ตั้งใจนั่นเอง

    ผู้เขียนหวังว่า blog สั้นๆ ที่ได้นำมาเล่าสู่กันฟังนี้จะช่วยให้ผู้อ่านหลายๆ ท่าน ได้รับรู้ข้อมูล และนำไปใช้ประโยชน์ได้ไม่มากก็น้อยแหละเนอะ

    ขอบคุณแหล่งที่มา : youtube.com มานะที่นี้ด้วยแง๊บบบบ

  • สร้างไฟล์ PDF จาก Google sheet ที่ใส่รูปได้ ด้วย Library PdfService

    สมมติเรามีแบบสอบถามที่เก็บรูปภาพของผู้กรอกด้วย และเราต้องการให้มัน Gen ข้อมูลที่กรอกเป็น pdf เก็บไว้ แนว ๆ ทำเป็นใบสมัครออกมา มาดูขั้นตอนวิธีทำกันเลย บอกเลยว่าไม่ยาก!!! เริ่มกันเลย

    1. ไปที่ Google Drive ของเรา สร้าง Folder จัดเก็บงาน ในที่นี่ชื่อ PDF Test

    2.สร้าง Form ขึ้นมา 1 form เก็บข้อมูล ดังรูป ชื่อ สกุล อีเมล เบอร์โทร รูป (ทำเป็นอัปโหลดไฟล์)

    3.คลิกแสดงตัวอย่างที่ลูกตา แล้วลองใส่ข้อมูลทดสอบ

    4.ดูตัวอย่างข้อมูลที่แท็บการตอบกลับ

    5.คลิกปุ่ม สร้างสเปรตชีต จะเห็นข้อมูลตัวอย่างที่เราได้กรอกแบบฟอร์มเข้าไป

    จากนั้นนำข้อมูลนี้ไปทำ pdf ได้อย่างไร

    1.ให้ไปที่เมนูเครื่องมือ > โปรแกรมแก้ไขสคริปต์ > ทรัพยากร > ไลบรารี ที่ Add a library ให้ใส่ 1iePjnglUzelAuJJb-QykRcUUWYBSKiNGUWVljnNe03G9zWzSUGIRWLXa แล้วกดปุ่มเพิ่ม

    2.เราจะเห็น PdfService ให้ระบุเป็น Version ล่าสุด จากนั้นกดปุ่ม บันทึก

    ในที่นี้จะขอใช้ google slide เป็น Templete ในการออก PDF

    1.กลับไปที่ Google drive ที่ folder ที่เราได้สร้างไว้คือ PDF Test ให้คลิกขวา > Google สไลด์

    2. ตั้งค่าหน้า slide เป็นแนวตั้ง A4 ไปที่ ไฟล์ > ตั้งค่าหน้ากระดาษ > กำหนดเอง 21 * 29.7 cm

    3.เราต้องการออก PDF ที่เก็บรูปภาพด้วย เพราะมีการตอบรูปภาพเข้ามา ไปที่แทรก > รูปภาพ > อัปโหลดจากคอมพิวเตอร์ จะได้เป็นรูปที่เป็นแม่แบบ เราก็จัดวางตามที่เราต้องการว่าจะให้วางไว้ตรงส่วนไหน ขนาดกว้าง ยาวเท่าไหร่แล้วแต่เรากำหนด

    4.จากนั้นคลิกที่กล่องข้อความ สร้างตามรูป โดยในปีกกา {} ต้องเป็นชื่อเดียวกับฟิลด์ใน google sheet

    5.จากนั้นคลิกที่รูป ขวา > ข้อความแสดงแทน > ที่ชื่อเรื่องใส่ชื่อฟิลด์ที่ตรงกับช่องที่มีรูปภาพตามใน google sheet จากตัวอย่างในที่นี้จะเป็นคำว่า “รูปภาพ” จากนั้นคลิกปุ่มตกลง

    7. ไปที่ Google drive สร้าง folder ใหม่อีกอัน ซึ่งจะให้ไฟล์ PDF ถูกจัดเก็บเข้ามาในนี้ และ folder ที่อัปโหลดรูปในแบบสอบถาม PDF Test (File responses) จะต้องแชร์ folder นี้ด้วย (คลิกขวา แชร์ ทุกคนที่มีลิงค์) ไม่อย่างนั้น script จะ error

    ไปที่ Google drive สร้าง folder ใหม่อีกอัน ซึ่งจะให้ไฟล์ PDF จะถูกเก็บเข้ามาในนี้ และ folder ที่อัปโหลดรูปในแบบสอบถามจะให้มาอยู่ใน folder PDF Test ที่เราได้สร้างไว้ตั้งแต่ตอนแรกสุด จะต้องแชร์ด้วย folder นี้ (คลิกขวา แชร์ ทุกคนที่มีลิงค์) ไม่อย่างไร script จะ error

    จากนั้นเรามาเขียน code กันเล็กน้อย

    จากรูป

    1.เป็น ID ของ google form ให้คัดลอกมาหลัง /d จนก่อนถึง /edit

    2.เป็น ID ของ google slide ให้คัดลอกมาหลัง /d จนก่อนถึง /edit

    3.เป็นชื่อ folder ที่จะเก็บไฟล์ PDF ที่ google สร้างอัตโนมัติให้เมื่อรัน code

    4.ชื่อของแผ่นงานใน google form

    5.ชื่อฟิลด์ที่เก็บรูปภาพตามใน google sheet ของเราใช้คำว่า “รูปภาพ”

    6.ต้องการให้ไฟล์ PDF แต่ละไฟล์มีชื่อว่าอะไร ในที่นี่ให้แสดงฟิลด์ชื่อและสกุล (ใส่ให้ตรงกับฟิลด์ที่เรากำหนดไว้) เสร็จแล้วอย่าลืมกดปุ่ม บันทึก

                จากนั้นมารันดูกันว่ามันจะสร้าง PDF ให้เรายังไง กดปุ่ม Play > ตรวจสอบสิทธิ์ > คลิกที่อีเมลของเรา > ขั้นสูง > ไปที่ PDF Test(ไม่ปลอดภัย) > อนุญาต จะแสดงข้อความว่า “Running function runPDF”

                รันผ่านเรียบร้อยดูจากบันทึกการดำเนินการด้านล่าง จากนั้นเราไปดู folder PDF-test กันเลย ชื่อไฟล์จะตามที่เราให้ดึงฟิลด์ชื่อสกุล

                เมื่อคลิกดูก็จะได้ไฟล์ PDF ที่มีข้อมูลตาม Google slide ที่เราได้ทำไว้ ดังรูป

    ลองกรอกข้อมูลเพิ่มอีกสักคน แล้วรัน script อีกครั้ง จากนั้นไปดูผลลัพธ์กัน

    เราสามารถสร้าง Trigger ให้มันทำงานอัตโนมัติ หรือสร้างเป็นปุ่มที่เรียก function นี้ได้ค่ะ

  • วิธีเปิด Zip file มี Password ที่ฝากไว้บน Google Drive บน iPhone/iPad

    โจทย์คือ

    • ต้อง Export ข้อมูล ออกมาเป็น Excel ให้ผู้รับ เป็นรายคน (เป็นจำนวนมาก)
    • แต่ละคนได้ 1 ไฟล์
    • แต่ละไฟล์ ต้องเข้ารหัสผ่าน ซึ่ง ไม่เหมือนกันเลย (ผู้รับกำหนดมา)
    • ฝากไฟล์ไว้บน Google Drive แล้วส่ง Link แบบ Anyone who has link can view เพราะ ผู้รับบางคนก็ไม่มี Google Account / บางคนไม่รู้ว่าบน iPhone/iPad ใช้ Google Account อะไร / บางคนก็ … บลา ๆ ๆ ๆ สรุป ใช้วิธี Google Account Permission ไม่ได้
    • ทุกอย่าง ทำเป็น routine ทุกเช้า อัตโนมัติ

    MS Excel สามารถตั้ง Password ได้ ทำให้ก่อนเปิดต้องใส่รหัสผ่าน แต่ ต้องทำ Manual ถ้าต้องทำงี้ทุกไฟล์ ทุกวัน ไม่รอดแน่

    สุดท้าย มาจบที่ Encrypt ด้วย Zip Password แล้วกัน (เดี๋ยวิธีสร้างด้วย python ทั้งหมด ค่อยมาเล่าให้ฟัง)

    ปัญหาคือ สร้างได้ เอาไปฝากไว้ที่ Google Drive ได้ ผู้ใช้เข้าถึงได้แล้ว แต่ …. iPhone มันติดหน้านี้

    วิธีแก้ไขคือ

    1. คลิกที่ รูป Share > Open in Safari

    2. คลิก 3 จุด ด้านขวามือบน แล้ว เลือก Open in

    3. เลือก Save to file

    4. เลือกเป็น On my iPad / On my iPhone

    5. สลับไปเปิด App Files เลือก On my iPad / On my iPhone

    6. ก็จะมีช่องให้ใส่ Password ของแต่ละคน

    จบนะ

  • JavaScript : ไม่ควรใช้ For Loop ใน Arrays

    เชื่อว่า Programmer/Developer JavaScript ล้วนเคยผ่านการใช้งาน For Loops ในการ Coding กันมาแล้ว จำเป็นที่คุณต้องเลือกใช้มันให้เหมาะกับแต่ละสถานการณ์ แนะนำว่า ไม่ควรใช้ For Loop ใน Arrays แต่ขอแนะนำให้ใช้ .forEach() Method แทน

    .forEach() Method คืออะไร

    .forEach()  เป็น Built-in Method ใน Array Class ซึ่งได้รับการเปิดตัวใน ECMAScript 2015 (หรือที่เรียกกันว่า ES6) โดย Method จะทำการ Callback เป็น Arguments และเพื่อไม่ให้เกิดปัญหาขึ้น Callback จะเป็น Function ที่ถูก Execute สำหรับทุก item ใน Array

    ตัวอย่าง เพื่อแสดงถึงการใช้งานพื้นฐานของ .forEach() Method เรามาเริ่มด้วยการ Define Array ของ Integer แล้ว Print ค่าที่เป็น ยกกำลัง2 ของพวกมันลงใน Console

    let nums = [1,2,3,4,5];
    
    nums.forEach(function(n) {
       console.log(n * 2); 
    });
    
    // 2, 4, ุ6, 8, 10

    การเพิ่ม Index เข้าไป

    เราได้ทำการเพิ่ม Optional Parameter ตัวที่ 2 เข้าไปใน Function Definition ของเรา

    let nums = [1,2,3,4,5];
    
    nums.forEach(function(n,i) {
       console.log("i: " + n * 2);
    });
    /*
      0: 2
      1: 4
      2: 6
      3: 8
      4: 10
    */

    การจัดเก็บค่าด้วย .forEach()

    แล้วถ้าเราไม่ต้องการที่จะ Print ทุกอย่าง แต่อยากเก็บ Result ไว้ในตัวแปรใหม่ล่ะ? จะเห็นว่า .forEach() Method ไม่มีการ Return ใด ๆ กลับมาให้ ซึ่งการใช้ .map() Method ดูจะเป็นคำตอบที่ดีที่สุดในสถานการณ์นี้ แต่อย่างไรก็ตาม หากต้องการใช้ .forEach() เราสามารถเขียน Code ใหม่ได้ดังนี้

    let nums = [1,2,3,4,5];
    let result = [];
    nums.forEach(function(n) {
       result.push(n*2);
    });
    console.log(result); 
    
    // [2,4,6,8,10];

    การเขียน Callback Function สั้นกระชับขึ้น

    หากต้องการทำให้ Code สั้นกระชับมากขึ้น สามารถเขียนได้ดังนี้

    let nums = [1,2,3,4,5];
    
    nums.forEach((n) => {
       console.log(n *2);
    });
    

    หรือแบบนี้ก็ได้เช่นเดียวกัน

    let nums = [1,2,3,4,5];
    
    nums.forEach(n => console.log(n *2));

    อ้างอิง : https://medium.com/better-programming/stop-using-for-loops-to-iterate-over-arrays-5c46940e79d1

  • ปรับแต่ง 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

  • 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

  • สนุกๆ กับการกำหนดรูปแบบให้กับ Column ของ SharePoint List : Choice/Text Column

    Blog นี้เราจะมากำหนดรูปแบบการแสดงผล Column ของ SharePoint List กันนะคะ ซึ่งทำได้ง่าย ๆ สบาย ๆ อีกแล้วค่า โดยการกำหนดรูปแบบให้กับ Column ของ SharePoint List นั้น จะใช้  JSON text format นะคะ

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

    Blog นี้ ผู้เขียนขอรวบรวมเอาการกำหนดรูปแบบให้กับ Column ที่มีชนิดฟิลด์ข้อมูลเป็น Choice หรือ Text กันก่อนนะคะ

    Column formatting เป็นการกำหนดรูปแบบของ Column ไม่ได้มีผลกับข้อมูลใน Column นะคะ

    Let’s Play –

    ก่อนอื่นไปที่ Column ของ List ที่เราต้องการจัดรูปแบบ แล้วคลิกหัวของ column นั้น แล้วเลือกเมนู “Column Settings” และเลือก “Formatting this column” ดังรูป อย่างตัวอย่าง ผู้เขียนอยากจัดรูปแบบของ column สถานะ

    ส่วนของ Format columns Panel ก็จะโผล่ขึ้นมา ดังรูป เอา JSON มาวาง แก้ไขตามข้อมูลของเรา แล้ว บันทึก (Save) เท่านี้ก็เป็นอันเสร็จ สมหวังดั่งตั้งใจ

    มาลองทำกันซัก 2 ตัวอย่างนะคะ

    ตัวอย่างแรก สีจะมาจาก Class ส่วน ICON เปลี่ยนได้ ก็หยิบมาใช้ได้จากที่นี้นะคะ Fluent UI Icons

    {
    "$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json",
    "elmType": "div",
    "attributes": {
    "class": "=if(@currentField == 'เสร็จสิ้น', 'sp-field-severity--good', if(@currentField == 'รอดำเนินการ', 'sp-field-severity--low', if(@currentField == 'ดำเนินการแล้วรอทดสอบ', 'sp-field-severity--warning', if(@currentField == 'รอเปิดโครงการ', 'sp-field-severity--severeWarning', 'sp-field-severity--blocked')))) + ' ms-fontColor-neutralSecondary'"
    },
    "children": [
    {
    "elmType": "span",
    "style": {
    "display": "inline-block",
    "padding": "0 2px"
    },
    "attributes": {
    "iconName": "=if(@currentField == 'เสร็จสิ้น', 'CheckMark', if(@currentField == 'รอดำเนินการ', 'Forward', if(@currentField == 'ดำเนินการแล้วรอทดสอบ', 'Error', if(@currentField == 'รอเปิดโครงการ', 'Warning', 'ErrorBadge'))))"
    }
    },
    {
    "elmType": "span",
    "txtContent": "@currentField"
    }
    ]
    }

    มากันที่ตัวอย่างที่ 2 JSON ตามด้านล่าง ตัวอย่างนี้สำหรับใครอยากเปลี่ยนสี ก็แก้ไขโค้ดสีกันได้เลยค่ะ ส่วนใครอยากจะใช้ ICON อื่น ก็หยิบมาใช้ได้จากที่นี้ Fluent UI Icons เช่นเดิมนะคะ

    {
    "elmType": "div",
    "style": {
    "background-color": "=if(@currentField == 'ดีมาก', '#7ed9a1', if(@currentField == 'ดี','#eded6b', '#f27ce0'))",
    "color": "#0d0101",
    "white-space": "nowrap"
    },
    "children": [
    {
    "elmType": "span",
    "txtContent": "@currentField",
    "style": {
    "font-size": "1em",
    "display": "inline-block",
    "padding": "0 3px"
    },
    "attributes": {
    "iconName": "=if(@currentField == 'ดีมาก', 'Emoji', if(@currentField == 'ดี','Emoji2', 'EmojiNeutral'))"
    }
    }
    ]
    }

    สำหรับ Blog นี้ ก็ฝากกันเอาไว้เท่านี้ก่อนนะคะ ขอให้สนุกกับ SharePoint List กันนะค่า 🙂 สำหรับ Blog หน้า มากำหนดรูปแบบฟิลด์ชนิดอื่นกันอีกนะคะ

    Ref:

    https://pnp.github.io/sp-dev-list-formatting/

    https://docs.microsoft.com/en-us/sharepoint/dev/declarative-customization/column-formatting

    https://docs.microsoft.com/en-us/sharepoint/dev/declarative-customization/column-formatting#predefined-classes