Day: July 15, 2016

  • วิธีการตรวจสอบราคาเครื่องที่ให้บริการบนระบบ Public Cloud

    “จะมีวิธีคิดราคา Public Cloud แต่ละเจ้าได้อย่างไรว่าต้องจ่ายเท่าไหร่ต่อเดือน”

    ในปกติแล้ว Cloud แต่ละเจ้าจะมีให้ทดสอบเลือกเครื่อง spec ที่ต้องการและคิดค่าใช้จ่ายคร่าว ๆ ซึ่งตัวเครื่องโดยมากคิดเป็นรายเดือน แต่ส่วนที่คิดตามการใช้งานจริงจะเป็น IOP ของการใช้งาน Storage และการส่งข้อมูลออก หรืออาจจะเป็นจำนวน Traffic สำหรับให้บริการ (นำเข้าข้อมูลไม่เสียตังค์) โดยขอสรุปเป็นบทความดังนี่้ครับ
    Target : ต้องใช้เครื่องประมาณ CPU 4 Core, RAM 4-8GB, HDD 100GB รัน Windows Server เพื่อรันระบบที่เขียนด้วย .NET Framework

    • ราคา ณ วันที่ 19 มิถุนายน 2559

    AWS Pricing Calculator
    https://calculator.s3.amazonaws.com/index.html

    price1 price2 price3
    จะเห็นว่าใช้เงินประมาณ $193.98 ต่อเดือน คิดเป็นเงิน 6799.75 บาทต่อเดือน ซึ่งจากการประเมินราคาใน Private Cloud ปัจจุบันที่มหาลัยให้บริการจะคิดที่ 3200 บาทต่อเดือน (4 CPU,8 GB,SAS 100G (Multi-Site Raid 5-Network RAID 1 ราคานี้ไม่รวมค่า OS) แต่ทางมหาวิทยาลัยยังไม่มีบริการ Storage ที่เป็น SSD ซึ่งถ้าเอาตามการใช้งานจริงที่ไม่ใช่ Database Server, File Server ยังไม่จะเป็นต้องใช้ถึง SSD แต่ในปัจจุบันราคา SSD ของ Server ก็ลดลงมาเยอะมาก โดยที่การจัดซื้ออนาคตคงจะเปลี่ยนเป็น ซื้อ SSD สำหรับทำ Private Cloud แทน ซึ่งราคานี้ยังไม่รวม EBS ที่ไว้สำหรับทำ Snapshot สำรองข้อมูล, Data Transfer ซึ่งดูแล้วที่จะขึ้นได้ในตอนนี้น่าจะมีแค่ Web Server ที่เป็นพวก CMS เพราะการโอนข้อมูลขึ้นลงไม่มากนัก (ยกเว้นที่เว็บที่เน้นการใช้งาน CMS Document Sharing ที่ใช้งานหนัก ๆ อาจจะไม่เหมาะ เพราะใช้ Traffic ขาออกเยอะจากการดาวน์โหลด)

    Azure Pricing Calculator
    https://azure.microsoft.com/en-us/pricing/calculator/
    price4 price5

    จะเห็นได้ว่าราคาใกล้เคียงกับ AWS แต่ได้เนื้อที่น้อยกว่า
    price6 price7
    ถ้าเพิ่ม Storage อีก 16G จะต้องเพิ่มเงินอีก $1..28 ต่อเดือน รวมเป็น $191.74

    Google Cloud Platform Pricing Calculator
    https://cloud.google.com/products/calculator/

    price8 price9 price10 price11
    จะเห็นได้ว่าถูกที่สุดแล้วเมื่อเทียบกับอีก 2 เจ้า

    Digital Ocean Pricing Calculator
    https://www.digitalocean.com/pricing/

    price12 price13

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

    สรุปค่าใช้จ่าย

    price14
    จากที่เขียนไว้ข้างต้นยังไม่สามารถสรุปได้ว่าเจ้าไหนดีกว่า เพราะมีปัจจัยอีกเยอะที่ไม่ได้ยกมาเช่น Data Transfer, ราคา Discount ซึ่งเหมือน Google จะมีส่วนลดสำหรับเครื่องที่สอง, Downtime, Speed จึงยกมาเป็นตัวอย่างวิธีพิจารณาคร่าว ๆ ส่วนถ้าซื้อจริงก็คงต้องเตรียมแผนให้สามารถย้ายได้ด้วยในกรณีที่ Cloud ที่ใช้อยู่บริการได้ไม่ตรงกับความต้องการ

  • SSIS (Integration service) ตอนที่ 1 พื้นฐาน SSIS และ ETL

    SSIS (Integration service) เป็น Business Intelligent Tools ของ Microsoft ที่ออกมาเพื่อใช้งานในการจัดการข้อมูลในรูปแบบ ETL

    ซึ่ง ETL คืออะไร
    E – Extract การนำข้อมูลออกมาจาก Source database ซึ่งมาจากแหล่งเดียวหรือหลายแหล่ง
    T – Transform การแก้ไขและเปลี่ยนแปลงข้อมูลให้เหมาะสมที่จะในไปใช้งานต่อไป
    L – Load การเอาข้อมูลไปเก็บที่ปลายทาง (destination) แหล่งเดียวหรือแยกเป็นหลายๆแหล่ง

    โดย Business Intelligent Tools ของ Microsoft นั้นประกอบด้วย 3 ตัวได้แก่

    SSIS2

    Integration service :: เป็น ETL Tool
    Analysis service :: เป็น Tool ที่ใช้วิเคราะห์ข้อมูล ใช้ทำ Data warehouse
    Reporting service :: เป็น Tool ที่ใช้ในการสร้างรายงาน

     

    ก่อนที่จะมี Tools ที่ใช้ทำ ETL (ซึ่งมีหลายตัว หลายค่าย ทั้งฟรีและไม่ฟรี)
    เราต้องลำบากในการจัดการข้อมูลดังรูป

    unSSIS

    ที่มาของภาพ
    คือต้องจัดการข้อมูลจาก Source ต่างๆลงใน Database แยกเป็นแต่ละ Source กันไปแล้วค่อยมาทำการ Cleaning data ที่หลังแล้วค่อยไปรวมฐานข้อมูลอีกครั้งจึงจะเอาข้อมูลไปใช้งานได้ ซึ่งจะทำให้การทำงานค่อนข้างยุ่งยากและซับซ้อนและต้องทำซ้ำๆหลายๆครั้ง

     

    SSIS ทำงานอย่างไร

    SSIS1

    ที่มาของภาพ

    เตรียมข้อมูลให้พร้อมที่จะ load เข้าไปเก็บในฐานข้อมูล มี audit data เพื่อทำให้ตรวจสอบได้ว่าข้อมูลที่ได้มาได้มากจากไหน เมื่อไร process ไหนเป็นผู้จัดการข้อมูล สามารถทำ data cleaning ได้ก่อนที่จะนำข้อมูลเข้าสู่ฐานข้อมูล สามารถใช้ได้กับข้อมูลที่ใหญ่และซับซ้อนได้เป็นอย่างดี

    SSIS ประกอบด้วย

    • Package ไฟล์ของ SSIS นามสกุล *.dtsx
    • Control flow คือ Workflow engine สำหรับจัดการ tasks และ Containers ที่สั่ง Execute

     

    Control Flow

    • เป็น Workflow engine โดยมี Objects ใน Control Flow ดังนี้
      -Control flow tasks คือ การเนินการของ Workflow Object
      -Control flow Containers เป็น Grouping tasks กับ Tasks หรือ Containers อื่นๆ
      -Precedence constraints ให้ติดต่อ Tasks และ Containers และ กำหนดลำดับการ execute และ Precedence

    สำหรับจัดการ tasks และ Containers ที่สั่ง Execute

     

    Data flow

    • ควบคุมการการประมวลผลข้อมูลต่างๆ
    • Transform data จากแหล่งข้อมูล (Sources) ไปยัง ปลายทางข้อมูล (Destinations)

    Data flow task ยอดนิยมมีดังนี้

    1. Aggregate
    2. Conditional Split
    3. Data Conversion
    4. Derived Column
    5. Lookup
    6. Merge
    7. Merge Join
    8. Multicast
    9. Sort
    10. Union All

    ไว้จะลงรายละเอียดในแต่ละ task กันในตอนต่อๆไปนะครับ สำหรับตอนที่ 1 นี้ก็ขอจบไว้เท่านี้ก่อนครับ

     

     

  • Information graphics การใช้ภาพหรือแผ่นภูมิแทนข้อมูลที่จะนำเสนอ

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

    มาดูการใช้งาน Infographics เพื่อแสดงข้อมูลในรูปแบบต่างๆ

    • ข้อมูลสำคัญทีต้องการให้เป็นจุดสนใจเพียงข้อมูลเดียว
      ควรจะใช้ฟอนต์ที่ใหญ่หรือแปลกตากว่าฟอนต์ทั่วไปหรือมีการเน้นด้วยพื้นหลังที่แตกต่าง ร่วมถึงสามารถใช้ Pictographs หรือ Icon Charts แสดงร้อยละของสิ่งที่สนใจ
      ตัวอย่าง
    1 2
    • ข้อมูลในเชิงเปรียบเทียบ
                        เพื่อให้เห็นความแตกต่างที่เกิดขึ้นกับข้อมูลที่สนใจ โดยมากจะใช้ Bar Chart หรือ Column Chart
      ตัวอย่าง

      top10Social
      ที่มาของภาพ
    • ข้อมูลแบบต่อเนื่องและมีความสัมพันธ์กัน   โดยมากจะแสดงข้อมูลนี้ด้วย Line Chart
      lineCart
    • ข้อมูลแบบไม่ต่อเนื่อง ดูความเป็นไปของข้อมูลที่สนใจ เช่น ความถี่ของผลการประเมิน TOR โดยแยกตามช่วงอายุการทำงานของบุคลากร หรือความสูงของนักเรียนแยกตามช่วงอายุและแยกระหว่างผู้ชายกับผู้หญิงเป็นต้น
      hChart
    • ข้อมูลการเปลี่ยนแปลงตามตัวแปรหรือช่วงเวลา (Trends over Time) สามารถใช้ได้หลายรูปแบบ เช่น Column Chart และเน้นส่วนสนใจ เช่นแสดงร้อยละ หรือใช้รูปแทนข้อมูลช่วงเวลาต่างๆ
      macTimeLine
      ที่มาของภาพ
    • ข้อมูลการกระจายของสิ่งที่สนใจ จะแสดงด้วย bubble chart เช่นความสัมพันธ์ระหว่างความจุปอดกับความสามารถในการกลั่นหายใจของคนแล้วเอาข้อมูลความสัมพันธ์ของแต่ละคนไป วาดกราฟเพื่อดูความสัมพันธ์
      bubbleChart
      ที่มาของภาพ
  • เชื่อมต่อ GitHub Repository ด้วย Visual Studio 2015

    ในการพัฒนาแอปพลิเคชันหรือระบบงานหนึ่งขึ้นมา การจัดการ File source code ไม่ว่าจะเป็นการสร้าง การแก้ไข การควบคุม file version ต่างๆ ถือเป็นเรื่องสำคัญ ซึ่งในบทความนี้นำเสนอการใช้งาน Visual Studio 2015 ในการเชื่อมต่อไปยัง GitHub Server

    Git คือ Version Control ตัวหนึ่ง มีหน้าที่ในการจัดเก็บการเปลี่ยนแปลงของ file source code มีการ backup code ให้เรา สามารถที่จะเรียกดูหรือย้อนกลับไปดูเวอร์ชั่นต่างๆของ project เรา รวมถึงสามารถ track ได้ว่าไฟล์นั้นๆใครเป็นคนเพิ่มหรือแก้ไข ถูกสร้างโดยใคร ถูกปรับปรุงโดยใคร

    GitHub คือ web open source ที่ให้บริการพื้นที่จัดเก็บ source code ของ project ที่เราได้พัฒนา โดยมีระบบควบคุม (version control) แบบ Git ซึ่งทำให้การพัฒนา project ต่างๆ สามารถแชร์ file source code ได้ง่ายขึ้น

     

    เครื่องมือที่ใช้ในการเชื่อมต่อ GitHub Repository ด้วย Visual Studio 2015

    1. Microsoft Visual Studio 2015
    2. GitHub Extension for Visual Studio สามารถ download ได้จาก link ของ github โดยตรง >> Download Now 
    3. Account ที่ใช้ในการเข้าถึง web GitHub

     

    ขั้นตอนการเชื่อมต่อ GitHub Repository ด้วย Visual Studio 2015

    1.ติดตั้ง GitHub Extension for Visual Studio ที่ได้ดาวน์โหลดจากลิงค์ข้างบน

    install1

    2. เมื่อติดตั้งเสร็จจะขึ้นดังรูป

    install2

    3.เปิด Visual Studio 2015 ขึ้นมา ไปยังแท็บ Team Explorer แล้วกด Manage Connections ที่ไอคอนรูปปลั๊ก ดังรูป

    connect

    4.ที่เมนู GitHub ให้คลิก Login

    image4

    5.กรอกข้อมูล GitHub Account ที่จะเชื่อมต่อ แล้วกดปุ่ม Login

    filllogin

    6.เมื่อ Login สำเร็จ จะแสดง GitHub repository ทั้งบน GitHub server และ repository บนเครื่อง local ของเราเองดังรูป

    displayrepo

    7.เข้าไปที่ https://github.com/ แล้ว Login ด้วย GitHub Account ของเราแล้วไป tab>> Repository เพื่อสร้าง Repository ที่จะเก็บ Project ที่เราต้องการจะเพิ่มเข้าไปจาก Visual Studio โดยกรอก repository name และกดปุ่ม Create repository

    newrepo

    8. เราจะได้ repository เปล่าๆ ที่เราสร้างขึ้นดังรูป

    empty repository

    9. เปิด project ที่ต้องการเพิ่มเข้า repository ขึ้นมา คลิกขวาที่ solution เลือก add solution to source control ดังรูป

    addTorepo

    10.จะปรากฎหน้าต่างให้เราเลือก Source Control ที่เราเลือก Git แล้วกดปุ่ม OK

    choosesource

     

    11.ให้เรากรอก Commit Message เสร็จแล้วให้เลือกไปที่ commit ซึ่งจะมีตัวเลือกการ commit หลายแบบ ได้แก่ Commit, Commit and Push และ Commit and Sync ในที่่นี่ผู้เขียนเลือก Commit and Push ซึ่งเป็นการ commit และโยน file source code ขึ้นไปยัง web server repository ด้วย เพื่อแสดงให้ผู้อ่านเห็นว่ามีการเชื่อมต่อกันแล้วจริง

    commitmsg

    12. หลังจากกด Commit and Push จะมี message แจ้งเตือนว่า “There is no remote repository configured. Publish this repository to share your commits.” ซึ่งหมายถึงเรายังไม่ระบุและ reomte ไปยัง repository ที่เราต้องการจะเพิ่ม ให้เราเลื่อนมาด้านล่างและระบุ url ของ repository ที่เราได้สร้างไว้ก่อนหน้านี้บน web GitHub แล้วกดปุ่ม Publish ดังรูป

    publish repo

    13. เมื่อกดปุ่ม Publish รอจนเสร็จสิ้นแล้วจะปรากฎหน้าต่าง ดังรูป

    finish

    ให้คลิกมาที่แท็บ Solution Explorer จะสังเกตุเห็นว่าไฟล์แต่ละไฟล์จะมีรูปกุญแจแล้ว แสดงว่า file source code ของเราถูกเพิ่มเข้า Git source control เรียบร้อยแล้ว

    lock

    14. กลับไปที่เว็บไซต์ GitHub แล้วไปยัง repository ที่เราได้สร้างและเพิ่ม project จาก Visual Studio เข้าไป จะปรากฎ File source code ที่เรา Commit and Push มาจาก Visual Studio แล้ว

    finishRepo1

    finishRepo2

     

    เป็นอันเสร็จสิ้นการเชื่อมต่อและเพิ่ม project เข้าไปยัง GitHub Repository ด้วย Visual Studio 2015 แล้วค่ะ ^^

     

    แหล่งข้อมูลอ้างอิง : https://visualstudio.github.com/

  • วิธีการตรวจสอบข้อมูลในรูปแบบ JSON

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

    ซึ่งในบทความนี้จึงขอเสนอเว็บไซต์ที่ช่วยในการตรวจสอบข้อมูลและแบ่งชั้นของข้อมูลที่ซ้อนกันหลาย ๆ ชั้น ในรูปแบบ JSON ได้ คือ https://jsonformatter.curiousconcept.com

    1

    จากรูป  มีสิ่งที่ต้องระบุหลัก ๆ คือ

    1. JSON Data/URL สามารถวางข้อมูลหรือ URL ของข้อมูลได้ทั้งสองอย่าง
    2. JSON Standard เลือกว่า JSON ของเราสร้างโดยมาตรฐานใด หรือเราอยากตรวจสอบว่า JSON ที่เราสร้างอยู่ในมาตรฐานที่เราต้องการไหม2

      เมื่อกำหนดเรียบร้อยก็กดปุ่ม Process
      3

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

      หากข้อมูลผิดล่ะ จะเป็นไง ลองทำกันดู 

      4

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

  • แนวทางการพัฒนา App บนสมาร์ทโฟน

    ถ้าใครเคยพัฒนา app เพื่อให้รองรับหลาย ๆ Platform ทั้ง iOS, Android หรือ Window Phone  ก็คงจะทราบถึงความยากลำบากในการพัฒนา เนื่องจากแต่ละ platform ก็มีวิธีการพัฒนาที่แตกต่างกัน เช่น app ที่รันบน iOS พัฒนาโดยใช้ภาษา Object C, ภาษา Swift ในขณะที่ app ที่รันบน Android พัฒนาขึ้นโดยใช้ภาษา Java และ app ที่รันบน Windows phone ก็พัฒนาขึ้นด้วย .Net Framework จะเห็นว่าแต่ละ Platform ใช้เทคโนโลยีที่ต่างกันอย่างสิ้นเชิง ทำให้การพัฒนา app 1 ตัว ให้รองรับทั้ง 3 platform ดังกล่าวข้างต้น ต้องใช้ต้นทุนค่อนข้างสูง ใช้เวลาในการพัฒนาเยอะ และยุ่งยากในการบำรุงรักษา

    App บนสมาร์ทโฟน สามารถแบ่งออกเป็น 3 ประเภท ดังนี้

    • Native App คือ app ที่เกิดจากการพัฒนาโดยการใช้ SDK (Software Development Kit) ของ OS แต่ละค่าย ทำให้ app ที่พัฒนาขึ้นมีประสิทธิภาพสูง สามารถเรียกใช้งานฟังก์ชันต่าง ๆ เพื่อเข้าถึงหรือควบคุมอุปกรณ์ได้ เช่น ตัวรับสัญญาณ GPS กล้องถ่ายรูป อุปกรณ์สแกนลายนิ้วมือ ที่ติดตั้งมากับสมาร์ทโฟนได้โดยตรง แต่ข้อเสียคือจะสามารถทำงานได้กับ OS เฉพาะค่ายนั้นเท่านั้น
    • Web App เป็น app ที่เข้าถึงได้ด้วยโปรแกรมประเภท Browser ต่าง ๆ ผ่านเครือข่ายคอมพิวเตอร์ เป็นที่นิยม เนื่องจากผู้พัฒนาสามารถอัพเดท หรือบำรุงรักษาได้โดยที่ไม่ต้องติดตั้งบนเครื่องผู้ใช้ ข้อเสียของ app ประเภทนี้คือ ไม่สามารถเขียนโปรแกรมเพื่อเรียกใช้งานฟังก์ชันต่าง ๆ เพื่อเข้าถึงหรือควบคุมอุปกรณ์ต่าง ๆ ของสมาร์ทโฟนได้
    • Hybrid App เป็น app ที่พัฒนาขึ้นโดยนำข้อดีของ app ทั้ง 2 ประเภทข้างต้นมารวมกัน โดยอาจจะมองว่า มันเป็น Web App ที่สามารถเขียนโปรแกรมให้เรียกใช้งานฟังก์ชันเพื่อเข้าถึงหรือควบคุมอุปกรณ์ต่าง ๆ ของสมารทโฟนได้ มีหน้าตาการใช้งานหมือนกับการ Native App แต่พัฒนาโดยใช้ภาษาต่าง ๆ เช่น HTML, CSS, Java Script เป็นต้น เปิดใช้งานด้วย Web viewer ของ OS แต่ละตัวเลย ข้อดีที่เด่นชัดคือ นักพัฒนาสามารถพัฒนา app ขึ้นมาเพียงชุดเดียว แล้ว build ให้มันสามารถรันบน platform ต่าง ๆ ได้ตามต้องการ

    compare app

    รูปที่ 1เปรียบเทียบประสิทธิภาพ ความสามารถในการเขียน App แต่ละแบบ [ที่มา :http://androiddevelopersthai.blogspot.com/]

    การเลือกว่าจะพัฒนา app เป็นแบบไหน ก็ขึ้นอยู่กับความต้องการของผู้ใช้งานเป็นหลัก และเพื่อแก้ปัญหาที่ได้กล่าวไว้ตอนต้น พบว่า Hybrid App สามารถตอบโจทย์ได้เป็นอย่างดี โดยเครื่องมือที่นำมาใช้ในการพัฒนาที่มีประสิทธิภาพมากที่จะแนะนำในบทความนี้คือ Ionic Framework

    Ionic Framework

    Ionic Framework เป็นตัวช่วยในการใช้พัฒนา Hybrid App ที่ทำให้พัฒนา App แค่ครั้งเดียวก็สามารถ Build ให้รันได้ในหลาย Platform ซึ่งเทคโนโลยีที่ใช้ในการพัฒนาเป็นเทคโนโลยีเดียวกันกับที่ใช้ในการพัฒนาเว็บได้แก่ HTML, CSS และ Java Script ทำให้นักพัฒนาเว็บสามารถเรียนรู้วิธีการพัฒนาได้อย่างรวดเร็ว

    ionic_frameworkรูปที่ 2  Ionic Framework [ที่มา : http://blog.prscreative.com]

     

    Ionic Framework เป็น Open Source ที่นักพัฒนาสามารถใช้ในการสร้าง App ของตัวเอง หรือ App เชิงพาณิชย์ก็ได้ มีเว็บไซต์อย่างเป็นทางการคือ http://ionicframework.com

    ตัวอย่าง App ดังๆ ที่ใช้ Ionic ได้แก่ UNIQLO ดังรูป

    uniqlo
    รูปที่ 3 ตัวอย่างหน้าจอ App ของ UNIQLO ที่พัฒนาขึ้นด้วย Ionic [ที่มา :https://itunes.apple.com/th/app/uniqlo-th/id867497451?l=th&mt=8 ]

    สามารถดูตัวอย่าง App ที่พัฒนาด้วย Ionic เพิ่มเติมได้จาก http://showcase.ionicframework.com

  • Cloud Computing การบริการประมวลผลจากเครื่องคอมพิวเตอร์บนเครือข่าย Internet

    “อะไรคือ Cloud Computing และมันน่าใช้ยังไง แล้วต้องเลือกแบบไหนถึงจะเหมาะกับองค์กร”

    • ขอขอบคุณข้อมูล Sipa จากการอบรม Cloud Computing รุ่นที่ 1
    • และขอขอบคุณข้อมูลจากท่านวิทยากร ผศ.ดร.ภุชงค์ อุทโยภาส ม.เกษตรศาสตร์

      แนวคิดและความหมายของ Cloud Computing

    cloud1

    Cloud Computing เป็นบริการประมวลผลจากเครื่องคอมพิวเตอร์บนเครือข่ายอินเทอร์เน็ต รวมถึงการ
    ใช้งานทรัพยากรเครื่องคอมพิวเตอร์ร่วมกันโดยไม่มีข้อจำกัด โดยสามารถเลือกปรับแต่งการใช้งานได้ตามต้องการ และสามารถเข้าถึงได้จากที่ใดก็ได้
    ซึ่งสามารถสรุปคุณสมบัติเป็นข้อ ๆ ตามคำนิยามของ NIST (National Institute of Standards and Technology) * ได้ดังนี้
    On-demand self-service – สามารถใช้งานทรัพยากรได้ตามที่ต้องการ
    Broad network access – สามารถเข้าถึงจากที่ใดก็ได้
    Resource pooling – สามารถนำทรัพยากรหลาย ๆ อย่างมารวมกันเพื่อใช้งานร่วมกัน
    Rapid elasticity – สามารถปรับเปลี่ยนได้ตลอดเวลาที่ต้องการ
    Measured Service – สามารถวัดปริมาณการใช้งานได้ทุกบริการ (เพื่อสามารถนำไปคิดค่าใช้จ่ายได้ด้วย)cloud2

    Reference : * The NIST Definition of Cloud Computing, http://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-145.pdf

    สถาปัตยกรรม Cloud Ecosystem

    cloud3

    ตามคำนิยามของ NIST ได้มีการกำหนด Cloud Ecosystem หรือเรียกว่า Cloud Service Model ได้ 3 รูปแบบดังนี้
    Software As A Service (SAAS)
    เป็นบริการใช้งานซอฟต์แวร์ประยุกต์ (Application) ที่ผู้ให้บริการจัดหาให้ โดยสามารถเข้าถึงได้จาก
    Web Browser รวมถึง Application ทั้งที่อยู่ในเครื่องคอมพิวเตอร์หรืออุปกรณ์มือถือ การบริการรูปแบบนี้ผู้ใช้จะไม่สามารถจัดการเครื่องหรือระบบปฏิบัติการได้ ทุกอย่างผู้ให้บริการจัดการให้ทั้งหมด
    Platform As A Service (PAAS)
    เป็นบริการเครื่องมือสำหรับพัฒนาระบบ โดยผู้ใช้ไม่สามารถเข้าถึงการจัดการโครงสร้างพื้นฐานใด ๆ ได้ เช่นระบบเครือข่าย เครื่องเซิร์ฟเวอร์ ระบบปฏิบัติการ โดยผู้ให้บริการจะจัดการให้ทั้งหมด
    Infrastructure As A Service (IAAS)
    เป็นบริการที่ผู้ใช้สามารถจัดการระบบปฏิบัติการ ระบบเครือข่าย รวมถึงจัดหาโปรแกรมประยุกต์ เพื่อสามารถดูแลควบคุมการปรับแต่งระบบให้สามารถรองรับความต้องการที่หลากหลาย แต่การจัดหาทรัพยากร รวมถึงโครงสร้างพื้นฐานยังเป็น
    หน้าที่ของผู้ให้บริการจัดหาให้ตามความต้องการของผู้ใช้

    รูปแบบของการให้บริการ

    สามารถแบ่งรูปแบบการให้บริการ (Deployment Models) ออกแบบ 4 รูปแบบได้ดังนี้
    Private cloud
    เป็นการใช้งานระบบภายใต้โครงสร้างพื้นฐานขององค์กร ผู้ใช้อาจเป็นผู้ดูแลด้วยตนเอง หรือจ้างบุคคลที่สามดูแลก็ได้ อุปกรณ์อาจจะติดตั้งภายในสำนักงานหรืออยู่ภายนอกทั้งหมด หรือบางส่วนก็ได้
    Community cloud
    เป็นการใช้งานระบบภายใต้การร่วมการของกลุ่มสมาชิก โดยมีข้อปฏิบัติร่วมกัน ตามเงื่อนไขของรัฐ หรือขององค์กร โดยสมาชิกดูแลบริหารจัดการโครงสร้างด้วยสมาชิกเอง หรือทำผ่านบุคคลที่สาม โดยอุปกรณ์อาจจะติดตั้งภายในสถานที่ของชุมชน หรือนอกสถานที่ก็ได้
    Public cloud
    เป็นการใช้งานระบบร่วมกันกับสาธารณะชน องค์กรทั่วไปและกลุ่มองค์กรขนาดใหญ่ โดยผู้ให้บริการเป็นผู้ลงทุนโครงสร้างพื้นฐานไอทีและระบบซอฟต์แวร์ที่เกี่ยวข้องทั้งหมด
    Hybrid cloud
    เป็นการใช้งานผสมผสานระหว่าง Private cloud, Public cloud หรือ Hybrid cloud โดยขึ้นอยู่กับผู้ใช้บริการต้องการด้านใด โดยอาจจะทำงานเป็นอิสระ หรือมีการเชื่อมโยงเข้าหากัน แต่จะต้องสามารถทำงานร่วมกันในระดับข้อมูลและระบบซอฟต์แวร์ประยุกต์ได้ โดยการใช้งานทั่วไปมักจะใช้ Private cloud ก่อน จนเมื่อต้องการเพิ่ม Capacity ชั่วคราวจึงใช้ Public cloud เพิ่มเติม

    โครงสร้างของระบบ Cloud

    cloud4

    โดยมีการแบ่งออกเป็น Front End และ Back End เชื่อมต่อกันด้วยอินเทอร์เน็ต โดยแบ่งอุปกรณ์พื้นฐาน ได้ดังนี้
    1) Server
    2) Storage
    3) Network
    4) Cloud runtime ซึ่งจะเป็น Middleware ที่ใช้บริหารจัดการใน Back End
    ซึ่งจะมีระบบ Management และ Security ช่วยบริหารจัดการอุปกรณ์ต่าง ๆ ให้สามารถทำงานได้เป็น เนื้อเดียวกันและมีความปลอดภัยในการเข้าถึง

    บริการ Virtualization
    cloud8

    เมื่อก่อนระบบใดอยู่บนเครื่องใดแล้ว ถ้าเสียก็จะเสียไปด้วย ต้องหาเครื่องใหม่มาทดแทน โดยต้องทำการติดตั้งระบบใหม่ นำเข้าข้อมูลจากที่สำรองไว้ แถมเครื่องซื้อมาใช้งานไม่เต็มประสิทธิภาพ จึงมีการสร้างระบบ Virtualization ขึ้นมาเพื่อแก้ไขปัญหาดังกล่าวโดยจะมี Middleware ระหว่าง OS กับ Resource ที่เรียกว่า Virtualization software หรือ Hypervisor โดยข้อดีคือแต่ละบริการในเครื่องเดียวกันสามารถมี OS หรือ Application เป็นของตนเอง และแยกอิสระออกจากกัน สามารถติดตั้งโปรแกรมที่มีความต้องการเฉพาะได้ รวมถึงสามารถใช้พื้นที่กลางในการจัดเก็บข้อมูล เพื่อในกรณีที่เครื่องมีปัญหาสามารถย้ายไปรันเครื่องอื่นได้โดยกระทบต่อการบริการน้อยที่สุด ทำให้การใช้เครื่องเต็มประสิทธิภาพมากขึ้น โดยเราสามารถนำเครื่องที่มี Peak Load คนละช่วงเวลามารวมในเครื่องเดียวกันได้ โดยไม่กระทบต่อการให้บริการโดยรวม

    วิวัฒนาการของ Virtualization

    cloud9

    1st Generation : Full virtualization (Binary rewriting)
    – ใช้ Software จัดการทั้งหมด
    – มีปัญหาที่ต้องมีการ Compile กับ Kernel เมื่อมีการเปลี่ยน Kernel ใหม่จะไม่สามารถใช้งานต่อได้ ต้องทำการ Patch Kernel ก่อน
    2nd Generation : Paravirtualization
    – มีการเขียน Hypervisor ขึ้นมาคั่นก่อนเข้าถึง Hardware
    – ข้อเสียคือช้ากว่า 1st Gen และเมื่อผู้ผลิต CPU หรืออุปกรณ์อื่น ๆ ต้องการเพิ่ม Feature ไม่สามารถทำได้ทันทีต้องทำการแก้ Hypervisor ให้รองรับ Feature ใหม่ ๆ
    3rd Generation : Silicon-based (Hardware-assisted)
    – ไม่จำเป็นต้องแก้ Hypervisor ให้รองรับ Feature ใหม่ ๆ ผู้ผลิต CPU หรืออุปกรณ์อื่น ๆ ออกแบบให้รองรับ Virtualization มาให้เลย โดยมีการใส่เข้าไปในอุปกรณ์ให้เลย
    – ทำงานด้วย Hardware ทำให้รวดเร็วกว่า 2nd Gen

    ประโยชน์ของ Virtualization

    – สามารถใช้ Hardware ได้อย่างมีประสิทธิภาพ
    – ลดพื้นที่ของ Data Center ในการต้องวางเครื่องจำนวนเยอะที่ใช้งานได้ไม่เต็มประสิทธิภาพ (ประหยัดเครื่องลง)
    – ใช้พลังงานน้อยลง เพราะเครื่องมีจำนวนน้อยลง
    – สามารถเพิ่มเครื่องได้อย่างรวดเร็ว ไม่ต้องรอซื้อเครื่องนาน
    – สามารถสร้างระบบทดสอบ หรือเครื่องสำหรับพัฒนาได้ง่าย และรวดเร็ว

    การเลือกใช้บริการ Cloud

    cloud5

    ในส่วนของ Private cloud ในประเทศไทย มีการใช้งานเกิน 50% โดยมีความต้องการใช้งาน Vmware, Microsoft, Openstack ตามลำดับ

    โดยมีการใช้งาน SaaS เป็นหลักรองลงมาจะเป็น IaaS และ ทุกท้ายจะเป็น PaaS โดย เหตุผลหลักที่ใช้ Cloud คือต้องการลดค่าใช้จ่าย และมีความยืดหยุ่นนการใช้งาน ส่วนสาเหตุที่ใช้ Public cloud เนื่องมาจากราคาถูกกว่าลงทุนเองในระยะยาว และไม่ต้องซื้อเครื่องแพง ๆ ที่มี Peak Load แค่บางช่วง ช่วงที่ไม่ได้ใช้งานจะไม่คุ้มกับราคาที่ลงทุน

    บริการ Cloud ที่มีในปัจจุบัน

    Amazon AWS
    มีการให้บริการหลาย Service ดังนี้
    AWS Compute :
    – EC2 : ให้บริการ Virtual Machine
    – Elastic Load Balance (ELB) : ให้บริการกระจายโหลดระหว่าง EC2
    AWS Storage :
    – S3 : ให้บริการพื้นที่ Storage
    – Elastic Block Store : ให้บริการพื้นที่ Storage เพิ่มเติมสำหรับ EC2
    AWS Database :
    – Relational Database Service (RDS) : ให้บริการฐานข้อมูลประเภท Relational Database เช่น MySQL
    – DynamoDB : ให้บริการฐานข้อมูล NoSQL
    AWS Analytic :
    – Elastic MapReduce : ให้บริการ Big Data Processing
    AWS Machine Learning :
    บริการ Machine Learning
    AWS loT
    บริการ Internet of Things

     

    Google Cloud Platform

    cloud6Compute :
    – Compute Engine เป็นบริการ Virtual Maching
    – App Engine เป็นบริการแบบ PaaS
    Storage :
    – Cloud Storage เป็นบริการ Storage
    – Cloud SQL เป็นบริการฐานข้อมูล
    App Services :
    – ให้บริการ Application Service รวมถึง Development Application รวมถึง Cache Service

     

    Microsoft Azure

    cloud7App Services :
    ให้บริการ Application ในกลุ่มของ Microsoft และในกลุ่มของ Linux โดยครอบคลุมทุกบริการของ
    Microsoft เป็นหลัก และเพิ่มบริการของ Linux เพิ่มมากขึ้นเรื่อย ๆ
    Compute :
    ให้บริการเครื่อง Virtual Machine รองรับทั้ง Website, Cloud services และ Mobile services
    Storage :
    ให้บริการฐานข้อมูล SQL Database โดยเฉพาะในส่วนของ Microsoft SQL Server ทั้งนี้รองรับในส่วน
    ของฐานข้อมูลอื่น ๆ ด้วย เช่น HDInsight ทั้งในส่วนของ SQL และ NoSQL

    6 ข้อดีของการใช้ Cloud Computing

    1) ไม่ต้องลงทุน Infrastructure เอง จ่ายราคาตามปริมาณที่ใช้ได้
    2) ผู้ให้บริการลงทุนมหาศาล บริการให้คนมหาศาล ทำให้ค่าบริการต่อหัวลดลงมาก
    3) เลิกคาดเดาว่าเราจะต้องการทรัพยากรเท่าไหร่ถึงจะพอ หรืออาจจะซื้อมามากเกินไปหรือเปล่า
    4) สามารถเพิ่มความเร็วในการจัดหาทรัพยากร์
    5) หยุดใช้เงินในการจัดการ Data Center
    6) สามารถ Deploy Application ให้ใช้ได้ทั่วโลกได้อย่างรวดเร็ว โดยรวมถึงคนทั่วโลกสามารถ Access ได้อย่างรวดเร็ว

    การนำ Cloud มาใช้งาน

    – ผู้บริหารต้องเห็นด้วย และเป็นผู้ผลักดันในการใช้งานให้เกิดเป็นรูปธรรม
    – โดยในแต่ละธุรกิจ หรือแต่ละองค์กรมีวิธีการใช้งานในรูปแบบที่แตกต่างกันตามลักษณะงานที่ทำ
    – การเปลี่ยนแปลงจะต้องเปลี่ยนในสิ่งต่อไปนี้
    1) งานที่ทำ
    2) ความสามารถ ทักษะ ที่ต้องการเพิ่มขึ้นในองค์กร
    3) ความสัมพันธ์ระหว่างคนในองค์กรและผู้บริหารระบบไอที
    4) กระบวนการทำงาน
    – ระดับของการใช้งาน Cloud มีทั้งแบบ ไม่มีใช้งาน, ใช้งานภายใน, ใช้งานภายนอกทั้งหมด ซึ่งสุดท้ายแล้วจะไม่มีผู้ดูแลระบบภายในเหลืออยู่เลย
    – แต่ก็ยังต้องมีฝ่าย IT ภายในองค์กร แต่จะใช้ในการดูแลเรื่องความปลอดภัยของการเข้าถึงข้อมูล การจัดการบริการ Cloud และการเฝ้าระวัง
    – การเริ่มที่ง่ายที่สุด ต้องเริ่มจากความซับซ้อนน้อยที่สุด
    – สิ่งที่ควรนำขึ้น Cloud ก่อนคืองานที่ใช้ทดสอบหรือพัฒนา, งานที่ไม่กระทบต่อธุรกิจโดยรวม, งานที่รันเป็น Batch
    – สุดท้ายแล้วงานที่จะขึ้น Cloud ช่วงหลังก็จะเป็นงานที่มีโหลดสูง, งานที่มีการใช้งานร่วมกัน, งานที่ต้องใช้กับ Desktop, งานทั้งที่เป็นงานทั่วไป และงานสำคัญ

    ความเสี่ยงในการใช้งาน Cloud

    – ข้อมูลสูญหาย
    – การใช้บริการของที่หนึ่งแล้วจำเป็นต้องย้ายไปยังอีกผู้ให้บริการ
    – Data lock-in ข้อมูลอาจจะไม่สามารถย้ายไปใช้กับ Application อื่นได้
    – ขนาดของเครื่อง ซึ่งผู้ให้บริการไม่สามารถจัดหาให้ได้
    – เครื่องมือจัดการระบบ Cloud ซึ่งการที่ย้ายไปยังผู้บริการอื่นใช้เงินลงทุนที่สูง

    การป้องกันความเสี่ยงในการใช้งาน Cloud

    – Data lock-in ใช้รูปแบบมาตรฐานของข้อมูลเช่น JSON, XML
    – VM lock-in ใช้รูปแบบมาตรฐานของ VM Image
    – App lock-in ใช้รูปแบบ API มาตรฐาน
    – การยืนยันตัวตนให้ใช้มาตรฐาน เช่น OAuth, OpenID, Facebook Authentication

  • Script สำหรับ หาวันที่ของไฟล์ล่าสุดใน directory

    Q: ถ้าจะเขียน คำสั่ง หรือ script บน linux เพื่อหา วันที่ของ file ล่าสุดใน folder ของ user จะเขียนยังไงดี มีไอเดียไหมครับ

    A: สมมติ folder ของ user คือ /home/user/Documents

    $ ls -t /home/user/Documents
    

    จะได้ไฟล์เรียงตามลำดับวันที่/เวลาของไฟล์ โดยไฟล์ล่าสุดจะโผล่มาเป็นไฟล์แรก

    ถ้าเราต้องการไฟล์ล่าสุดแค่ไฟล์เดียว ก็สามารถใช้คำสั่ง head -1 เพื่อตัดให้เหลือไฟล์เดียวได้ ก็จะได้คำสั่งเป็น

    $ ls -t /home/user/Documents | head -1
    

    ทีนี้ จากชื่อไฟล์ที่ได้ ถ้าต้องการวันที่ เราก็สามารถใช้คำสั่ง date โดยใช้ option -r สำหรับให้มันแสดงวันที่ของไฟล์ใดๆ ตย. เช่น ต้องการรู้วันที่ ของไฟล์ /etc/passwd ก็ใช้คำสั่ง

    $ date -r /etc/passwd
    

    เอาสองอย่างนี้มาใช้งานร่วมกันได้ตามนี้ครับ

    $ date -r `ls -t /home/user/Documents | head -1`
    

    ทีนี้ ถ้าต้องการให้ format ของวันที่ออกมาตามที่เราต้องการ อย่างเช่น ให้ format เป็น yyyy-mm-dd HH:MM:SS
    ก็เพิ่ม option ให้กับคำสั่ง date ประมาณนี้ “+%Y-%m-%d %H:%M:%S”

    รวมกันทั้งหมดเป็น

    $ date -r `ls -t /home/user/Documents | head -1` "+%Y-%m-%d %H:%M:%S"
    

    Q: ถ้าจะลงลึกไปหลาย level ต้องทำอะไรเพิ่มครับ
    A: หมายถึงต้องการไฟล์ล่าสุด ไฟล์เดียว จากใน directory นั้นและ sub directory ย่อยทั้งหมดใช่ใหมครับ?
    Q: ใช่ครับ
    A: งั้น คงต้องพึ่งพาคำสั่ง find ครับ เพื่อที่ list เอาเฉพาะไฟล์ทั้งหมดออกมาก่อน เพราะคำสั่ง ls ธรรมดามันจะไล่ไปตาม directory ทีละ directory

    เริ่มจาก

    $ find /home/user/Documents
    

    มันจะ list ทุกอย่างทั้งไฟล์ และ ไดเรคตอรี่และในไดเรคตอรี่ย่อยออกมา

    เราต้องการเฉพาะไฟล์ ระบุ option -type f
    เราต้องการให้มันแสดงวันที่ของไฟล์ออกมาด้วย อันนี้ต้องพึ่งคำสั่ง ls โดยใช้ option ของ ls เป็น –full-time

    $ find /home/user/Documents -type f -exec ls --full-time {} \;
    

    โดย {} เป็นการระบุว่าให้ find ใช้คำสั่ง ls –full-time กับ output ของ find ส่วน \; เป็นตัวระบุว่า จบ option ของ คำสั่ง find แค่นี้

    output ที่ได้ จะเป็นไฟล์ “ทั้งหมด” โดยที่ในแต่ละบรรทัดจะมี ข้อมูลอย่างอื่นของไฟล์นั้นออกมาด้วย เช่น permission, owner, group, size ซึ่งเราไม่สนใจ เราตัดเอาข้อมูลที่อยู่ข้างหน้าเหล่านั้นออกไปได้ โดยใช้คำสั่ง cut โดยในกรณีนี้ใช้ space ‘ ‘ เป็นตัวแบ่ง field และ เอาข้อมูลตั้งแต่ column ที่ 6 เป็นต้นไป

    $ find /home/user/Documents -type f -exec ls --full-time {} \; | cut -f6- -d' '
    

    คราวนี้เราก็ได้ไฟล์ทั้งหมดออกมาโดยนำหน้าชื่อไฟล์ด้วยวันที่/เวลา ซึ่งเราสามารถส่งเข้าไป sort โดยให้เรียงจากหลังมาหน้า
    sort -r และ เอา output ทั้งหมดมาตัดเอาเฉพาะบรรทัดแรกโดยใช้ คำสั่ง head -1 เหมือนเดิม

    $ find /home/user/Documents -type f -exec ls --full-time {} \; cut -f6- -d' ' | sort -r | head -1
    

    ซึ่ง output ที่ได้จากคำสั่ง head อันนี้จะมี วัน/เวลาของไฟล์ นำหน้า ตามด้วยชื่อไฟล์ ซึ่งอาจจะเอาไปใช้งานได้เลย
    หรือ ถ้าต้องการเฉพาะชื่อไฟล์ เพื่อจะเอาไปทำอะไรอย่างอื่นต่อ ก็ต้องส่งไปให้คำสั่ง cut เพื่อตัด field ข้อมูลที่อยู่ด้านหน้าออก

    ขอบคุณคำถามจาก Garnet Komane ครับ

    ปล. สุดท้ายแล้วจากคำสั่งข้างบนที่ว่า แทนที่จะพิมพ์เอาบน command line แล้วไปเปลี่ยน path ที่จะให้ค้นหา เขียนมันใหม่เป็น shell script เลยจะเรียกใช้งานได้ง่ายกว่า ซึ่งจะได้ shell script ประมาณนี้ครับ

    #!/bin/bash
    
    LOCATION="$1"
    
    [ -z "$LOCATION" ] && { echo "Usage: $0 LOCATION"; exit; }
    
    FILE=$(
    find $LOCATION -type f -exec ls --full-time {} \;  |\
    cut -f6- -d' '                                     |\
    sort -r                                            |\
    head -1                                            |\
    cut -f4- -d' '
    )
    
    STAMP=$(date -r "$FILE" "+%Y-%m-%d %H:%M:%S")
    
    echo "$STAMP $FILE"
    

    หรือ ดาวน์โหลด script ได้จาก ที่นี่