Category: Operating System

  • เตาะแตะไปกับ Docker ตอนที่ 5 Docker registry

    อยากลองใช้ docker แต่ยังไม่ต้องการนำ image อัปโหลดไปไว้บน docker hub จะทำอย่างไรได้มั้ย ที่นี่มีคำตอบครับ

    เราสามารถนำ docker image ที่ได้สร้างขึ้นนั้นไปเก็บไว้ในสิ่งที่เรียกว่า Docker registry ซึ่งแบ่งได้เป็น 2 อย่างคือ Public registry อยู่ที่ hub.docker.com เราจะต้องลงทะเบียนเพื่อขอมีบัญชีผู้ใช้จึงจะสามารถอัปโหลด image ไปเก็บไว้ได้ ส่วนอีกอย่างก็คือ Private (Local) registry จะเป็นการสร้างที่เก็บส่วนตัว ที่เก็บของหน่วยงาน ในบทความนี้จะสาธิตทำที่เก็บ image สำหรับทดสอบงาน

    การใช้งาน Docker public registry ต้องมี user account ที่ cloud.docker.com
    จะต้อง login ก่อนจึงจะ push image ขึ้นไปได้ เหมือนที่แสดงตัวอย่างไว้ในบล็อก “เตาะแตะไปกับ Docker ตอนที่ 1”

    $ docker login

    ตัวอย่างคำสั่ง push ที่ผมนำ image ไปเก็บไว้

    $ docker push woonpsu/docsdocker:part1

    ซึ่งเรียกใช้จากที่เครื่องใดก็ได้ ด้วยคำสั่ง pull

    $ docker pull woonpsu/docsdocker:part1

     

    แต่หากเรายังไม่พร้อมที่จะนำ image ไปไว้บนนั้น เราก็ทำ Local registry ไว้ใช้เองไปพราง ๆ ก่อน ทำได้ 2 แบบ คือ
    1. Local registry ที่ใช้งานภายในเครื่องของเราเครื่องเดียว
    2. Local registry ที่เราเปิดให้เครื่อง client อื่น ๆ เข้ามาใช้ร่วมได้

    Local registry แบบที่ใช้งานภายในเครื่องของเราเครื่องเดียว (localhost:5000)
    ใช้คำสั่งนี้เพื่อเริ่มต้นสร้าง registry container

    $ docker run -d -p 5000:5000 --restart=always --name myregistry registry:2

    จากนั้นเรา pull image สักอัน จาก hub.docker.com เช่น

    $ docker pull ubuntu:16.04

    หลังจากดัดแปลง(ไม่ทำก็ได้)ตามต้องการแล้วก็ใส่ tag localhost:5000/my-ubuntu ดังนี้

    $ docker tag ubuntu:16.04 localhost:5000/my-ubuntu
    $ docker images

    แล้วก็ push image ไปยัง local registry ซึ่งก็คือ เครื่องที่เรากำลังใช้งาน (localhost) ใช้ port หมายเลข 5000 ดังนี้

    $ docker push localhost:5000/my-ubuntu

    ซึ่งวิธีการเรียกใช้งาน image ที่เก็บไว้นั้น เป็นดังนี้

    $ docker pull localhost:5000/my-ubuntu

    ก่อนไปทำตัวอย่างถัดไปซึ่งเป็นแบบที่ 2 ให้ลบ container ชื่อ myregistry ที่ทดสอบเสร็จแล้ว ที่ต้องลบเพราะว่าใช้ port หมายเลขเดียวกัน หากใช้หมายเลข port ต่างกัน ก็ไม่ต้องลบ

    $ docker stop myregistry
    $ docker rm myregistry

     

    Local registry แบบที่เราเปิดให้เครื่อง client อื่น ๆ เข้ามาใช้ร่วมได้ (docker-registry.localdomain:5000)

    เราจะต้องเริ่มต้นที่การกำหนดชื่อเครื่อง ผมสมมติตั้งชื่อว่า docker-registry.localdomain ให้กับ host ที่ติดตั้ง docker registry ใครจะตั้งอย่างไรก็ได้ครับ

    ในบทความนี้ เนื่องจากว่า ผมจะทดสอบแบบไม่ได้ไปจด Domain Name จริงให้กับเครื่อง ผมจะต้องแก้ไขไฟล์ /etc/hosts และ /etc/hostname ดังนี้

    ที่ไฟล์ /etc/hosts ให้เพิ่มบรรทัด

    10.168.16.19 docker-registry.localdomain

    ที่ไฟล์ /etc/hostname ให้เปลี่ยนชื่อเครื่องจากเดิม มาเป็นดังนี้

    docker-registry.localdomain

    เสร็จแล้ว reboot เครื่อง

    ขั้นตอนการตั้งค่า มาดูกันครับ
    เริ่มต้นที่เครื่อง docker-registry.localdomain
    ให้ทำคำสั่งตั้งค่า TLS certificate เพราะว่าจำเป็นต้องใช้ด้วย (หากมี certificate ของจริงก็นำมาใช้แทน domain.crt และ domain.key ได้เลย)

    $ cd
    $ mkdir certs
    $ openssl req \
    -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key \
    -x509 -days 365 -out certs/domain.crt

    จะมีการถามให้เติมข้อมูล เอาคล้าย ๆ ตัวอย่างก็ได้

    Generating a 4096 bit RSA private key
    writing new private key to 'certs/domain.key'
    Country Name (2 letter code) [AU]:TH
    State or Province Name (full name) [Some-State]:SK
    Locality Name (eg, city) [ ]:HDY
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:PSU
    Organizational Unit Name (eg, section) [ ]:CC
    Common Name (e.g. server FQDN or YOUR name) [ ]:docker-registry.localdomain
    Email Address [ ]:

    จะพบว่าในไดเรกทอรี certs จะเกิดไฟล์ 2 ไฟล์

    $ ls certs/
    domain.crt domain.key

    ใช้คำสั่ง docker run สร้าง container และสมมติตั้งชื่อว่า netregistry

    $ docker run -d --restart=always --name netregistry \
    -v `pwd`/certs:/certs \
    -e REGISTRY_HTTP_ADDR=0.0.0.0:5000 \
    -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
    -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
    -p 5000:5000 \
    registry:2

    ต่อไปจะเป็นการทดสอบการใช้งาน local registry
    ใส่ tag ก่อนที่จะ push ดังนี้

    $ docker tag ubuntu:16.04 docker-registry.localdomain:5000/my-ubuntu
    $ docker images

    แล้ว push image เก็บไว้ใน local registry

    $ docker push docker-registry.localdomain:5000/my-ubuntu

     

    ไปที่เครื่อง client สมมติตั้งชื่อ hostname ว่า docker-vm3
    ที่ไฟล์ /etc/hosts ให้เพิ่มบรรทัด

    127.0.1.1 docker-vm3
    10.168.16.19 docker-registry.localdomain

    ที่ไฟล์ /etc/hostname เป็นดังนี้

    docker-vm3

    เสร็จแล้ว reboot เครื่อง
    ต่อไปก็ทดสอบ pull image จาก local registry ที่ทำขึ้นนั้น

    $ docker pull docker-registry.localdomain:5000/my-ubuntu
    $ docker images

    ต่อไปก็ทดสอบ push image โดยเราก็ไปเอา image จาก hub.docker.com มาสัก 1 อัน ใส่ tag แล้ว push ดังนี้

    $ docker pull woonpsu/docsdocker:part1
    $ docker tag woonpsu/docsdocker:part1 docker-registry.localdomain:5000/helloworld
    $ docker push docker-registry.localdomain:5000/helloworld

    จะพบว่าเราสามารถ push image ไปยังเครื่อง local registry ได้ด้วย

    วิธีที่แนะนำไปแล้วข้างต้น เป็นการสร้าง Local registry ที่ไม่ได้มีความปลอดภัย เพราะว่าแค่รู้ชื่อเครื่อง รู้หมายเลข port (เลือกทดสอบกับ port 5000) ก็สามารถ push image ได้แล้ว

     

    ดังนั้นหากจะสร้าง Local registry ให้บริการ (production) เราก็ต้องทำขั้นตอนเพิ่มอีกคือต้องใช้ TLS certificate ร่วมกับ Access control

    ดังนี้

    ที่เครื่อง docker-registry.localdomain
    สร้าง username ที่มีสิทธิจะเข้ามา (access) ใช้ local registry สมมติชื่อ testuser และรหัสผ่านคือ testpassword ดังนี้

    $ mkdir auth
    $ docker run \
     --entrypoint htpasswd \
     registry:2 -Bbn testuser testpassword > auth/htpasswd
    $ cat auth/htpasswd
    testuser:$2y$05$UMOEA8bdBqSbHp/2LfiQ/uxLkf5IkXNqNE8V3Mp2IR/fRCsLXE5Q2

    รัน container ตั้งชื่อว่า privateregistry และเราจะเปลี่ยนมาใช้ port 443 ดังนี้

    $ docker run -d \
     --restart=always \
     --name privateregistry \
     -v `pwd`/auth:/auth \
     -e "REGISTRY_AUTH=htpasswd" \
     -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
     -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
     -v `pwd`/certs:/certs \
     -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
     -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
     -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
     -p 443:443 \
     registry:2

    ไปที่เครื่อง client ชื่อ docker-vm3

    $ docker login docker-registry.localdomain
    Username: testuser
    Password:

    ทดสอบ push image

    $ docker tag woonpsu/docsdocker:part1 docker-registry.localdomain/sawadee
    $ docker push docker-registry.localdomain/sawadee

    ลองทดสอบดูว่าหากไม่ได้ login ก็จะ push ไม่ได้

    $ docker logout docker-registry.localdomain
    $ docker push docker-registry.localdomain/sawadee
    The push refers to a repository [docker-registry.localdomain/sawadee]
    0d960f1d4fba: Preparing
    no basic auth credentials

     

    ข้อควรระวังในการทำ local registry คือ image ที่เรานำไปเก็บไว้ จะอยู่ใน container ซึ่งหากเราลบ container ด้วยคำสั่ง

    $ docker stop privateregistry
    $ docker rm privateregistry

    ก็จะเป็นการลบ image ทั้งหมด
    ดังนั้น เราจะต้องศึกษาวิธี mount volume เข้าไปใน container เพื่อให้ image ที่ push ไว้นั้น ถูกเก็บใน file system ของเครื่อง host แทน โดยเพิ่มบรรทัด -v นี้เข้าไปด้วยวางไว้ก่อนบรรทัดสุดท้าย (registry:2)

    -v /mnt/registry:/var/lib/registry \

    โดยที่ /mnt/registry คือ file system บน host และ /var/lib/registry คือไดเรกทอรีใน container

     

    ขอให้สนุกกับการทดลองเล่น docker กันนะครับ

     

    Reference:
    https://docs.docker.com/registry/deploying/
    https://docs.docker.com/registry/deploying/#restricting-access

     

     

  • ติดตั้ง Microsoft Office 2010 บน Linux Mint 18.2

         สวัสดีวันค่ะ… บล็อคนี้เราก็ยังคงอยู่กับ Linux Mint “Sonya” ที่มาพร้อมกับ Applicationพื้นฐานติดตั้งมาด้วย สำหรับคนที่ยังไม่คุ้นเคยกับ Linux ก็จะมีคำถามว่าแล้วโปรแกรมนี้ที่เคยใช้ในฝั่ง Windows มันมีให้ใช้ใน Linux มั้ย อย่างเช่น Microsoft Office อันนี้ Linux ก็มี LibreOffice ให้ใช้แทน และ LibreOffice Writer สามารถ Save เป็น นามสกุล .doc, .docx มาเปิดบน Windows ได้ แต่ Fonts อาจจะเพี้ยนๆหน่อยตอนเอามาเปิดบน Windows ก็มีทางเลือกให้เราติดตั้ง Fonts ที่ต้องการลงไป ดังภาพที่ 1

     

     

    ภาพที่1 ติดตั้ง Font บน Linux

    หรือไม่แน่ใจว่า Office ตัวอื่นจะประสบปัญหาอะไรไหมตอนเอาไปเปิดกับ Windows อยากได้โปรแกรมของ Microsoft Office ทั้งหมดเอาไปใช้เลย!! ก็ทำได้ ก่อนอื่นก็ต้องลง PlayOnLinux ซึ่งเป็นโปรแกรมที่ช่วยให้สามารถใช้โปรแกรม Windows บน Linuxได้ โดยทำตามขั้นตอนดังนี้ค่ะ

    Step1: ไปที่ Software Manager > Search Palyon… > Install > รอวนไปค่ะ ช้าเร็วขึ้นกับเน็ตด้วย ตามภาพที่ 2

    ภาพที่2 Install PlayOnLinux

    Step2: เปิดโปรแกรม PlayOnLinux ดังภาพที่ 3

    ภาพที่3 Open PlayOnLinux

    เมื่อรัน PlayOnLinux ขึ้นมา ให้กด Install ดังภาพที่ 4

    ภาพที่4 หน้าจอ PlayOnLinux 

    เลือกเมนู Office และเลือก Microsoft Office Version ที่ต้องการติดตั้ง ตามภาพที่ 5

    ภาพที่5 List Program in Office Category

    จากนั้นก็ Next Step ไปค่ะ ตามภาพที่ 6

    ภาพที่6 Installation Wizard

    ระหว่างทางนั้น ในเมื่อชีวิตเราไม่ได้โรยด้วยกลีบกุหลาบ Error ตามภาพที่ 7 ก็มา  ตั้งสติแล้วก็ไปลง winbind ซะ!!!

    ภาพที่7 Fatal Error

    กลับมาลง Office กันอีกที Again & Again(ไปฟังเพลงปลอบใจพลางนะ) ถ้าคุณได้ไปต่อมันก็จะขึ้นให้ Browse ไปยังที่เก็บไฟล์ .exe ตามภาพที่ 8 กด Open ไปอีกหน้าจอ แล้วกด Next รอจนติดตั้งเสร็จ

    ภาพที่8 Setup File

    ในที่สุดก็ติดตั้งเสร็จ จะแสดงผลลัพธ์ดังภาพที่ 9  ซึ่ง Shortcut ถูกสร้างไว้บน Desktop สามารถเรียกใช้ได้เลย ตามภาพที่ 10

    ภาพที่9 Installed Program

    ภาพที่10 Office Shortcut on Desktop

  • การเติมข้อมูล PDF Fill Form ผ่านโปรแกรมด้วย iTextSharp

    เนื่องจากในช่วงที่ผ่านมาผมได้เข้าร่วมในโครงการที่ต้องพัฒนาโปรแกรมที่มีการกรอกข้อมูลลงฟอร์ม และต้องการให้พิมพ์ข้อมูลต่างๆเป็น PDF จึงได้มีโอกาสศึกษาการใช้ PDF Fill Form และ iText Sharp Library เพื่อนำมาใช้ในการพัฒนา ผมจึงคิดว่าน่าจะเอาสิ่งที่ได้ศึกษามาเล่าสู่กันฟัง เผื่อมีท่านใดสนใจจะนำไปใช้ครับ

    เริ่มต้นทำสร้าง PDF Fill Form

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

    1.นำเอกสารแบบฟอร์ม ซึ่งเป็นไฟล์ word มาทำการสั่ง export  เป็นไฟล์ PDF หรือถ้ามีไฟล์ PDF ที่เป็นแบบฟอร์มอยู่แล้วก็สามารถนำมาใช้ได้เลย โดยทำตามภาพนะครับ

    2.นำไฟล์ PDF ที่ได้มา เปิดด้วยโปรแกรม Adobe Acrobat Pro

    3.คลิก Tools เพื่อทำการ edit โดยโปรแกรมจะถามว่าต้องการให้โปรแกรมสร้าง field อัตโนมัติให้หรือไม่ ถ้าตอบตกลงโปรแกรมจะสร้าง field ข้อมูลให้ในพื้นที่เอกสารที่คาดว่าจะเป็นช่องว่างสำหรับกรอกข้อมูลให้

    4.ทำการแก้ไขชื่อ field ข้อมูลให้เป็นชื่อที่เราต้องการ โดยคลิกเมาส์ขวาที่กล่อง field และเลือกเมนู property จะมี Popup ให้แก้ไขรายละเอียดต่างๆของ field

    5.หากต้องการเพิ่ม field ใหม่ เราสามารถเพิ่ม รูปแบบ field หลายแบบ เช่น

    – Text Box เป็น Field ที่ใช้เก็บข้อความต่างๆ

    – Check Box เป็น Field ที่ใช้เก็บค่าในการเลือกข้อมูลในฟอร์มแบบช่องสี่เหลี่ยม

    – Radio Box เป็น Field ที่ใช้เก็บค่าในการเลือกข้อมูลในฟอร์มเช่นกัน แต่จะแตกต่างกับ Check Box ที่เป็นวงกลม และจะเลือกค่าได้เพียงค่าเดียวในกลุ่มข้อมูลชุดเดียวกัน เช่น การกรอกข้อมูลเพศ ที่จะเลือกได้เพียงแค่เพศเดียว

    6.เมื่อสร้าง field จนครบถ้วนก็ทำการบันทึกไฟล์ คลิกเลือกไปที่เมนู File -> Save เพียงเท่านี้ก็จะได้ไฟล์ PDF ที่เป็นแบบฟอร์มส่งไปให้ผู้ใช้กรอกข้อมูล และบันทึกส่งเป็นไฟล์ PDF กลับมา

     

    ตัวอย่างการใช้ iText Sharp บน C# เติมค่าลงใน PDF Fill Form

    เพียงเท่านี้เราก็สามารถจะสามารถส่งข้อมูลจากโปรแกรมของเราไปกรอกในไฟล์ PDF ที่เราได้สร้างเป็น template ได้ พร้อมให้ user นำข้อมูลไปใช้ได้ทันทีครับ

  • เปลี่ยน ubuntu sources.list ก่อนสร้าง image ด้วย dockerfile

    การใช้งาน docker นั้นเราสามารถใช้ image จาก docker hub หรือเราจะสร้าง image ของเราเอง ซึ่งมีหลายวิธีในการสร้าง image แบบของเราเอง (custom) วิธีหนึ่งคือการใช้ dockerfile อย่างคร่าว ๆ คือ

    mkdir ~/mydocker
    cd ~/mydocker
    touch dockerfile
    docker built -t test_app:20170713 .
    docker images

    ในไฟล์ชื่อ dockerfile นี้จะมีไวยกรณ์ประมาณนี้

    # Image tag: test_app:20170713 <– บรรทัดนี้คือ comment
    FROM ubuntu:16.04 <– บรรทัดนี้คือ ไปเอา image ชื่อ ubuntu:16.04 จาก docker hub
    RUN apt-get update <– บรรทัดนี้คือ คำสั่งบอกว่าจะติดตั้ง หลังคำว่า RUN นั่นเอง
    RUN apt-get dist-upgrade -y
    RUN apt-get install -y apache2 libapache2-mod-php7.0 php7.0
    COPY …
    ADD …
    EXPOSE …
    CMD …
    และยังมี command อื่น ๆ อีก

    ทีนี้จากการที่ต้องลองผิดลองถูกบ่อย ๆ จึงพบว่า หากเราเพิ่มคำสั่ง 2 บรรทัดนี้เข้าไปก่อนบรรทัด RUN apt-get update ก็จะทำให้เราได้ใช้ ubuntu repository ที่ต้องการแทนค่า default ที่ archive.ubuntu.com เช่นต้องการให้มาใช้ th.archive.ubuntu.com ก็เขียนคำสั่งดังนี้

    RUN sed -i 's/\/us.archive/\/th.archive/g' /etc/apt/sources.list
    RUN sed -i 's/\/archive/\/th.archive/g' /etc/apt/sources.list

    ผลลัพธ์คือ หลังจากทำคำสั่ง docker built -t test_app:20170713 . จะเห็นว่าในขั้นตอนการ build นั้นจะดาวน์โหลดไฟล์ได้รวดเร็วกว่าเดิมมาก

    จึงนำความรู้มาบอกกันครับ อ้อลืมบอกว่าบทความที่เขียนนี้ ผมทดสอบกับ docker version 17.06.0-ce ครับ

    อยากแนะนำความรู้เกี่ยวกับ docker ที่อ่านมา พบว่าน่าสนใจ ลองอ่านดูครับ อ่านง่าย

     

    บทความในต่างประเทศ

    1. How To Install and Use Docker on Ubuntu 16.04 (https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-16-04)
    2. How to Build an Image with the Dockerfile (https://www.sitepoint.com/how-to-build-an-image-with-the-dockerfile/)
    3. Dockerfile reference (https://docs.docker.com/engine/reference/builder/)
    4. Best practices for writing Dockerfiles (https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/)
    5. How to update Docker image to maintain your containers secure  (https://bobcares.com/blog/update-docker-image/2/)
    6. How to upgrade docker container after its image changed
      (https://stackoverflow.com/questions/26734402/how-to-upgrade-docker-container-after-its-image-changed)
    7. Manage data in containers (https://docs.docker.com/engine/tutorials/dockervolumes/)

     

  • รู้จักฟังก์ชัน Excel ตอนที่ 2 เรื่อง ตระกูลท่าน Count (COUNTIF, COUNTIFS)

    พบกันอีกครั้งนะคะ กับ Excel ตอน ตระกูลท่าน Count ตอนที่ 2 ค่ะ สำหรับตอนที่ 2 นี้จะเป็นการแนะนำการใช้ Function COUNTIF และ COUNTIFS มาเริ่มกันเลยค่ะ

    COUNTIF

    เป็น Function ที่ใช้สำหรับนับข้อมูลตามเงื่อนไขที่เราต้องการ 1 เงื่อนไข เช่น

    • ต้องการนับจำนวนคนที่ได้เกรด A : เงื่อนไขคือ “คนที่ได้เกรด A”
    • ต้องการนับจำนวนคนที่ได้คะแนนมากกว่า 75 : เงื่อนไขคือ “คะแนนมากกว่า 75”

    รูปแบบ Function คือ COUNTIF(range, criteria)

    • range คือ ช่วงข้อมูลที่ต้องการนับจำนวน
    • criteria คือ เงื่อนไขที่ต้องการ

    ตัวอย่าง

    จากตัวอย่าง สิ่งที่ต้องการคือ หาจำนวนคนที่ได้เกรด A ดังนั้น

    • range คือ ช่วง D3 ถึง D7
    • criteria คือ “A”

    ดังนั้นสิ่งที่จะได้เมื่อเขียน Function คือ =COUNTIF(D3:D7,”A”) ผลลัพธ์ที่ได้คือ 2 ดังภาพ

     


    COUNTIFS

    เป็น Function ที่ใช้สำหรับนับข้อมูลตามเงื่อนไขที่เราต้องการโดยเงื่อนไขนั้นมีมากกว่า 1 เงื่อนไข เช่น

    • ต้องการนับจำนวนคนที่ได้เกรด A และเป็นเพศหญิง : เงื่อนไขคือ “คนที่ได้เกรด A” และ “เพศหญิง”
    • ต้องการนับจำนวนเด็กเข้าอบรมได้คะแนนมากกว่า 60 แต่น้อยกว่า 79 : เงื่อนไขคือ “คะแนนมากกว่า 60 แต่น้อยกว่า 79”

    รูปแบบ Function คือ COUNTIF(range_criteria1, criteria1, [range_criteria2, criteria2],…)

    • range_criteria1 คือ ช่วงข้อมูลที่ต้องการนับจำนวนของเงื่อนไขที่ 1 ค่านี้จำเป็นต้องระบุ
    • criteria1 คือ เงื่อนไขที่ต้องการ เงื่อนไขแรก ค่านี้จำเป็นต้องระบุ
    • range_criteria2 คือ ช่วงข้อมูลที่ต้องการนับจำนวนของเงื่อนไขที่ 2 ค่านี้ไม่จำเป็นต้องระบุ
    • criteria2 คือ เงื่อนไขที่ต้องการ เงื่อนไขที่สอง ค่านี้ไม่จำเป็นต้องระบุ
    • สามารถระบุเงื่อนไขที่ต้องการได้เรื่อย ๆ

    ตัวอย่าง

    จากตัวอย่าง สิ่งที่ต้องการคือ หาจำนวนคนที่ได้เกรด A และได้คะแนนมากกว่า 90 ดังนั้น

    เงื่อนไขแรก

    • range_criteria1 คือ ช่วง D3 ถึง D7
    • criteria1 คือ “A”

    เงื่อนไขที่สอง

    • range_criteria2 คือ ช่วง E3 ถึง E7
    • criteria2 คือ “>=90”

    ดังนั้นสิ่งที่จะได้เมื่อเขียน Function คือ =COUNTIFS(D3:D7,”A”,E3:E7,”>=90″) ผลลัพธ์ที่ได้คือ 1 ดังภาพ

    สำหรับเรื่องราวของตระกูลท่าน Count ก็จบลงในตอนที่ 2 แต่เพียงเท่านี้ หวังว่าคงเป็นประโยชน์แก่ผู้อ่านไม่มากก็น้อยนะคะ

    แล้วพบกันใหม่ตอนหน้าค่ะ 

  • รู้จักฟังก์ชัน Excel ตอนที่ 1 เรื่อง ตระกูลท่าน Count

    หลาย ๆ ท่านคงใช้ Excel อยู่ในชีวิตประจำวันไม่มากก็น้อย อาจจะชินตากับ Function Count กันอยู่บ่อย ๆ แต่ Function นี้ ไม่ได้มาเดี่ยว ๆ นะคะ ยังมีญาติ ๆ ในตระกูลอีกเพียบเลย มาดูกันค่ะว่า มีอะไรบ้าง และแต่ละ Function นั้นทำงานกันอย่างไรค่ะ

    1. COUNT
    2. COUNTA
    3. COUNTBLANK
    4. COUNTIF
    5. COUNTIFS

    Function ตระกูล Count หลัก ๆ ที่ผู้เขียนใช้งานจะมี 5 Function ข้างต้นนะคะ สำหรับในตอนที่ 1 นี้ ผู้เขียนจะนำเสนอ 3 ฟังก์ชันแรกก่อนก็คือ COUNT, COUNTA และ COUNTBLANK ค่ะ ส่วนอีก 2 Function สามารถติดตามต่อได้ในตอนที่ 2 นะคะ

     

    COUNT 

    สำหรับฟังก์ชันนี้ จะใช้สำหรับนับจำนวนเฉพาะตัวเลข โดยไม่นับตัวอักษรและช่องว่าง ที่อยู่ในช่วงที่เรากำหนด(range) หรือเลือกทีละค่า(value) ตามที่เราต้องการ

    รูปแบบ Function แบบ value คือ COUNT(value1, [value2],…)

    • value1 คือ ค่าข้อมูลแรกที่ต้องการนับจำนวน ในที่นี้คือใส่ทีละค่า ค่านี้จำเป็นต้องระบุ
    • value2 คือ ค่าข้อมูลที่สอง ที่ต้องการนับจำนวน ไม่จำเป็นต้องมี
    • สามารถเลือกค่าได้เรื่อย ๆ

    ตัวอย่าง

    ภาพที่ 1 การเลือกทีละค่าเพื่อนับจำนวนโดยใช้ Function Count

     

    รูปแบบ Function แบบ range คือ COUNT(value1, [value2],…)

    • value1 คือ ค่าข้อมูลแรกที่ต้องการนับจำนวนในที่นี้คือใส่เป็นช่วง การระบุคือ จุดเริ่มต้น:จุดสิ้นสุด ค่านี้จำเป็นต้องระบุ
    • value2 คือ ค่าข้อมูลที่สอง ที่ต้องการนับจำนวน ไม่จำเป็นต้องระบุ
    • สามารถเลือกค่าได้เรื่อย ๆ

    ตัวอย่าง

    ภาพที่ 2 การเลือกค่าเป็นช่วงเพื่อนับจำนวนโดยใช้ Function Count

    ผลลัพธ์ที่ได้

    หมายเหตุ เนื่องจาก จากภาพที่ 1 และ 2 มีการเลือกค่าเท่ากับการเลือกแบบช่วงดังนั้นค่าที่ได้จะเท่ากันค่ะ

    จากผลลัพธ์ที่ได้ จะเห็นได้ว่า Function Count จะนับเฉพาะตัวเลขเท่านั้น ส่วนตัวอักษรหรือช่องว่าง จะไม่ถูกนับค่ะ

    ซึ่งจะเห็นได้ว่า ข้อมูลคำนำหน้า เกรดและคะแนน จะนับได้แค่ 0 เนื่องจากมีช่องว่างข้อมูลและข้อมูลใน Column นั้นเป็นตัวอักษรค่ะ


    COUNTA

    สำหรับฟังก์ชันนี้ จะใช้สำหรับนับจำนวนข้อมูลทั้งหมดทั้งตัวอักษรและตัวเลข แต่ไม่นับช่องว่าง ที่อยู่ในช่วงที่เรากำหนด(range) หรือเลือกทีละค่า(value) ตามที่เราต้องการดังภาพค่ะ

    รูปแบบ Function แบบ value คือ COUNTA(value1, [value2],…)

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

    ตัวอย่าง

    จากผลลัพธ์ที่ได้ จะเห็นได้ว่า Function CountA จะนับข้อมูลทั้งหมด ยกเว้นช่องว่าง จะไม่ถูกนับค่ะ

    ซึ่งจะเห็นได้ว่า ข้อมูลเกรดและคะแนน จะนับได้แค่ 4 เนื่องจากมีช่องว่างข้อมูลละช่อง


    COUNTBLANK

    สำหรับฟังก์ชันนี้ จะใช้สำหรับนับจำนวนเฉพาะช่องว่าง ที่อยู่ในช่วงที่เรากำหนด(range)

    รูปแบบ Function แบบ value คือ COUNTBLANK(range)

    • range คือ ช่วงของข้อมูลที่ต้องการ

    ตัวอย่าง

    จากผลลัพธ์ที่ได้ จะเห็นได้ว่า Function CountBlank จะนับเฉพาะข้อมูลที่เป็นช่องว่างค่ะ

    ซึ่งจะเห็นว่าข้อมูลในที่นี้มีช่องเกรดและช่องคะแนน ที่มีช่องว่าง Column ละช่อง

     

    สำหรับในตอนที่ 1 ก็ขอจบลงเพียงเท่านี้ สามารถติดตาม Function COUNTIF และ COUNTIFS ต่อได้ในตอนที่ 2 ค่ะ 

  • ภาพสวยประกอบบน office ด้วย Pickit

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

    1.เริ่มต้นเราต้องทำการติดตั้ง Add-in ซึ่งสามารถติดตั้งได้ใน Microsoft office (Word, excel, power point) ในที่นี้จะนำเสนอในส่วนของ power point ไปยังแท็บ INSERT > Store

     

    2.เป็นหน้าจอ Apps for Office ในช่องค้นหา พิมพ์คำว่า “Pickit” เมื่อเจอรายการ “Picket Free Images” ให้กดปุ่ม Add

    3.เมื่อติดตั้งโปรแกรมเรียบร้อย โปรแกรมจะปรากฎอยู่ด้านขวาของหน้าจอ

    4.หากโปรแกรมไม่ขึ้นมาสามารถเรียกใช้โปรแกรมได้ที่ INSERT> My Apps > Pickit Free Images

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

    6.จากนั้นเลือกภาพที่ต้องการ ก็กดปุ่ม Insert เพื่อดึงภาพมาใช้ในงานของเรา

     

    เพียงเท่านี้เราก็ได้ภาพสำหรับตกแต่งให้งานนำเสนอของเรา น่าสนใจมากยิ่งขึ้น นอกจากนี้ภาพดังกล่าว ยังเป็น “ภาพฟรี” อีกด้วย

  • ไวรัส shortcut

    เหตุที่ตั้งชื่อบทความว่า ไวรัส shortcut ไม่ได้หมายความว่าไวรัสประเภทนี้ชื่อ shortcut แต่เป็นอาการทีเกิดขึ้นเมื่อไวรัสตัวนี้ทำงาน โดยสาเหตุและลักษณะอาการที่พบคือ เมื่อเรานำ flash drive หรืออุปกรณ์จำพวก removable drive (เช่น external hardisk) ไปใช้งานกับเครื่องคอมพิวเตอร์เครื่องใดเครื่องหนึ่ง ไฟล์ที่อยู่ใน flash drive หรือ removable drive จะหายไป และจะมีไฟล์ shortcut เกิดขึ้นแทนที่ โดย shortcut มักจะถูกตั้งชื่อเหมือนกับไฟล์ข้อมูลเดิมที่มีอยู่ ซึ่งหากเราเผลอเปิดไฟล์ shortcut ดังกล่าว ก็จะเป็นการไปเรียกไฟล์ไวรัสให้ทำงานนั่นเอง ส่วนไฟล์ข้อมูลเดิมนั้นไม่ได้หายไปไหน เพียงแต่เมื่อแรกเริ่มที่ติดไวรัสมานั้น ไฟล์เหล่านี้จะถูกซ่อนไว้ไม่ให้เห็นนั่นเอง

     

    ตัวอย่างไฟล์ shortcut ที่ไวรัสสร้างขึ้น ข้อสังเกตุคือจะมีไอคอนเป็นแบบ shortcut (ไอคอนรูปลูกศร)

     

    แนวทางการแก้ไข (ในบทความนี้จะยกตัวอย่างบน Windows 8.1)

    • อันดับแรกสิ่งที่ต้องเตรียมคือ เครื่องคอมพิวเตอร์ที่ไม่ติดไวรัส เพื่อใช้สำหรับกำจัดไวรัสและกู้ข้อมูลที่อยู่ใน flash drive หรือ removable drive โดยคอมพิวเตอร์ควรมีความพร้อมดังต่อไปนี้
      – ติดตั้งโปรแกรม antivirus ที่อัพเดตฐานข้อมูลไวรัสล่าสุด กรณี Windows 8.1 จะมี antivirus มาพร้อมอยู่แล้วคือ Windows Defender ซึ่งควรอัพเดตฐานข้อมูลไวรัสให้ล่าสุดก่อน
      – ปิด Autorun หรือ AutoPlay เพื่อป้องกันไม่ให้ไฟล์ใน  flash drive หรือ  removable drive ที่ติดไวรัส ถูกเปิดอ่านเมื่อมีการเชื่อมต่อกับเครื่องคอมพิวเตอร์ ซึ่งอาจจะเป็นสาเหตุให้ไวรัสแพร่กระจายต่อไปได้
    • เชื่อมต่อ flash drive หรือ removable drive ที่ติดไวรัสเข้ากับเครื่องคอมพิวเตอร์ จากนั้นทำการแสกนไวรัสด้วยโปแกรม antivirus ที่เตรียมไว้  และทำตามคำแนะนำของโปรแกรม antivirus  เพื่อกำจัดไฟล์ไวรัสและไฟล์ shortcut ที่ถูกไวรัสสร้างขึ้นมา   ซึ่งเมื่อเสร็จสิ้นขั้นตอนนี้แล้ว อาจจะพบว่า drive จะกลายเป็นพื้นที่ว่าง ๆ แต่หากดู properties ของ drive แล้วจะพบว่ามีเนื้อที่ส่วนหนึ่งถูกใช้ในการเก็บข้อมูล ซึ่งที่จริงแล้วก็คือไฟล์ข้อมูลที่ถูกไวรัสซ่อนไปนั่นเอง

    ตัวอย่าง falsh drive ที่ติดไวรัส หลังจากกำจัดไวรัสออกไปแล้ว จะเห็นเป็น drive ว่าง ๆ แต่เมื่อดู properties จะเห็นว่ามีเนื้อที่ส่วนหนึ่งที่มีการใช้เก็บข้อมูลอยู่

     

    • ส่วนของขั้นตอนการกู้ไฟล์ที่หายไปนั้น ก็คือการทำให้คอมพิวเตอร์ของเราเห็นไฟล์ที่ซ่อนไว้นั่นเอง
    • ซึ่งโดยปกตินั้น เราสามารถตั้งค่าการแสดงไฟล์ได้ในหน้าต่าง File Explorer โดยก่อนเข้าไปตั้งค่านี้ ให้เราเข้าไปที่ drive ที่ต้องการกู้ข้อมูลก่อน เพื่อจะได้เห็นผลจากการตั้งค่าได้เลย  จากนั้นเลือกเมนู View ที่อยู่ด้านบน แล้วเลือกเลือกเมนู Options แล้วเลือกคำสั่ง Change folder and search options เสร็จแล้วจะปรากฏหน้าต่างสำหรับตั้งค่า ต่อมาคือให้ไปที่แท็บ View จากนั้นให้ลองเลือกตัวเลือก ดังนี้
      • เลือก Show hidden files, folders, and drives จากนั้นกดปุ่ม Apply
      • หากไฟล์ที่ถูกซ่อนยังไม่ปรากฏ ให้เลือกตัวเลือก Hide protected operating system files (Recommended) แล้วกดปุ่ม Apply ซึ่งเมื่อถึงขั้นตอนนี้แล้ว ไฟล์ที่ถูกซ่อนไว้ก็น่าจะปรากฏขึ้นมาแล้ว
    • จะสังเกตเห็นว่าไฟล์ข้อมูลที่หายไปจะปรากฏขึ้นมา แต่ไอคอนจะเป็นสีจาง ๆ เนื่องจากถูกตั้งค่าให้เป็น Hidden โดยไวรัส และเมื่อดู properties ของไฟล์ จะพบว่าไม่สามารถเปลี่ยนค่าจาก Hidden เป็นปกติได้ เนื่องจากตัวเลือก Hidden ถูก disable อยู่
    • วิธีการแก้ไขเพื่อเอาค่า Hidden ออกทำได้ดังนี้คือ
      • อันดับแรก ให้กลับไปตัั้งค่าการแสดงผลไฟล์และโฟลเดอร์ให้เป็นเหมือนเดิมก่อน (ติ๊กเครื่องหมายถูกตัวเลือก Hide protected operating system files (Recommended) แล้วกดปุ่ม Apply) ไฟล์ก็จะถูกซ่อนไม่ให้เห็นเช่นเดิม  เพื่อจะได้ดูผลลัพธ์หลังจากแก้ปัญหาตามขั้นตอนแล้ว ว่าไฟล์ที่ซ่อนจะกลับมาแสดงให้เห็นเหมือนเดิมหรือไม่
      • เปิดหน้าต่าง command prompt แล้วพิมพ์ชื่อของ drive ที่ต้องการยกเลิกการซ่อนไฟล์
      • จากนั้นพิมพ์คำสั่ง attrib -s -h -r /S /D กดปุ่ม Enter
      • กลับไปตรวจสอบที่ drive ที่ต้องการกู้ข้อมูล ก็จะพบว่าไฟล์ที่ถูกซ่อนไว้กลับมาแสดงเช่นเดิม
      • อ้างอิงวิธีการจาก http://computertipeasy.blogspot.com/2014/03/hidden-file-and-folder-unlock-hidden.html

     

    สรุป

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