Month: December 2018

  • Protect Windows Computer LAB using Toolwiz Time Freeze and Cygwin

    Toolwiz Time Freeze เป็น open source software freeware ติดตั้งเพิ่มใน Windows 10 สำหรับจัดการเครื่องคอมพิวเตอร์ในห้องบริการ ซึ่งจะทำให้เมื่อ restart เครื่อง จะกลับคืนสู่สภาพเหมือนครั้งที่ติดตั้งเสร็จไว้ให้บริการในตอนแรก Toolwiz Time Freeze ไม่ได้ให้ซอฟต์แวร์ควบคุมรวมศูนย์กลางแบบโปรแกรมอื่นประเภทเดียวกันนี้ เราจะต้องทำการเดินไปปลด Lock ที่หน้าเครื่อง Windows ทีละเครื่องเอง แต่อย่างไรก็ตาม Toolwiz Time Freeze ก็ให้คำสั่งรันแบบ command line มาด้วย

    http://www.toolwiz.com/lead/toolwiz_time_freeze.php

    ผมจึงลองเสนอไอเดีย วิธีใช้ linux ubuntu ในการควบคุมไม่ต้องเดินไปทำหน้าเครื่อง นั่นคือ ใช้คำสั่ง ssh ในการรัน ToolwizTimeFreeze.exe ด้วย option /freeze หรือ /freezealways หรือ unfreeze

    หลักการคร่าว ๆ
    ซอฟต์แวร์ที่เครื่องคอมพิวเตอร์ที่จะให้บริการ
    1.ติดตั้ง Windows 10
    2.login เข้าใช้งานด้วยบัญชีผู้ใช้ (user) สิทธิเทียบเท่า Administrator
    3.ติดตั้ง Cygwin for Windows จะได้ Linux emulator โดยเลือกติดตั้ง service sshd ทำงานอัตโนมัติเมื่อเปิดเครื่อง Windows
    4.ติดตั้ง Toolwiz Time Freeze ตั้ง Lock พร้อมตั้งค่า password ป้องกันการเปิดเข้าโปรแกรม

    ซอฟต์แวร์ที่เครื่องของ admin ผู้ดูแล
    1.ติดตั้ง Ubuntu server หรือ Desktop เพิ่ม 1 เครื่อง เพื่อที่จะสร้าง ssh key ด้วยคำสั่ง sshkeygen จะได้ key file ชื่อ id_rsa.pub และ id_rsa.key อยู่ในไดเรกทอรี .ssh
    2.ทำขั้นตอนส่ง id_rsa.pub ไปใส่เพิ่มต่อท้ายไฟล์ authorized_keys ของ user ที่ติดตั้ง Cygwin for Windows 10
    3.ตอนนี้ เราจะสามารถ ssh user@ip (IP ของ Windows 10) ได้แล้วโดยไม่มีการถาม password ทดสอบดู

    เมื่อต้องการปลด Lock (Unfreeze) Windows 10 ก็ใช้คำสั่งนี้ได้
    คำสั่งเขียนต่อกันเป็นบรรทัดเดียว

    ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $user@$ip  "/cygdrive/c/Program\ Files/Toolwiz\ Time\ Freeze\ 2017/ToolwizTimeFreeze.exe /unfreeze /usepass=$password" > /dev/null 2>&1 &

    โดยให้แทนที่ $user ด้วย ชื่อบัญชีผู้ใช้ที่ติดตั้ง Cygwin ให้แทนที่ $ip ด้วยไอพีแอดเดรสของ Windows 10 และให้แทนที่ $password ด้วย password ของโปรแกรม Toolwiz Time Freeze

    เมื่อรันคำสั่งนี้แล้ว Windows 10 จะ restart เมื่อตรวจสอบดูจะพบว่า Toolwiz Time Freeze อยู่ในสถานะ unprotect

    เมื่อต้องการ Protect Windows 10 (Freeze) ก็ใช้คำสั่ง 3 คำสั่งนี้ ต้องทำตามลำดับ คำสั่งเขียนต่อกันเป็นบรรทัดเดียว

    คำสั่งที่ 1/3

    ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $user@$ip "/cygdrive/c/Program\ Files/Toolwiz\ Time\ Freeze\ 2017/ToolwizTimeFreeze.exe /freeze /usepass=$password" > /dev/null 2>&1 &

    คำสั่งที่ 2/3

    ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $user@$ip "/cygdrive/c/Program\ Files/Toolwiz\ Time\ Freeze\ 2017/ToolwizTimeFreeze.exe /freezealways /usepass=$password" > /dev/null 2>&1 &

    คำสั่งที่ 3/3

    ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $user@$ip "shutdown -r -f -t 0" > /dev/null 2>&1 &

    เมื่อรันคำสั่งนี้แล้ว Windows 10 จะ restart เมื่อตรวจสอบดูจะพบว่า Toolwiz Time Freeze อยู่ในสถานะ protect

    ดังนั้น หากเรานำคำสั่งเหล่านี้มาเรียงเข้าเป็น shell script หรือ scripting language ที่ call คำสั่ง ssh ได้ ก็จะทำให้เราสั่ง Lock และ ปลด Lock เครื่องจำนวนมากได้อย่างง่ายขึ้น

    การ Lock หรือ Unlock ด้วย script จะมี process stopped ของ ssh ที่ไปสั่ง Toolwiz ให้ลบ process ด้วยวิธีนี้

    ps a | grep Toolwiz | awk '{print $1}' | xargs kill -9 > /dev/null 2>&1

    หมายเหตุ (ข้างล่างนี้คือตัวอย่าง)

    1.คำสั่งที่แนะนำ อ้างถึง path ที่ใช้ในการติดตั้งโปรแกรมแบบ default คือ

    c:\Program Files\Toolwiz Time Freeze 2017

    2.การตั้งค่าในโปรแกรม Toolwiz Time Freeze

    Download จาก ftp server โดยใช้ไฟล์นี้ Setup_TimeFreeze.exe

    ขั้นตอน installation จะมีตัวเลือกที่เป็นค่า default
    Use disk caching for the Time Freeze Engine (MB.): 5120 (ตัวเลขนี้คงต้องทดสอบกันเอาเอง)
    [ ] Enable Time Freeze on your system partition (C:) every time:
    [/] Disable Time Freeze while in Windows Safe-mode.
    [ ] Enable Password Protection

    ขั้นตอนตั้งค่า จะมีตัวเลือกที่ผมได้ทดลองใช้
    แท็บ Toolwiz Time Freeze
    In Time Freeze mode, your system will be protected from any changes. ให้คลิกปุ่ม Start Time Freeze
    [/] Enable Time Freeze automatically when Windows starts.
    [/] Enable Folder Exclusion when Time Freeze is ON
    และเลือกบาง folder ให้เก็บไฟล์ได้ เช่น c:\mywallpaper

    แท็บ Setting and Help
    [/] Enable Password Protection for the control
    [ ] Hide the tray icon
    [ ] Show toolbar on your Desktop

    3.การตั้งค่า Cygwin for Windows ให้มี service sshd

    ขั้นตอนติดตั้งโปรแกรม Cygwin
    login ด้วย user ชื่อ Administrator หรือ login ด้วย user ที่มีสิทธิเทียบเท่า Administrator ก็ได้
    ติดตั้ง cygwin ให้คลิกขวาที่ Link ข้างล่างนี้และเลือก Save as เพื่อ download ไว้ แต่ไม่ต้องสั่งรัน
    ไฟล์สำหรับ Windows 64 bit http://cygwin.com/setup-x86_64.exe
    แล้วออกไปที่ Windows CMD แบบ Run as Administrator
    ให้ทำคำสั่ง ณ ตำแหน่งโฟลเดอร์ที่ download ไฟล์ เช่น Downloads ดังนี้

    cd %HOMEPATH%/Downloads 
    setup-x86_64.exe -q -s http://mirrors.psu.ac.th/cygwin -P openssh,curl,wget,dialog,vim 

    หรือ

    cd %HOMEPATH%/Downloads 
    setup-x86_64.exe -q -s http://cygwin.mirror.constant.com/ -P openssh,curl,wget,dialog,vim 
    

    รอนานสักนิด เมื่อเสร็จจะมีข้อความ Ending cygwin install ให้กด Enter

    ขั้นตอนติดตั้ง script เพื่อจัดการเรื่องควบคุมเครื่อง
    เปิดโปรแกรม Cygwin Terminal แบบ Run as Administrator เพราะว่าจะมีการเข้าไปแก้ registry

    การตั้งค่า cygwin เพื่อจัดการเรื่องควบคุมเครื่อง ทำดังนี้

    wget -N ftp://ftp.psu.ac.th/pub/psu12-sritrang/cygwin/cygwin-config-sshd.sh
    bash -o igncr cygwin-config-sshd.sh

    script ติดตั้งจะถามยืนยันว่าจะติดตั้ง ให้กด y และ Enter
    จะเริ่มต้นด้วย
    (1)การติดตั้ง user ชื่อ cyg_server ให้ตั้ง password
    (2)program จะ run ไปเรือย ๆ จนเสร็จ (จะมีแวะระหว่างทาง ให้ใส่ password = ให้ใส่ตัวเดียวกับข้อ (1) (การติดตั้ง user ชื่อ cyg_server) และจะมีถาม reenter = ใส่ซ้ำอีกครั้งให้เหมือนกัน) Cygwin3.0.7(14พ.ค.62)ไม่มีหยุดถาม password แล้ว
    (3)program จะมาหยุดที่คำถาม Cygwin3.0.7(14พ.ค.62)ไม่มีหยุดถามแล้ว
    Warning: Registering the Cygwin LSA authentication package requires administrator privileges! You also have to reboot the machine to activate the change.
    Are you sure you want to continue? (yes/no)
    ให้ตอบ yes
    (4)เมื่อเสร็จจะมีข้อความ cygwin-config-sshd.sh finished เมื่อเสร็จจะออกสู่ prompt

    การตรวจสอบ cygwin มี sshd พร้อมให้บริการให้ทำดังนี้
    ให้ reboot Windows หลังจากติดตั้ง cygwin เพื่อให้มีการ start service sshd ขึ้นมาก่อน
    ให้ login ด้วย user สิทธิ Administrator
    เปิด program cygwin64 terminal โดยคลิกขวาเลือก Run as Administrator
    พิมพ์คำสั่ง ssh 127.0.0.1 ผลลัพธ์จะต้องมีคำถามให้ตอบ Yes และ ถาม password

    ในกรณี cygwin มีปัญหา ให้ทำดังนี้
    ให้ login ด้วย user สิทธิ Administrator
    เปิด program cygwin64 terminal โดยคลิกขวาเลือก Run as Administrator
    รัน script cygwin-uninstall.sh ดังนี้
    bash -o igncr cygwin-uninstall.sh
    ออก (exit) จาก cygwin terminal
    แล้วเข้า Windows Explorer ลบ c:\cygwin64 ทิ้ง
    ต่อไปก็ย้อนไปทำการติดตั้ง (reinstall) cygwin ใหม่ จนเสร็จ

    References:

  • วิธีตรวจสอบรุ่นของ CPU ว่าสามารถใช้งาน Tensorflow ได้หรือไม่

    ปัญหา

    สร้างเครื่องบน VMWare ESXi รุ่นล่าสุดก็แล้ว ลงเป็น Windows Server 2016 DataCenter ก็แล้ว ตาม Spec ของ Tensorflow (Version ล่าสุด 1.12) บอกว่า ใช้ Python 3.6 ก็ลงแล้ว (ยังใช้กับตัวล่าสุด 3.7 ไม่ได้) 

    ติดตั้ง Tensorflow ก็ลงตามปรกติ

    pip install tensorflow

    ก็สำเร็จเรียบร้อยดี แต่พอลอง import

    import tensorflow

    ปรากฏว่าเกิด Error 
    “Failed to load the native TensorFlow runtime.”

    ทั้ง ๆ ที่ลงบน Physical Server ที่ไม่ใช่ VMWare ก็ใช้งานได้ปรกติ ทำไม ???

    ตั้งสมมุติฐาน

    Hardware มีความแตกต่างอะไร ระหว่าง VMWare กับ Physical Server ?

    รวบรวมข้อมูล

    ไปดู Hardware Requirements พบว่า ตั้งแต่ Tensorflow 1.6 เป็นต้นมา ต้องใช้งานบน CPU ที่มี AVX Instruction

    และจาก 

    https://en.wikipedia.org/wiki/Advanced_Vector_Extensions#CPUs_with_AVX

    บอกว่า CPU ที่มี AVX Instruction คือ เก่าสุด ชื่อรุ่น Sandy Bridge

    แล้ว … เครื่อง Windows Server 2016 DataCenter ที่สร้างบน VMWare นั้น ได้ CPU อะไร ??

    ค้นหาข้อมูล พบว่า Microsoft ให้ใช้เครื่องมือฟรี ที่ชื่อว่า coreinfo (ซึ่งบน Linux ใช้ cpuinfo) สามารถ Download ได้ที่ https://docs.microsoft.com/en-us/sysinternals/downloads/coreinfo

    เมื่อลอง Download มาติดตั้ง และ ใช้คำสั่ง coreinfo ได้ผลว่า เป็นรุ่น Intel Xeon รุ่น E7  – 4870

    ลองไปค้นหาดู ว่า รุ่น E7 – 4870 มี Code Name ว่าอะไร  จาก Intel ได้ความว่า ชื่อรุ่น Westmere ซึ่ง ไม่มี AVX !!!!!

    ไปดูลำดับ Codename จาก 

    https://en.wikipedia.org/wiki/List_of_Intel_CPU_microarchitectures

    พบว่า Westmere เป็นรุ่นสุดท้าย ก่อนจะมีการใส่ AVX นั่นเอง (Sandy Bridge, Ivy Bridge, Haswell … เป็นต้นมา มี AVX หมด)

    สรุปผล

    เครื่องบน VMWare ปัจจุบัน นั้นจะได้ Spec ตาม CPU ตัวต่ำสุดใน Cluster ดังนั้น …. เจ้าจึงได้ Westmere ที่ไม่มี AVX ไปใช้ และ ใช้งาน Tensorflow รุ่นตั้งแต่ 1.6 เป็นต้นมาไม่ได้

    จบข่าว

  • Stencil : Styling

    Shadow DOM

    Shadow DOM เป็น API ที่อยู่ใน browser ที่ให้ความสามารถในทำ DOM encapsulation และ style encapsulation โดย Shadow DOM จะแยก component ออกจากภายนอก ทำให้ไม่ต้องกังวลกับ scope ของ css หรือผลกระทบกับ component ภายนอก หรือ component ภายนอกจะกระทบกับ component ภายใน

    ใน Stencil ค่า default การใช้งาน Shadow DOM ใน web component ที่สร้างด้วย Stencil จะถูกปิดอยู่  หากต้องการเปิดใช้งาน Shadow DOM ใน web component ต้องกำหนดค่า shadow param ใน component decorator ดังตัวอย่างด้านล่างนี้

    @Component({
      tag: 'shadow-component',
      styleUrl: 'shadow-component.scss',
      shadow: true
    })
    export class ShadowComponent {
    
    }
    

    สิ่งจำเป็นเมื่อเปิดใช้งาน Shadow DOM

    • QuerySelector เมื่อต้องการ query element ที่อยู่ภายใน web component จะต้องใช้ this.el.shadowRoot.querySelector() เนื่องจาก DOM ภายใน web component อยู่ภายใน shadowRoot
    • Global Styles จะต้องใช้ CSS custom properties
    • css selector สำหรับ web component element คือ “:host”  selector

    โดยทั่วไป จะเก็บ styles ไว้ภายไต้ ชื่อ tag ของ component นั้น

    my-element {
      div {
        background: blue;
      }
    }
    

    ในกรณีของ Shadow DOM  อยู่ภายใต้ tag :host

    :host {
      div {
        background: blue;
      }
    }
    

    Scoped CSS

    สำหรับ browser ที่ไม่สนับสนุน Shadow DOM, web component ที่สร้างโดย Stencil จะกลับไปใช้ scoped CSS แทนที่จะ load Shadow DOM polyfill ที่มีขนาดใหญ่  Scoped CSS จะทำการกำหนดขอบเขต CSS ให้กับ element โดยอัตโนมัตตอน runtime

    CSS Variables

    CSS Variables เหมือนกับ Sass Variables แต่ต่างกันตรงที่ CSS Variables รวมอยู่ใน browser โดยที่ CSS Variables ให้ความสามารถในการกำหนด CSS properties ที่ใช้ได้ภายใน app  ตัวอย่างการใช้งานที่พบบ่อยคือ การกำหนดสี (color) ถ้ามีสีหลักที่ต้องการใช้ร่วมกันทั้ง app แทนที่จะกำหนดสีนั้นๆในแต่ละที่ที่ใช้งาน ก็จะสร้าง variable ขึ้นมาและใช้ variable นั้นในทุกๆที่ที่ต้องการ ซึ่งถ้าต้องการเปลี่ยนสี ก็สามารถเปลี่ยนที่ variable ที่เดียว

    การใช้งาน CSS Variables ใน Stencil

    สร้าง file : variables.css ที่ใช้เก็บ CSS Variabless ใน “src/global/” directory  และเพิ่ม config globalStyle: ‘src/global/variables.css’  ใน stencil.config.js

    ตัวอย่าง การกำหนด CSS Variable ใน src/global/variables.css

    :root {
      --app-primary-color: #488aff;
    }
    

    จากตัวอย่างด้านบน สร้าง CSS Variable ชื่อ –app-primary-color ที่เก็บค่าสี #488aff อยู่ภายใต้ :root selector (:root selector คือ CSS pseudo selector ที่หมายถึง root element ของ app) การใช้ CSS Variable ที่กำหนดไว้ทำได้ดังนี้

    h1 {
      color: var(--app-primary-color)
    }
    

    เป็นการกำหนดสี ที่เก็บไว้ใน CSS Variable –app-primary-color ให้กับ h1 element

     

    อ้างอิง : https://stenciljs.com/docs/styling