Category: Open Source Software & Freeware

  • ddready – แพ็ครวม django + bootstrap4 + crispy form + docker พร้อมใช้งาน

    สำหรับใครที่อยากจะลองพัฒนา Web Application ด้วย django web framework ผมได้รวบรวมเป็นชุดเริ่มต้น ซึ่งจะสามารถสร้าง Responsive Web และ มีแบบฟอร์มที่สวยงามด้วย crispy form มาเรียบร้อย ใช้งานได้ทั้ง แบบ Python บนเครื่อง และ แบบ Docker ลองทำตามดูได้ครับ

    ต้นแบบ มี Bootstrap 4 พร้อมใช้งาน
    มี Login Form มาให้เลย
    เข้ามาในส่วนของ Profile และ Logout ได้

    Repository

    สามารถเปิด URL ต่อไปนี้ เพื่อไป Download หรือ จะใช้ git clone ก็ได้

    https://github.com/nagarindkx/ddready.git

    https://gitlab.psu.ac.th/kanakorn.h/ddready.git

    จากนั้น ให้เปิด cmd ไปยังตำแหน่งที่ clone ลงมา

    สำหรับผู้ที่ติดตั้ง python อยู่แล้ว

    แล้วใช้คำสั่งต่อไปนี้

    pip install -r requirements.txt
    cd code
    cd main
    waitress-serve --listen *:8080 main.wsgi:application

    สำหรับผู้ที่จะใช้ Docker

    บน Windows ใช้คำสั่งต่อไปนี้

    set PROJECTNAME="projectname"
    set GCP-PROJECT-ID="gcp-project-id"
    set SERVICE="service"
    docker build --rm -f "Dockerfile" -t %PROJECTNAME%:dev .
    docker run -d -v %CD%\code:/code -p 8080:8080 --name %PROJECTNAME% %PROJECTNAME%:dev
    docker exec -it %PROJECTNAME% /bin/sh -c "[ -e /bin/bash ] && /bin/bash || /bin/sh"

    ทดสอบใช้งาน

    http://localhost:8080

    ในตอนต่อไป จะแนะนำวิธีการสร้าง แบบสอบถาม ทดแทนการใช้ Google Forms ครับ

  • แนวทางการพัฒนา Web Application ด้วย django จาก local docker สู่ Google Cloud Run

    ในการพัฒนาแอพพลิเคชั่น เราก็จะเจอปัญหานึงเสมอ ๆ คือ เวอร์ชั่น (Version) ของเครื่องมือที่ใช้ในการพัฒนานั้น แต่ละโปรเจคมีความแตกต่างกัน เช่น ในกรณีของ การพัฒนา Web Application ด้วย django web framework เราอาจจะอยากใช้ python รุ่นล่าสุด คือ 3.8 แต่ในขณะเดียวกัน เมื่อหลังบ้านต้องการไปติดต่อ Tensorflow 2.0 ซึ่งยังต้องใช้งานกับ Python 3.6 เป็นต้น วิธีแก้ไขปัญหาทั่วไปคือ ติดตั้ง package ‘virtualenv’ เพื่อให้การพัฒนาแต่ละโปรเจค มี Environment แตกต่างกันได้

    แต่จากการใช้งานจริง พบว่า สุดท้าย ตอนเอาไป Production บนเครื่อง Server ก็ต้องตามไปติดตั้งเครื่องมือ และรุ่นที่ถูกต้อง แม้ใน Python จะมีคำสั่ง pip install -r requirements.txt ก็ตาม แต่ก็ยังไปติดปัญหาว่า OS ของเครื่องที่จะ Production นั้น รองรับรุ่นของเครื่องมืออีกหรือไม่ด้วย

    แนวทางการใช้ Container ด้วย Docker จึงเป็นที่นิยม เพราะ เมื่อเราพัฒนาเสร็จแล้ว สามารถ Pack เข้าไปใน Container แล้วเอาไป Deploy ได้ โดย (แทบจะ) ไม่ต้องกังวลกับ Environment ปลายทาง อีกทั้ง ยังสามารถทดสอบ Environment ใหม่ ๆ ก่อนจะ Deploy ได้ด้วย เช่นการเปลี่ยนรุ่นของ Python เป็นต้น

    ในบทความนี้ จะนำเสนอ แนวทางการสร้าง docker container เพื่อใช้เป็นฐานในการพัฒนา django และ สามารถต่อยอด ติดตั้ง package อื่น ๆ ตามต้องการ ตั้งแต่ Development ไปจนถึง Deployment สู่ Serverless Environment อย่าง Google Cloud Run

    สร้าง Development Container

    เริ่มจาก สร้างโฟลเดอร์ใหม่ขึ้นมา ในนั้นมี 2 ไฟล์ คือ Dockerfile และ requirements.txt กับ โฟลเดอร์ ชื่อ code

    Dockerfile

    • ใช้ image ของ python เป็นรุ่น 3.7-slim ซึ่งตัดส่วนที่ไม่จำเป็นออกแล้ว (ไม่ใช้ alpine เนื่องจาก พบรายงานว่า แม้จะมีขนาดเล็กกว่า แต่ถูกจำกัดทรัพยากรบางอย่าง ทำให้ทำงานได้ช้ากว่า)
    • สร้าง /code แล้วเข้าไปใช้พื้นที่นี้ (เหมือนคำสั่ง mkdir /code ; cd /code อะไรประมาณนั้น)
    • สั่งให้ copy ไฟล์ requirements.txt ไปใช้ที่ root ( / )
    • จากนั้น Upgrade คำสั่ง pip เป็นรุ่นล่าสุด แล้ว ติดตั้ง package ตามที่กำหนดใน requirements.txt
    • เปิด Port 8080 ไว้ เพื่อใช้ในการทดสอบ และเป็นไปในแนวทางเดียวกับการใช้บน Google Cloud Run ต่อไป
    FROM python:3.7-slim
    WORKDIR /code/
    COPY requirements.txt /
    RUN pip install -U pip \
        && pip install -r /requirements.txt
    EXPOSE 8080

    requirements.txt

    ในการพัฒนา django เมื่อทำการติดตั้ง package ใดเพิ่มเติมด้วยคำสั่ง pip install ก็จะบันทึกรายการ พร้อมรุ่นของ package มาในไฟล์นี้ ในที่นี้ ใช้ django, guincorn และ whitenoise เป็นหลัก (จะมีรายการ dependency ติดเข้ามาด้วย)

    Django==2.2.6
    gunicorn==19.9.0
    pytz==2019.3
    sqlparse==0.3.0
    whitenoise==4.1.4

    จากนั้นใช้คำสั่งต่อไปนี้ สร้าง (build) docker image จากไฟล์ Dockerfile ข้างต้น โดยมี option ที่เกี่ยวข้องดังนี้

    docker build --rm -f "Dockerfile" -t mydjango:dev .
    • –rm เมื่อ build แล้ว ก็ลบ container ชั่วคราวทิ้ง
    • -f กำหนดว่าจะเรียกจากไฟล์ใด วิธีนี้ มีประโยชน์ เวลาที่จะต้องมี Dockerfile ทั้ง Development และ Production ในโฟลเดอร์เดียวกัน ซึ่งจำเป็นต้องใช้ชื่อไฟล์ที่แตกต่างกัน
    • -t เป็นตั้งชื่อ docker image และ ชื่อ tag
    • . คือ ให้ build จากตำแหน่งปัจจุบัน

    ขั้นตอนนี้จะได้ docker image ชื่อ mydjango และมี tag เป็น dev แล้ว้

    (ในที่นี้ พัฒนาบนเครื่องคอมพิวเตอร์ที่เป็น Windows 10 ซึ่ง %CD% จะให้ค่า Current Directory แบบ Absolute path ออกมา เช่นเดียวกับบน Linux ที่ใช้ $(pwd) )

    ต่อไป สั่ง run ด้วยคำสั่ง และ options ดังต่อไปนี้

    docker run --rm -it -p 8080:8080  -v %CD%\code:/code  mydjango:dev bash
    • –rm เมื่อจบการทำงาน ก็ลบ container ชั่วคราวทิ้ง
    • -it คือ interactive และเปิด TTY
    • -p เพื่อเชื่อม port 8080 จากภายนอก เข้าไปยัง port 8080 ภายใน container
    • -v เพื่อเชื่อม Volume หรือโฟลเดอร์ของเครื่อง host กับ /code ภายใน container ขั้นตอนนี้สำคัญ
    • bash ข้างท้าย เพื่อส่งคำสั่ง เรียก bash shell ขึ้นมา ซึ่งจะสัมพันธ์กับ -it ข้างต้น ทำให้สามารถใช้งาน shell ภายใน container ได้เลย

    ผลที่ได้คือ bash shell และ อยู่ที่ /code ภายใน container

    root@757bcbb07c7f:/code#

    ตอนนี้ เราก็สามารถสร้าง django ได้ตามปรกติแล้ว (คลิกดูตัวอย่างเบื้องต้น) แต่ในตัวอย่างนี้ จะเริ่มจากการสร้าง project ชื่อ main เพื่อใช้ในขั้นตอนต่อไป ด้วยคำสั่งต่อไปนี้

    django-admin startproject main
    cd main

    ในระหว่างการพัฒนา สามารถใช้คำสั่ง runserver โดยเปิด Port 8080 ใน container เพื่อทดสอบได้ดังนี้ (สอดคล้องตามที่อธิบายข้างต้น)

    python manage.py runserver 0.0.0.0:8080

    สร้าง Production Docker Image

    คำสั่งข้างต้น สามารถใช้ได้เฉพาะขั้นตอนการพัฒนา แต่เมื่อพัฒนาเสร็จแล้ว ควรใช้ Application Server แทน ในที่นี้จำใช้ gunicorn แต่ก่อนอื่น จะต้องปรับ Configuration ของ django ให้พร้อมในการ Deployment ก่อน

    main/settings.py

    # แก้ไข
    DEBUG = False
    ALLOWED_HOSTS = ['localhost','SERVICE-ID.run.app']
    
    # เพิ่ม
    MIDDLEWARE = [
        ...
        # Whitenoise
        'whitenoise.middleware.WhiteNoiseMiddleware',
        ...
    ]
    # เพิ่ม
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')

    มีเพิ่มเติมคือ whitenoise ซึ่งเป็น package สำหรับจัดการเกี่ยวกับการให้บริการ static file ในตัว มิเช่นนั้นจะต้องไปตั้งค่าใน Web Server ให้จัดการแทน

    เมื่อเราตั้งค่า DEBUG = False จะต้องกำหนด ALLOWED_HOSTS เสมอ ในที่นี้กำหนดให้เป็น localhost และ Production URL (SERVICE-ID.run.app) ที่จะเกิดขึ้นเมื่อสร้าง Service บน Google Cloud Run ครั้งแรกไปแล้ว (ค่อยกลับมาแก้ไขแล้ว Revision อีกครั้ง)

    ใช้คำสั่งต่อไปนี้เพื่อรวบรวม static files ต่าง ๆ มาไว้ในที่เดียวกัน ในที่นี้ คือที่ โฟลเดอร์ static

    python manage.py collectstatic

    ทดสอบ Production ด้วย gunicorn ด้วยคำสั่งต่อไปนี้

    gunicorn --bind 0.0.0.0:8080 main.wsgi

    ทดสอบเรียก Local Admin Console ( http://localhost:8080/admin ) ดู ถ้าเรียก static file เช่นกลุ่ม css ได้ ก็พร้อมสำหรับจะนำขึ้น Google Cloud Run ต่อไป

    สุดท้าย สร้าง Production Dockerfile และ สรุป requirements.txt ดังนี้

    Dockerfile.production

    FROM python:3.7-slim
    WORKDIR /code
    COPY ./code/* ./
    RUN pip install -U pip \
        && pip install -r requirements.txt
    EXPOSE 8080
    CMD [ "gunicorn","--bind","0.0.0.0:8080", "main.wsgi"]

    requirements.txt

    pip freeze > requirements.txt

    จากนั้น ใช้คำสั่งต่อไปนี้ เพื่อสร้าง Production Docker Image (ออกมาจาก Development Container shell ก่อน) โดยจะใช้ tag เป็น latest

    docker build -t mydjango:latest -f "Dockerfile.production" .

    ส่ง Production Docker Image ขึ้น Google Container Registry

    Google Cloud Run จะเรียกใช้ docker image ที่อยู่บน Google Container Registry เท่านั้น

    • เปิด Google Console
    • สร้าง Project ใหม่ และ ตั้งค่า Billing
    • เปิดใช้งาน Google Cloud Run และ Google Container Registry
    • ติดตั้อง Google Cloud SDK เพื่อให้สามารถ push ขึ้นได้ และ ยืนยันตัวตนด้วย Google Account

    แล้วใช้คำสั่งต่อไปนี้ เพื่อ tag

    docker tag mydjango:latest gcr.io/YOUR-GCP-PROJECT-ID/SERVICE-NAME
    • YOUR-GCP-PROJECT-ID เป็น Project ID ที่สร้างขึ้น
    • SERVICE-NAME ชื่อ service ที่จะสร้าง

    แล้วก็ push ขึ้น Google Container Registry

    docker push gcr.io/YOUR-GCP-PROJECT-ID/SERVICE-NAME

    สร้าง Google Cloud Run Service

    สร้าง Service โดยเลือก Image ที่ต้องการ

    เมื่อเสร็จแล้วจะได้ URL อย่าลืมเอาไปแก้ไขใน main/settings.py ในส่วนของ ALLOWED_HOSTS แทน SERVICE-ID.run.app

    จากนั้น build, tag และ push ขึ้น Google Cloud Registry อีกครั้ง แล้ว Deploy New Revision เป็นอันเรียบร้อย

    อันนี้เป็นการ Proof of Concept ในบทความต่อไป จะนำเสนอตัวอย่างการใช้งานจริงครับ

  • วิธีการระบบการจองตั๋ว (Ticket Reservation System ) alf.io

    ALF.io เป็น Open Source Ticket Reservation System แบบ Web Application

    • ผู้ดูแลระบบสามารถสร้าง Event อย่างเช่นงานประชุมสัมนา เมื่อเปิดรับลงทะเบียนเข้าร่วมงานได้ (แบบเก็บเงินหรือฟรีก็ได้) กำหนดจำนวนที่นั่งได้
    • ผู้เข้าร่วมงานกรอกข้อมูลส่วนตัว (และชำระเงินก็ได้)
    • ระบบจะส่ง Ticket ไปให้ทาง Email ในรูปแบบ QR Code
    • เมื่อถึงวันงาน เจ้าหน้าที่ที่หน้างานติดตั้ง Application บน Smartphone ของตนเอง (ซึ่งต้องลงทะเบียนกับระบบ)
    • ผู้เข้าร่วมงานแสดง QR ของตนเองให้เจ้าหน้าที่ Scan ได้เลย

    วิธีการติดตั้ง

    ต่อไปนี้ เป็นวิธีการติดตั้ง alf.io รุ่น 2.0-M1-1909 บน Windows 10 Education และ Windows Server 2016

    Prerequisite

    1. Java JDK
      เนื่องจาก alf.io พัฒนาด้วย Java รุ่น 12 จึงแนะนำให้ติดตั้ง Oracle JAVA SE รุ่นล่าสุด (ปัจจุบันคือ Java SE 13) โดยสามารถ download จาก Link นี้
      https://www.oracle.com/technetwork/java/javase/downloads/index.html
    2. Database Server
      สำหรับ Database แนะนำให้ใช้ Postgresql (ปัจจุบัน รุ่นล่าสุดคือ รุ่น 11) จากนั้น
      – สร้าง Database ชื่อ alfio
      – User ชื่อ alfio ให้สามารถสิทธิ์ CREATE ได้ โดยสามารถ Download จาก Link นี้
      https://www.postgresql.org/download/windows/

    ขั้นตอนการติดตั้ง

    1. สร้าง Folder
      เช่น C:\alfio เป็นต้น
    2. Download alf.io
      จาก https://github.com/alfio-event/alf.io/releases/tag/2.0-M1-1909
      เลือกไฟล์ชื่อ alfio-2.0-M1-1909-boot.war
      เก็บไว้ใน Folder ที่สร้างขึ้น (ในที่นี้ C:\alfio)
    3. สร้างไฟล์ Configuration
      สร้างไฟล์ชื่อ application.properties เพื่อกำหนดค่าเกี่ยวกับ Database ได้แก่ Host, Database, User, Password และอื่น ดังตัวอย่าง (อย่าลืมเปลี่ยน Password ให้ตรงกับที่ตั้งไว้)
    datasource.dialect=PGSQL
    datasource.driver=org.postgresql.Driver
    datasource.url=jdbc:postgresql://localhost:5432/alfio
    datasource.username=alfio
    datasource.password=ALFIO_PASSWORD_HERE
    datasource.validationQuery=SELECT 1
    spring.profiles.active=dev

    Run !

    ด้วยคำสั่ง

    java -jar alfio-2.0-M1-1909-boot.war

    หน้า Event

    http://localhost:8080/

    หน้า Admin

    http://localhost:8080/admin

    ตัวอย่างการใช้งาน

    https://ticket.psu.ac.th/event/KPC2019/

    เมื่อ Admin ของงาน (แต่ละ Server มีได้หลาย Event) สร้าง Ticket ให้ หรือ ผู้สนใจเข้าร่วมงาน เข้ามาสมัครร่วมงานเองก็ได้ จะได้ Email แจ้งดังนี้

    ซึ่งจะมี QR Code แนบมา (ที่เห็นเป็น # เพราะยังไม่ได้ใส่ Font ภาษาไทยในการ Generate PDF ให้ถูกต้อง — ไว้ค่อยเล่าให้ฟัง)

    เมื่อถึงวันงาน เจ้าหน้าที่รับลงทะเบียน จะติดตั้ง Application ลงใน Smartphone ของตนเอง แล้วมีการสร้าง Account เพื่อรับ Check-in (ค่อยมาลงรายละเอียด)

    ก็สามารถคลิกที่ Scan Attendees QR Code ของผู้มาลงทะเบียนเข้างานได้เลย

    หวังว่าจะเป็นประโยชน์ครับ

  • TOTP Second-factor Auth and OAuth2 in ownCloud 10.2.1

    คิดว่าเรื่อง security หรือ ความปลอดภัย ในการใช้ username และ password ก็เป็นความรู้ที่น่าจะได้มาเล่าสู่กันฟัง ในครั้งนี้ผมได้ลองตั้งค่าการใช้ TOTP Second-factor Auth ร่วมกับ password ของ ownCloud ในหน้า login ที่ web page

    การใช้ TOTP Second-factor Auth ร่วมกับ password ก็คือ การที่แอดมินที่ดูแล ownCloud Server ได้เพิ่ม App ชื่อ 2-Factor Authentication ไว้เพื่อให้ user ได้เลือกเองว่าจะใช้งานหรือไม่ โดยแสดงเป็น option อยู่ในหน้า settings ของ user

    ข้างล่างนี้เป็น captured รูปภาพที่แอดมินเพิ่ม App TOTP Second-factor Auth โดยติดตั้งจาก Market

    ส่วนข้างล่างนี้เป็น captured รูปภาพเมื่อ user เลือกใช้ TOTP และ เข้าใช้งานผ่านเบราว์เซอร์ โดยใส่ TOTP ที่ได้จาก App บนมือถือ เช่น Google Authentication หรือ Microsoft Authentication เป็นต้น

    นอกจากนี้เราสามารถตั้งค่า App passwords สำหรับ ownCloud Desktop Client ดังรูป

    ส่วนข้างล่างนี้เป็น captured รูปภาพ ownCloud Desktop Client หากมีการตั้ง App passwords

    แต่ถ้าแอดมินเลือกติดตั้ง OAuth2 ก็จะทำให้การใช้งานทั้ง desktop client และ app บน smart phone นั้นมีความปลอดภัยมากขึ้น สะดวกมากขึ้น เพราะว่าจะเป็นการส่ง token ไปเก็บไว้แทนการเก็บ username และ password ไว้ใน app

    ข้างล่างนี้เป็น captured รูปภาพที่แอดมินเพิ่ม App OAuth2

    ในครั้งแรกที่เข้าใช้ Desktop Client หรือ App จะมีหน้าเว็บเพจเด้งขึ้นมาให้ใส่ username กับ password เพียงครั้งเดียว และขอให้ผู้ใช้คลิก Authorize จากนั้นก็ใช้งานได้ตลอดแล้ว

    รูปแสดงว่า เรามีการเข้าใช้อุปกรณ์อะไรบ้าง

    ดังนั้น หากใช้ OAuth2 ก็ไม่จำเป็นต้องใช้ TOTP Second-factor Auth แล้วครับ

    สภาพแวดล้อมการทำงาน

    • ownCloud Server (ownCloud community) version 10.2.1 (stable) ติดตั้งบน Ubuntu 16.04 server และ
    • ownCloud Desktop client version 2.5.4 (build 11415) รันบน Windows 10 version 1903
  • Thunderbird returns

    หลังจากปันใจไปให้ Microsoft Outlook และใช้ Microsoft Outlook มาตลอดเกือบ 5 ปี มีเหตุให้การใช้ Google Calendar มีความสะดวกมากกว่า Office365 Calendar (จริงๆ ปฎิทินของ Office365 อาจจะทำได้ก็ได้แต่ไม่มีคนสอนกรั่กๆ) และเมื่อจะใช้ Google Calendar (โดยไม่ใช้เว็บ) ก็ต้องใช้คู่กับ Thunderbird สินะ!!!

    Download

    https://www.thunderbird.net/en-US/ คลิกตรงปุ่ม Free Download รุ่นปัจจุบัน 68.1.0 จะได้ English (US) รุ่น 32-bit หากต้องการรุ่น 64-bit คลิกที่ system & language แล้วเลือกภาษาที่ต้องการ แน่นอนไม่มีภาษาไทย English (US) หรือถ้าอ่านภาษาอื่นๆ ออกเชิญเลือกตามอัธยาศัย

    โหลดมาแล้วก็ติดตั้งให้เรียบร้อยด้วย Next Technology (Yes, Next, Next, Next, Next, Install, Finish)

    เมื่อเปิดโปรแกรม Thunderbird ครั้งแรกจะได้ประมาณดังรูป

    Set Up an Existing Email Account

    Mail Setup

    เริ่มการใช้งานได้เลยขั้นแรกตั้งค่าเมล์ สำหรับผู้ที่เปิดใช้งาน Gmail แล้วเท่านั้น หากยังไม่ได้เปิดใช้งาน อ่าน ที่นี่ ก่อน

    หากมีการเปิด 2-step Verification ต้องไปสร้าง App password ที่ gmail.com ให้เรียบร้อยก่อนแล้วเอา password ที่ได้มาใช้กับ thunderbird

    Calendar Setup

    Thunderbird (สำหรับ Windows) รุ่นใหม่ๆ จะให้ Lightning มาโดยปริยายไม่ต้องติดตั้งเพิ่ม แต่สิ่งที่ต้องติดตั้งเพิ่มคือ Provider for Google Calendar

    ส่วน Thunderbird (สำหรับ linux) ต้องติดตั้งเพิ่มเอง

    ที่หน้าต่าง Thunderbird กดปุ่ม alt-T (ปุ่ม alt และปุ่มอักษร t พร้อมกัน) เพื่อเรียกเมนู Tools

    เลือก Add-ons

    Add-ons

    จะได้หน้า Add-ons Manager

    Manage Your Extensions 

    ค้นหา Provider for Google Calendar ในช่อง Find more extensions จะได้หน้าต่างเพิ่มเป็นดังรูป

    Search Results

    คลิกปุ่ม + Add to Thunderbird แล้วคลิก Add

    Add

    คลิก Restart Now

    Restart

    เมื่อคลิกที่หน้าต่าง Add-ons Manager จะเห็นว่ามี Provider for Google Calendar เพิ่มมาแล้ว

    Add-ons Manager

    กลับมาที่หน้าหลักสังเกตมุมบนขวาจะมีรูป ให้คลิกที่ เพื่อเปิดหน้าปฎิทิน

    Calendar

    คลิกขวาที่พื้นที่ว่าง ๆ ใต้คำว่า Calendar เลือก New Calendar

    New Calendar

    จะได้หน้า Create New Calendar ให้เลือก On the Network แล้วคลิก Next

    Create a new calendar

    เลือก Google Calendar แล้วคลิก Next

    Google Calendar

    ใส่ E-mail address แล้วคลิก Next

    Locate your calendar

    ตรวจสอบว่า Username ที่ใส่ให้ถูกต้องหรือไม่คลิกถ้าถูกคลิก Next

    Sign in

    กรอกรหัสผ่านของ E-mail คลิก Next

    Enter your password

    หากเปิด 2-step Verification ไว้ก็เปิดแอ็ปกรอกตัวเลขให้เรียบร้อย

    2-step

    เลื่อนลงมาล่างสุดคลิก Allow

    Allow

    เลือกปฎิทินที่ต้องการคลิก Next

    Locate your calendar

    คลิก Finish

    Finish

    จะเห็นว่ามีปฎิทินเพิ่มขึ้นมาแล้วสามารถใช้งานได้ทันที

    Calendar

    จบขอให้สนุก

    หมายเหตุ!!!

    ต้องตั้งค่า general.useragent.compatMode.firefox ใน advance configuration ของ Thunderbird เป็น true สำหรับตอนนี้ เนื่องจาก Google เปลี่ยนอะไรสักอย่างทำให้ authen ไม่ได้

  • จับภาพ แชร์ภาพ ด้วย shareX Ep 3

    ต่อจาก Blogก่อนหน้า Blog นี้ เรามาว่ากันด้วยเรื่องของการ upload file และสั่งให้โปรแกรม Generate QR code กัน

    หลังจากที่เราบันทึกวีดีโอเสร็จแล้ว และเราอยาก upload file ขึ้นไปเก็บไว้ ผู้เขียนขอยกตัวอย่างเช่น “บันทึกวีดีโอเสร็จแล้ว upload file ขึ้น youtube เมื่อ upload เสร็จ ให้แสดง QR Code ขึ้นมา” โอเคมั้ย โจทย์ประมาณนี้นะ งั้นไป … เราไปเริ่มกันเลย !!!

    ลำดับแรกคลิกเลือก “Destinations” จากนั้นเลือกไปที่ “File uploader” เลือกเป็น “Youtube” เน้อออ

    จากนั้นก็มาเริ่มตั้งค่ากันเลย ให้ไปที่ “Destination” อีกรอบนึง แต่คราวนี้เลือกไปที่ข้อความ “Destination settings….” โปรแกรมก็จะเปิดหน้าต่างให้เราตั้งค่า

    เลือกที่เป็นประเภท File uploader จากนั้นเลือก youtube ขวามือจะแสดง ให้เรา authorize ไปยัง youtube ของเรา คลิกเลือกตรง Step 1 : Open authorize page จากนั้นก็จะเจอหน้าจอดังรูป

    ให้เราเลือกเลย กรณีเรามีบัญชีมากกว่า 1 ก็เลือกว่าจะใช้บัญชีไหน เมื่อเลือกเสร็จเรียบร้อยแล้วก็จะแสดงหน้าจอตามรูปด้านล่างเลย ก็ให้เลือก “อนุญาต

    เมื่ออนุญาตการเข้าถึงบัญชีของเราเรียบร้อยแล้ว เราก็จะได้ code ยาวๆ มา หน้าตาประมาณรูปด้านล่าง ให้เรา copy code ที่ได้ไว้นะ

    จากนั้นให้เอา code ที่ได้กลับมาวางในหน้าของโปรแกรมแกรม shareX ตรง ช่อง “Verification code” เสร็จแล้วรอแป๊บนึง เมื่อโปรแกรมตรวจสอบและ verify code แล้วว่าถูกต้องก็จะแจ้งเราว่า login successful. ถือว่าครบถ้วนกระบวนความ โดยในหน้านี้ เราสามารถตั้งค่าเพิ่มเติมได้ เช่น Private type: เลือกได้ว่าต้องการเป็นแบบใด public, private เป็นต้น และสามารถระบุได้ว่า link ที่ได้ต้องการเป็นแบบ shortened link หรือไม่

    ต่อมาตะกี้แผนของเราคือ upload ขึ้น youtube เสร็จแล้วให้แสดง QR Code ใช่มั้ย ก็ไปตั้งค่าเพิ่มกันอีกนิดนึง ให้ไปตรงเมนู “After upload task….” จากนั้นเลือก QR Code

    เมื่อตั้งค่าเสร็จทุกอย่างครบถ้วนกระบวนความแล้ว คราวนี้มาดูผลลัพธ์กัน ก็ลองบันทึกวีดีขึ้นมาสักอันนึง เมื่อบันทึกวีดีโอเสร็จแล้วให้ “คลิกขวา” บนไฟล์วีดีโอของเราจากนั้นเลือก Upload

    เมื่อเลือก upload แล้วก็รอสักครู่ จนโปรแกรมบอกเราว่า upload 100% พร้อม ๆ กับแสดงหน้าต่าง QR Code ขึ้นมาให้เราทันที

    ก็ลอง Scan QR Code กันดูได้ มันก็จะวิ่งไปที่วีดีโอของเราที่อัพขึ้น youtube นั่นแหละ

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

    หากผู้อ่านมีข้อสงสัย สามารถถามเข้ามาได้นะ ถ้ารู้ก็จะบอก แต่ถ้าไม่รู้ก็จะพยายามหาคำตอบมาให้ 55+ ส่วน Blog หน้าจะมาเล่าเรื่องอะไร รอติดตามกันนะทุกคนนนน …. บุ้ยบุ่ย ^___^

  • จับภาพ แชร์ภาพ ด้วย shareX Ep 2

    Blog นี้ ขอมาต่อในส่วนของโปรแกรม shareX โดยจะมาว่ากันในเรื่องของการบันทึกหน้าจอในรูปแบบ VDO กันค่ะ

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

    แต่ก่อนที่เราจะบันทึกภาพหน้าจอแบบวิดีโอด้วย shareX ได้นั้น เครื่องของเราก็ต้องมี plugin ที่ชื่อ “FFmpeg” ติดตั้งอยู่ในเครื่องก่อน แต่ถ้าไม่มีก็ไม่เป็นไรนะ ไม่ต้องตกใจหรอก เพราะว่าพอเราเลือกฟังก์ชันบันทึกภาพหน้าจอแบบวิดีโอ (Screen recording) โปรแกรมก็จะบอกเราว่า เราไม่มี plugin ตัวนี้ จะไปดาวน์โหลดมาติดตั้งเลยมั้ย ก็ให้ตอบตกลงไปเลย แค่นี้เราก็สามารถใช้งานการบันทึกภาพหน้าจอได้แล้ว

    หรืออีกวิธีนึง !!!

    เราสามารถไปดาวน์โหลดด้วยตัวเองก่อนก็ได้ โดยไปที่ “Task settings

    จากนั้นก็ปรากฏหน้าจอดังรูป ให้เลือก “Screen recorder” –> “Screen recording options….” –> คลิก Download

    รอสักครู่ ไฟล์ไม่ใหญ่ โหลดไม่นาน หน้าตาก็ประมาณนี้น่ะ

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

    อะ มาๆ เรามาลองบันทึกภาพเคลื่อนไหวจริงๆ กันเลย

    Step 1 : เลือก capture –> Screen recording 

    Step 2 : โปรแกรมก็จะให้เราเลือกพื้นที่ ที่เราต้องการจะบันทึก เราก็ลองลากเลือกเลยว่าจะบันทึกตรงไหน ตัวอย่างตามรูปด้านล่างนะ เมื่อเลือกพื้นที่ได้แล้วก็ให้สังเกตุ โปรแกรมจะขึ้นเส้นประรอบๆ พื้นที่ที่เราเลือก พร้อมทั้งเริ่ม Record หน้าจอของเราละ

    Step 3 : เราก็เริ่มต้นทำงานบนหน้าจอของเราได้เลย โปรแกรมจะบันทึกวีดีโอเก็บไว้ เมื่อเราดำเนินการเสร็จสิ้นแล้ว ก็ให้คลิกปุ่ม “Stop” เพื่อหยุดการบันทึกได้เลย โปรแกรมก็จะแสดงให้เราเห็นว่าบันทึกวีดีโอเสร็จแล้ว

    จากรูป สามารถคลิกบนลิงค์เพื่อ Play วีดีโอของเราได้เลย หรือหากไม่คลิกจากลิงค์ ก็สามารถเข้าไปดูใน Folder ตาม path ที่เราได้ตั้งค่าเอาไว้ก็ได้นะ ได้ทั้ง 2 วิธีนั่นแหละ หรือใครไม่รู้ว่าไปตั้ง path ได้จากไหน ก็ทำตามวิธีนี้ดูนะ

    คลิกเลือก Application settings …… –> เลือก path –> คลิก Browse เพื่อเลือกที่เก็บไฟล์ได้เลย

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

  • ติดตั้ง FOG Project แบบใช้ Proxy DHCP

    บทความนี้เป็นตอนต่อจาก “ติดตั้ง FOG Project บน Ubuntu 18.04 Server” หลังจาก แตกไฟล์ มาเสร็จแล้ว มาดูขั้นตอนติดตั้ง

    sudo  ./installfog.sh

    เลือก 2

    กด Y และ Enter

    กด N และ Enter

    ตัวอย่าง จะติดตั้ง fog server ให้ใช้ IP 10.0.100.254 และ ตอบ N ทุกคำถาม Would you like … ตรงนี้ ซึ่งจะเกี่ยวข้องกับ DHCP server ว่า จะติดตั้งลงใน fog server มั้ย

    ตรวจสอบ พร้อมแล้ว ก็กด Y และ Enter

    สำหรับ Ubuntu 18.04 นั้น ถ้าเราติดตั้ง MySQL ไม่จำเป็นต้องตั้ง password เราก็ใช้คำสั่ง mysql เพื่อเข้าไปทำงานได้ ก็ต่อเมื่อ เราเป็น user ที่เป็น sudo จึงไม่ต้องตั้ง password แต่จะตั้งก็ได้ ไม่ผิด

    ใกล้เสร็จแล้ว ให้ไปที่หน้าเว็บ http://fog_server_ip/fog/management เพื่อตั้งค่า database

    แล้วกลับมาทำการตั้งค่าต่อ กด Enter

    สังเกต มีคำว่า Skipped ที่บรรทัด DHCP Server

    เสร็จกระบวนการติดตั้ง fog server

    ถัดไปจะติดตั้ง dnsmasq เพื่อเป็น Proxy DHCP ไปติดต่อกับ DHCP server ของตึก

    ทำตาม link นี้ https://wiki.fogproject.org/wiki/index.php?title=ProxyDHCP_with_dnsmasq

    พิมพ์คำสั่งเพื่อติดตั้ง ดังนี้

    sudo  apt  install  dnsmasq  -y

    เสร็จแล้ว ไปหาเครื่องที่สามารถใช้งานแบบ กราฟิก GUI เพื่อ copy ข้อความหลาย ๆ บรรทัดได้ เช่น เปิด bash ใน Windows แล้วใช้คำสั่ง ssh เข้าไปยัง fog server IP ดังนี้

    ssh  mama@10.0.100.254

    จะทำให้สะดวกกว่า คีย์เอง ทีละบรรทัด

    สร้างไฟล์ชื่อ fog.conf ไว้ภายในไดเรกทอรี /etc/dnsmasq.d ใส่ข้อความ ดังนี้

    ข้อความที่จะให้ copy ไป paste คือ

    # Don't function as a DNS server:
    port=0
    
    # Log lots of extra information about DHCP transactions.
    log-dhcp
    
    # Set the root directory for files available via FTP.
    tftp-root=/tftpboot
    
    # The boot filename, Server name, Server Ip Address
    dhcp-boot=undionly.kpxe,,10.0.100.254
    
    # Disable re-use of the DHCP servername and filename fields as extra
    # option space. That's to avoid confusing some old or broken DHCP clients.
    dhcp-no-override
    
    # inspect the vendor class string and match the text to set the tag
    dhcp-vendorclass=BIOS,PXEClient:Arch:00000
    dhcp-vendorclass=UEFI32,PXEClient:Arch:00006
    dhcp-vendorclass=UEFI,PXEClient:Arch:00007
    dhcp-vendorclass=UEFI64,PXEClient:Arch:00009
    
    # Set the boot file name based on the matching tag from the vendor class (above)
    dhcp-boot=net:UEFI32,i386-efi/ipxe.efi,,10.0.100.254
    dhcp-boot=net:UEFI,ipxe.efi,,10.0.100.254
    dhcp-boot=net:UEFI64,ipxe.efi,,10.0.100.254
    
    # PXE menu.  The first part is the text displayed to the user.  The second is the timeout, in seconds.
    pxe-prompt="Booting FOG Client", 1
    
    # The known types are x86PC, PC98, IA64_EFI, Alpha, Arc_x86,
    # Intel_Lean_Client, IA32_EFI, BC_EFI, Xscale_EFI and X86-64_EFI
    # This option is first and will be the default if there is no input from the user.
    pxe-service=X86PC, "Boot to FOG", undionly.kpxe
    pxe-service=X86-64_EFI, "Boot to FOG UEFI", ipxe.efi
    pxe-service=BC_EFI, "Boot to FOG UEFI PXE-BC", ipxe.efi
    
    dhcp-range=10.0.100.254,proxy
    

    ให้แทนที่ 10.0.100.254 ด้วย fog server IP ของคุณ แล้ว save ออกมาจากการแก้ไขไฟล์ แล้ว ตรวจสอบด้วยการรัน service ดูว่า ทำงานได้ ไม่ error

    รันคำสั่งดังนี้

    sudo  systemctl  restart  dnsmasq.service

    ตรวจสอบ status

    sudo  systemctl  status  dnsmasq.service

    กด q ออก

    ถ้ามี error ให้ตรวจสอบว่า ในไดเรกทอรี /etc/dnsmasq.d มีไฟล์คอนฟิกสักไฟล์ที่มีคำว่า bind-interfaces อยู่ข้างในมั้ย ถ้าไม่มีก็สร้างไฟล์ชื่อ etc.conf และมี 1 บรรทัดใส่คำว่า bind-interfaces และ save แล้ว รีสตาร์ท dnsmasq ก็น่าจะใช้งานได้

    แล้วตั้งค่าให้ dnsmasq ทำงานเมื่อเปิดเครื่อง

    รันคำสั่ง

    sudo  systemctl  enable  dnsmasq.service

    ออกจาก ssh และ reboot fog server เพื่อดูว่า service dnsmasq เรียบร้อย

    เมื่อ boot Windows 7 จะเห็นว่า มันจะไปขอ DHCP IP จาก 10.0.100.1 ในที่นี้คือ DHCP server ของตึก (router) และมันจะรู้ด้วยว่า fog server คือ 10.0.100.254

    ตัวอย่าง ใน LAN configuration ก็จะมีข้อมูลบอกว่า DHCP Server ที่แจก IP มาให้ Windows คือ 10.0.100.1

    เมื่อดูใน /var/log/syslog ของเครื่อง fog server จะเห็น service dnsmasq ทำงาน

    ต่อไปเป็นการใช้งาน เพื่อทดสอบว่า กระบวนการติดตั้ง fog server ใช้งานแบบ proxy DHCP ทำงานได้จริง

    เลือกรายการ Quick Registration and Inventory เพื่อลงทะเบียนแบบ manual ทีละเครื่อง

    แล้วกลับมาอีกรอบ คราวนี้ก็เลือก Boot from hard disk เมื่อเข้า Windows ได้แล้วลองไปตรวจสอบ IP

    หน้าต่าง login ก็ใส่ค่า default username คือ fog และ password คือ password

    ต่อไปมาดูในหน้าเว็บ ของ fog จะเห็นว่า มีเครื่องที่เรากด ลงทะเบียน เข้ามาแล้ว

    ต่อไป เราจะไปหน้าเว็บเพจ images เพื่อสร้างชื่อ image ว่า windows7 ก่อนที่จะ cloning ได้

    กดเลือก Create New Image

    ตั้งค่าเลือก Operating System เป็นชนิด Windows 7 – (5)

    และใช้ค่า default แล้วกด Add (วันหลังค่อยลองเปลี่ยนใช้แบบอื่น ๆ)

    เราต้องผูก image เข้ากับ host ให้คลิกเข้าไปที่ชื่อ host ในตัวอย่างคือ 080027888888

    ผูก host นี้กับ Image ชื่อ windows7 ที่เราสร้างไว้

    ส่วนที่เหลือ เป็นค่า default แล้วกด Update

    กลับมาที่หน้าเว็บเพจ Host จะเห็นว่ามี Assigned Image เข้ามาแล้ว ให้คลิก Capture

    หน้านี้จะเด้งขึ้นมา เป็นค่า default ทั้งหมด แล้วกด Task

    จะได้หน้าต่างบอกว่า กำหนด Task แล้ว

    ไปที่เมนู Tasks จะเห็นรายการว่า กำลังรอให้เรา cloning ต้นฉบับ

    เราก็ไปเปิดเครื่อง Windows ต้นฉบับที่จะเก็บ

    มันก็จะขึ้นมาเรื่อย ๆ แบบนี้ จนได้หน้าต่างว่า กำลังใช้ Partclone ในการ cloning

    ก็รอจนเสร็จ

    ขอให้สนุก

  • ติดตั้ง FOG Project แบบมี DHCP Server ด้วย

    บทความนี้เป็นตอนต่อจาก “ติดตั้ง FOG Project บน Ubuntu 18.04 Server” หลังจาก แตกไฟล์ มาเสร็จแล้ว มาดูขั้นตอนติดตั้ง

    sudo  ./installfog.sh

    เลือก 2

    กด Y และ Enter

    กด N และ Enter

    ตัวอย่าง จะติดตั้ง fog server ให้ใช้ IP 10.0.100.208 และ ตรงนี้ จะเกี่ยวข้องกับ DHCP server ว่า จะติดตั้งลงใน fog server มั้ย ในตัวอย่าง คือ router address ที่ใช้คือ 10.0.100.1 และเป็น DNS server ด้วย

    ตรงนี้ สำหรับ FOG รุ่น 1.5.6 ขึ้นไป จะมีเพิ่มมาให้ตั้งชื่อ hostname ถ้าไม่ต้องการตั้งก็กด Enter

    ตรวจสอบ พร้อมแล้ว ก็กด Y และ Enter

    สำหรับ Ubuntu 18.04 นั้น ถ้าเราติดตั้ง MySQL ไม่จำเป็นต้องตั้ง password เราก็ใช้คำสั่ง mysql เพื่อเข้าไปทำงานได้ ก็ต่อเมื่อ เราเป็น user ที่เป็น sudo จึงไม่ต้องตั้ง password แต่จะตั้งก็ได้ ไม่ผิด

    ใกล้เสร็จแล้ว ให้ไปที่หน้าเว็บ http://fog_server_ip/fog/management เพื่อตั้งค่า database

    แล้วกลับมาทำการตั้งค่าต่อ กด Enter

    สังเกต มีคำว่า OK ที่บรรทัด DHCP Server

    เสร็จกระบวนการติดตั้ง fog server

    ทดสอบเปิดเครื่อง Windows 7 ดูว่า ได้ DHCP IP จาก fog server ในที่นี้คือ 10.0.100.208

    ต่อไปเป็นการใช้งาน เพื่อทดสอบว่า กระบวนการติดตั้ง fog server ใช้งานแบบมี DHCP Server ด้วยทำงานได้จริง

    เลือกรายการ Quick Registration and Inventory เพื่อลงทะเบียนแบบ manual ทีละเครื่อง

    แล้วกลับมาอีกรอบ คราวนี้ก็เลือก Boot from hard disk เมื่อเข้า Windows ได้แล้วลองไปตรวจสอบ IP

    หน้าต่าง login ก็ใส่ค่า default username คือ fog และ password คือ password

    ต่อไปมาดูในหน้าเว็บ ของ fog จะเห็นว่า มีเครื่องที่เรากด ลงทะเบียน เข้ามาแล้ว

    ต่อไป เราจะไปหน้าเว็บเพจ images เพื่อสร้าง image ตั้งชื่อว่า windows7 ก่อนที่จะ cloning ได้

    กดเลือก Create New Image

    ตั้งค่าเลือก Operating System เป็นชนิด Windows 7 – (5)

    และใช้ค่า default แล้วกด Add (วันหลังค่อยลองเปลี่ยนใช้แบบอื่น ๆ)

    เราต้องผูก image เข้ากับ host ให้คลิกเข้าไปที่ชื่อ host ในตัวอย่างคือ 080027888888

    ผูก host นี้กับ Image ชื่อ windows7 ที่เราสร้างไว้

    ส่วนที่เหลือ เป็นค่า default แล้วกด Update

    กลับมาที่หน้าเว็บเพจ Host เลือก List All Hosts จะเห็นว่ามี Assigned Image เข้ามาแล้ว ให้คลิก Capture

    หน้านี้จะเด้งขึ้นมา เป็นค่า default ทั้งหมด แล้วกด Task

    จะได้หน้าต่างบอกว่า กำหนด Task แล้ว

    ไปที่เมนู Tasks จะเห็นรายการว่า กำลังรอให้เรา cloning ต้นฉบับ

    เราก็ไปเปิดเครื่อง Windows ต้นฉบับที่จะเก็บ

    มันก็จะขึ้นมาเรื่อย ๆ แบบนี้ จนได้หน้าต่างว่า กำลังใช้ Partclone ในการ cloning

    ก็รอจนเสร็จ

    คำแนะนำเพิ่มเติมเกี่ยวกับการปรับแต่งไฟล์ /etc/dhcp/dhcpd.conf ที่สร้างขึ้นในขณะติดตั้ง FOG Project
    เมื่อใช้คำสั่งดู log ดังนี้

    tail  -f  /var/log/syslog

    เพื่อไม่ให้เกิด log บรรทัดที่มีข้อความว่า “not authoritative for subnet“ ก็ให้แก้ไขไฟล์นี้โดยเพิ่มบรรทัดว่า

    authoritative; 

    ไว้ภายใน subnet {
    }

    คำสั่งใช้ editor ชื่อ vi หรือ nano แล้วแต่ถนัด

    sudo  vi( or nano)  /etc/dhcp/dhcpd.conf

    แล้ว restart service

    sudo systemctl restart isc-dhcp-server.service

    ขอให้สนุก