• Stencil : Decorators


    Component Decorator แต่ละ Stencil component จะต้องขึ้นต้นด้วย @Component() decorator เสมอ โดย import มาจาก @stencil.core package ซึ่งภายใต้ @Component() decorator สามารถกำหนด tag name และ styleUrl ของ component import { Component } from ‘@stencil/core’; @Component({ tag: ‘todo-list’, styleUrl: ‘todo-list.scss’ }) export class TodoList { … } @Component() decorator ให้ความสามารถในการกำหนด CSS classes และ attributes บน componnet ที่สร้างโดยใช้ host option ดังนี้ import { Component…

    >> Read More <<

  • Visual test automation


    ในการพัฒนา software นั้น เรื่อง Look and Feel เป็นสิ่งที่สำคัญมาก ๆ software ที่ทำงานได้ดียังไม่พอ ต้องดูดีสวยงามและใช้งานง่ายอีกด้วย คำถามที่น่าสนใจคือ จะทำการทดสอบในส่วนของการแสดงผลอย่างไรบ้าง โดยปกติในการทำการทดสอบการแสดงผล จะใช้คนเป็นผู้ทดสอบ มานั่งดู มาใช้งาน แล้วพิจารณาและตัดสินว่า ถูกหรือไม่ ทำให้ต้องใช้เวลาและกำลังคนในการทดสอบค่อยข้างมาก เพราะว่าในส่วนของการแสดงผลนั้นมันยากมาก ๆ สำหรับการทดสอบ มีหลายสิ่งอย่างให้พิจารณา ยกตัวอย่างเช่น ในแต่ละ element แต่ละส่วนงานทำงานและแสดงผลได้อย่างถูกต้องแต่เมื่อนำมารวมกัน กลับทำงานไม่ถูกต้อง หรือ แสดงผลผิดพลาด การลดเวลาและต้นทุนในการทดสอบลงโดยใช้การทดสอบแบบอัตโนมัติ เป็นสิ่งจำเป็น และต้องมีเครื่องมือช่วย ในบทความนี้ขอแนะนำ Appraise ซึ่ง Appraise นั้นได้นำแนวทางของ Specification by Example มาใช้ นั่นหมายความว่า ในแต่ละ test case ต้องมี concrete example ที่ชัดเจน นำ test case เหล่านี้ไปทดสอบแบบอัตโนมัติ ทำการทดสอบด้วย Google Chrome Headless ซึ่งจะทำการ snapshot ส่วนที่ต้องการเป็นรูปภาพและเปรียบเทียบกับผลที่คาดหวังหรือไม่ ถ้าผลออกมาไม่ตรงกับที่คาดหวัง Appraise จะแสดงผลที่แตกต่างออกมาให้เห็น จากนั้นจะให้คนมา approve…

    >> Read More <<

  • Stencil : Web component compiler


    Stencil เป็น compiler ที่ทำหน้าที่สร้าง standards-based web component (custom element) ซึ่งรวบรวมแนวคิดที่ดีของ framework ต่างๆที่ได้รับความนิยมสูง มาไว้ใน component โดย build-time tool ที่ใช้งานง่าย เช่น Virtual DOM Async rendering (inspired by React Fiber) Reactive data-binding TypeScript JSX web component ที่ได้จาก Stencil เป็น standards-based web component ทำให้สามารถใช้งานร่วมกับ framework ต่างๆที่ได้รับความนิยม และสามารถใช้ได้โดยไม่มี framework ก็ได้ จากเดิมเมื่อพัฒนาด้วย framework หนึ่งแล้ว ไม่สามารถนำไปใช้ร่วมกับ framework อื่นได้ Stencil มี APIs เช่น…

    >> Read More <<

  • Transpose rows into columns using the Oracle PIVOT operator


    ก่อนหน้านี้เราเคยนำเสนอบทความวิธีการทรานสโพส (หมุน) ข้อมูลจากแถวเป็นคอลัมน์ ด้วยการใช้ฟังก์ชัน SUM และ DECODE กันมาแล้ววันนี้ลองมาใช้อีกวิธีในการแสดงผลดังกล่าวด้วย PIVOT ก่อนอื่นมาดูในส่วน syntax ของ PIVOT กันก่อน   PIVOT Syntax SELECT * FROM ( SELECT column1, column2 FROM tables WHERE conditions ) PIVOT ( aggregate_function(column2) FOR column2 IN ( expr1, expr2, … expr_n) | subquery ) ORDER BY expression [ ASC | DESC ]; โดยที่ aggregate_function คือ aggregate function เช่น SUM, COUNT, MIN, MAX,…

    >> Read More <<

  • Oracle : Transpose rows into columns using SUM and DECODE


    วันนี้เราจะนำเสนอวิธีการทรานสโพส (หมุน) ข้อมูลจากแถวเป็นคอลัมน์ โดยการประยุกต์ใช้ฟังก์ชัน SUM และ ฟังก์ชัน DECODE ก่อนอื่นจะขออธิบายในส่วนของฟังก์ชัน SUM และ DECODE กันก่อน ฟังก์ชัน SUM SUMจัดเป็นฟังก์ชันประเภท Aggregate Function ทำหน้าที่ในการคำนวณผลรวมของค่าในคอลัมภ์ มีรูปแบบการใช้งานดังตัวอย่างข้างล่างนี้ SELECT SUM(aggregate_expression) FROM tables [WHERE conditions]; โดยที่ aggregate_expression คือ คอลัมภ์ที่ต้องการค่าผลรวม โดยที่ข้อมูลในคอลัมภ์จะต้องเป็นชนิดตัวเลขเท่านั้น มาดูตัวอย่างการใช้งานกัน SELECT fac_id, SUM (eng_score) sum_eng_score FROM test_new_student GROUP BY fac_id; ผลลัพธ์ที่ได้ : แสดงผลรวมของคะแนนภาษาอังกฤษของแต่ละคณะ ฟังก์ชัน DECODE DECODE เป็นการเขียนเงื่อนไขบนชุดคำสั่ง select  โดยมีลักษณะการทำงานเหมือน IF-THEN-ELSE โดยถ้าเข้าเงื่อนไขที่กำหนด ต้องการให้ทำอะไรก็ให้ระบุลงไป Syntax: DECODE( expression…

    >> Read More <<

  • ปัญหาการเชื่อมต่อฐานข้อมูล Oracle ไม่ได้ เนื่องจาก Listener


    สำหรับผู้ดูแลระบบที่เคยทำงานดูแลฐานข้อมูล Oracle คงเคยเจอกับปัญหาการเชื่อมต่อไปยังฐานข้อมูลไม่ได้ ซึ่งเมื่อไล่เรียงหาสาเหตุแล้ว ก็มีมากมายหลายสาเหตุด้วยกัน เช่น ปัญหาที่ตัวฐานข้อมูลเอง หรือ ปัญหาทางด้านระบบเครือข่าย ฯลฯ ซึ่งในบทความนี้จะเล่าถึงประสบการณ์ที่ได้พบเจอปัญหานี้เช่นกัน โดยสาเหตุนั้นเกี่ยวกับตัว Listener เหตุการณ์ที่เกิดขึ้นช่วงที่พบปัญหา ได้รับแจ้งจากผู้ใช้ว่าไม่สามารถเข้าใช้งานระบบได้  ซึ่งเมื่อได้รับแจ้งจึงทำการตรวจสอบและพบว่าปัญหาเกิดจากการที่ระบบไม่สามารถเชื่อมต่อไปยังฐานข้อมูลที่พัฒนาด้วย Oracle ได้ โดยที่ระบบเครือข่ายยังใช้งานได้ปกติ ดังนั้นสิ่งที่ทำต่อมาคือการตรวจสอบเฉพาะฐานข้อมูลว่าเกิดปัญหาอะไรขึ้น โดยสิ่งที่ทำคือ ทดลองเชื่อมต่อผ่าน SQL Developer ซึ่งเป็นเครื่องมือหนึ่งที่ใช้สำหรับบริหารจัดการฐานข้อมูล Oracle ผลลัพธ์คือ ไม่สามารถเชื่อมต่อได้ โดยมีข้อความแจ้งเตือนว่า socket timeout ทดลองเชื่อมต่อผ่าน Enterprise Manager ซึ่งเป็นเครื่องมือสำหรับบริหารจัดการฐานข้อมูลอีกตัวซึ่งได้ติดตั้งมาพร้อมกับตอนที่สร้างฐานข้อมูล  ซึ่งก็ไม่สามารถเชื่อมต่อได้เช่นกัน และได้ลองสั่ง Startup DB ฐานข้อมูล จากเครื่องมือตัวนี้ อาการผิดปกติก็ยังคงเหมือนเดิม ทดลองเชื่อมต่อผ่าน ผ่าน SQL Plus ซึ่งใช้งานผ่าน command prompt  ปราฏว่าสามารถเชื่อมต่อได้ ใช้คำสั่ง expdp เพื่อ dump ข้อมูลมาสำรองไว้ก่อน …

    >> Read More <<

  • การสร้างฟอร์มกรอกข้อมูลใน Word


    เราอาจจะสร้างฟอร์มเพื่อส่งให้ผู้อื่นกรอกเอกสาร ตามฟอร์มที่เราออกแบบไว้ โดยจะต้องไปเรียกใช้ Develper ที่แถบ Ribbon โดยไปที่เมนู File –> Options –> Customize Ribbon เลือก Develper ดังรูป จะเห็นว่ามีแถบ Developer ปรากฏอยู่ เรามาเริ่มสร้างฟอร์มกัน ในที่นี้จะสร้างฟอร์มเล็ก ๆ ดังรูป จากนั้นคลิกแถบ Developer แต่ละ Control ที่จะนำมาใช้ แต่ละตัวทำหน้าที่อะไรบ้าง หมายเลข 1 เป็นข้อความที่สามารถจัดรูปแบบได้ หมายเลข 2 เป็นข้อความที่กรอกอิสระ หมายเลข 3 เป็นการแทรกรูปภาพ หมายเลข 4 เป็นฟิลด์รายการที่มีตัวเลือก สามารถเลือกได้ หมายเลข 5 เป็นการแทรกฟิลด์แบบมีตัวเลือก เช่นเดียวกับหมายเลข 4 หมายเลข 6 เป็นรูปแบบวันที่ให้เลือก   จากนั้นเมื่อเรารู้จักหน้าที่ของแต่ละ Control แล้ว เราก็เลือกใช้ให้ตรงกับความต้องการ…

    >> Read More <<

  • เขียน PHP ใน wordpress


    สิ่งที่ต้องมี ไซต์ wordpress และ user ที่สามารถติดตั้งและใช้งาน Plugins ได้ ส่วนใหญ่คือ user ที่มีสิทธิ administrator ติดตั้ง Plugins ชื่อ PHP Code snippets (จริง ๆ Plugins ที่ทำหน้าที่นี้มีหลายตัว แต่ใช้ตัวนี้มานานแล้ว) แล้วเปิดการใช้งานให้เรียบร้อย เมื่อติดตั้งและเปิดใช้แล้วจะมีเมนู PHP snippets ปรากฏขึ้นที่แถบด้านซ้ายมือ เมื่อคลิกที่ PHP snippets จะได้ดังรูป (แต่อันนี้จะมี code ของผู้เขียนอยู่แล้วสาม code) คลิก Add snippet เพื่อสร้าง code ใส่ชื่อ code ในช่องแรก และใส่ code PHP ในช่องที่สอง คลิก Where there is a shortcode เพื่อให้…

    >> Read More <<

  • Download multiple files as Zip Archive (Compressed) file in ASP.Net MVC


    ในบทความนี้จะขอกล่าวถึงการ  download file ครั้งละหลายๆไฟล์ โดยมีการระบุว่าต้องการ   download file ใดบ้าง โดย  ผู้ใช้สามารถกดเลือกได้ทั้งละหลายๆไฟล์ หรือไฟล์เดียว แล้วแต่ความต้องการของผู้ใช้งาน โดยหลังจากที่มีการกดปุ่มแล้วระบบจะทำการ zip ไฟล์รวมเป็น 1 ไฟล์ โดยในบทความนี้จะขอเสนอวิธีการพัฒนาโดยใช้ ASP.NET  ในรูปแบบ MVC ค่ะ     ในส่วนของ java script function DownloadFiles() { var items = []; $(“input:checkbox[name=chkThis]:checked”).each(function () { items.push($(this).val());   });   if (items.length <= 0) { alert(‘กรุณาเลือกข้อมูลที่ต้องการ Download ด้วยค่ะ/ครับ!!’); } else { $.ajax({ type: ‘POST’,…

    >> Read More <<