in Developer Note

MySQL generates a sequence of numeric values

หลังจากได้อ่านและลอง Sequence ใน MariaDB 10.3 แล้ว มันช่างง่ายเหลือเกินให้ตายเถอะโรบิน (แนะนำให้ไปอ่านยังไงก็ได้ใช้แน่ ๆ ) แต่บล๊อกนี้เราจะไม่ได้เขียนเรื่องนี้ 5555 เราจะใช้วิธีที่เรียกว่า CTE (Common Table Expression) สำหรับการสร้างชุดข้อมูล CTE ซึ่งเริ่มใช้ได้ใน MySQL 8.0, MariaDB 10.2 เป็นต้นมาซึ่งเอาจริง ๆ ก็ง่ายพอ ๆ กันแหล่ะ เราเคยเขียนในบทความเก่า ๆ ลองไปหาอ่านกันได้ หรือของ อ.ประเสริฐ

ลักษณของ CTE ใช้การเรียกโดยวิธี Recursive รูปแบบใน MySQL จะเป็นแบบนี้

with_clause:
    WITH [RECURSIVE]
        cte_name [(col_name [, col_name] ...)] AS (subquery)
        [, cte_name [(col_name [, col_name] ...)] AS (subquery)] ...

ลักษณะของคำสั่งนี้คือ

สมมุติเรามีโจทย์ตามข้างต้น คือการสร้างตารางชั่วคราวที่เก็บ sequence number จาก 1 ถึง 100 เราก็เขียนได้ดังนี้

WITH RECURSIVE numbers AS (
    SELECT 1 AS value
    UNION ALL
    SELECT value + 1 AS value
    FROM numbers
    WHERE numbers.value < 100
)
SELECT *
FROM numbers;

ผลลัพธ์ก็ตามนี้ ดูได้ใน dbfiddle

สั้น ๆ และง่ายใช่ไหม อ่านจบตามไปอ่าน  sequence ต่อ แนะนำเลย
หลับฝันดีมีแฮง ^__^

(My) Wishlist WordPress Starter Themes

ถ้าอยากสร้าง WordPress Theme เองควรเริ่มจากอะไรดี ? คำถามก็สั้นๆ รวมถึงเวลาด้วย เพราะงั้นก็ควรเริ่มที่ Starter Theme นั่นแหล่ะง่ายและเร็วสุดแล้ว แล้วจะเลือกตัวไหนดีหล่ะ เรามีตัวเลือกมาให้คร่าว ๆ ซึ่งบางธีมเองก็เวอร์ชั่นเก่าพอสมควรแต่โครงสร้างมันง่ายสำหรับการแก้ไขและทำเพิ่ม (เรียงตามตัวอักษรหล่ะกัน)

ป.ล. บล๊อกสั้น ๆ นะ พยายามบังคับตัวเองให้บล๊อกอยู่

  1. Aamla
  2. Air-light
  3. Beans
  4. Bootstrap-four
  5. FoundationPress
  6. Generic
  7. html5blank
  8. JointsWP
  9. Nebula
  10. Oceanwp
  11. _s
  12. Quark
  13. Silencio
  14. _tk
  15. WP-bootstrap-starter
  16. WP-Rootstrap
  17. Understrap
  18. twentynineteen
    twentyseventeen
    twentysixteen

 

Unfri(end)

เก็บรักที่เพิ่งพ้นไป
เก็บใจที่เพิ่งพ้นมา
บอกลาแล้ววันเก่า
เหลือแค่เพียงน้ำตา
กับแผลที่เธอให้มา

— ช่วงที่เศร้าที่สุดในเพลงกลับเป็น 24 วินาทีแรก

Create multiple directories at once mkdir

สั้น !!
ความน่ารักและมีประโยชน์ของ Bash ก็คือบางอย่างเราก็สามารถลดเวลาได้ด้วยการทำ Script สั้น ๆ เช่นกรณีนี้ ต้องการสร้าง Directory ตามโครงสร้างนี้

├── config
│   └── webui
├── data
│   ├── director
│   ├── storage
│   └── webui
├── mysql
│   ├── data
│   └── log

เราสามารถใช้คำสั่งสั้น ๆ ข้างล่าง เพื่อสร้างโฟลเดอร์

mkdir -p {data/{director,storage,webui},config/webui,mysql/{data,log}}

และกรณีอื่น ๆ อีก ไปลองกันได้ว่าผลลัพธ์จะได้ออกมายังไง

mkdir test{1..50}
mkdir -p test{1..50}/sub{1..50}
mkdir {a-z}12345 
mkdir {1,2,3}
mkdir test{01..10}
mkdir -p `date '+%y%m%d'`/{1,2,3} 
mkdir -p $USER/{1,2,3}

จบปิ๊ง !!

NewAdwaita-slim Tweak New Adwaita GTK Theme with slim version

GNOME ปล่อย Adwaita Theme (ในชื่อ NewAwaita ก็ของใหม่ ^__^) สำหรับ gnome-shell เวอร์ชั่นใหม่ ออกมาให้ลองทดสอบแล้ว  ธีมใหม่ก็ดูสะอาดมากกขึ้น มันก็โอเคขึ้นเยอะแต่ก็มีหลายอย่างที่ยังอยากได้เพิ่ม งั้นก็ทำเพิ่มเลยหล่ะกัน

ภาพจาก www.omgubuntu.co.uk

แต่เราชอบแบบ Slim&Compact มากกว่า ปรับเวอร์ชั่นแรกก็ปรับเพิ่ม

  • Compact
  • Pathbar ตัวใหม่
  • Widget บางตัว

โปรเจคอยู่ที่ Github
https://github.com/ManFridayy/NewAdwaita-slim

การติดตั้ง

  • Just unzip the file and place it in your themes directory i.e. ~/.themes/ or /usr/share/themes/
  • Install gnome-tweak-tool
    sudo apt install gnome-tweak-tool
  • Select the theme as ‘NewAdwaita-slim


Preview

มาลองรัน KDE neon บน Docker กัน

ก่อนอื่นสำหรับใครที่ไม่คุ้นกับ KDE

KDE หรือชื่อเต็ม K Desktop Environment เป็นสภาพแวดล้อมในการทำงานแบบเดสก์ท็อป (Desktop Environment) ที่เป็นซอฟต์แวร์เสรี พัฒนาบนทูลคิท Qt ของบริษัท Trolltech และทำงานได้บนระบบปฏิบัติการตระกูลยูนิกซ์เกือบทุกรุ่น เช่น ลินุกซ์, BSD, AIX และ Solaris รวมถึงมีรุ่นที่ใช้งานได้บน Mac OS X และไมโครซอฟท์วินโดวส์

ปัจจุบัน (22 มกราคม 2561) นี่ก็พัฒนา Plasma รุ่นเสถียรถึงเวอร์ชั่น 5.12.7 (LTS) ละ  KDE เป็น Desktop Environment เพราะฉะนั้น เราก็สามารถติดตั้งบน Distributions ต่าง ๆ ได้ เช่น CentOS Debian Ubuntu หรือแม้กระทั่ง Windows เองก็เหอะ

แล้ว KDE neon หล่ะมายังไง

KDE neon is a set of software repositories for Ubuntu long-term support (LTS) releases with latest 64-bit version of KDE desktop and applications. The KDE neon Linux distribution is focused on the development of KDE

ด้วยความที่ neon รันอยู่บน Ubuntu เราก็สามารถโหลดไฟล์ ISO มารัน/ติดตั้งใน VMWare หรือ VirtualBox ได้เลย

รันบน VertualBox Version 6.0.2

 

หน้าสำหรับดาวน์โหลด Live Images

เลื่อนลงมานิดนึงก็จะมีเวอร์ชั่นสำหรับ Docker ให้ใช้งานด้วย จุดประสงค์ของคนที่ใช้งานบน Docker หลัก ๆ ก็น่าจะมาจาก

  • อยากลอง
  • ลองเสร็จก็พอ อยากลบทิ้งแบบคลีน ๆ
  • VMWare/Virtual Box  หน่วงรู้สึกได้
  • Docker มันก็ทำได้นี่นา งั้นก็ลองกันเลย

เริ่มด้วยกันติดตั้ง Docker (สำหรับใครที่ยังไม่ได้ติดตั้ง ปกติแล้วเรามักจะอ้างอิงจาก เอกสารทางการของทาง Docker เอง นั่นชัวร์ที่สุดละ)

sudo apt-get install docker-ce xserver-xephyr

** xserver-xephyr ต้องติดตั้งเพิ่มด้วยนะ

เสร็จก็ทำการ pull image ล่าสุดของ KDE neon

sudo docker pull kdeneon/plasma:dev-unstable

ขนาดก็ประมาณ 1 GB สายเปรี้ยวก็ใช้เวอร์ชั่น dev-unstable ไป ^__^
ถึงขั้นตอนการรันก็ใช้คำสั่งตามนี้  (เป็นค่าเริ่มต้น) เพื่อให้ Xephyr ทำหน้าที่เป็น X Server Window

Xephyr -screen 1024x768 :1 &
docker run -v /tmp/.X11-unix:/tmp/.X11-unix kdeneon/plasma:dev-unstable

จบปิ๊ง ^__^

เพิ่มเติม

ติดตั้ง Traccar แพลตฟอร์มสำหรับ ระบบ GPS Tracking บน Digital Ocean

Traccar is a free and open source modern GPS tracking system

Traccar เป็น GPS Tracking Platform หมายความว่า มีระบบและบริการที่สนับสนุนเช่น Server Client และระบบจัดการ (Manager) เสร็จสรรพ

โดยตัว Server เองก็รองรับทั้ง Windows Linux และ Arm ตอนนี้เป็นเวอร์ชั่น 4.2 ส่วน Client ก็มีทั้ง Android iOS ส่วนอุปกรณ์ GPS อื่นที่รองรับก็เข้าไปดูที่นี่เลย

ส่วน GPS Tracking คือการระบุตำแหน่งของวัตถุผ่านระบบระบุตำแหน่งบนพื้นโลก (Global Positioning System: GPS) ซึ่งใช้เพื่อติดตามและระบุตำแหน่งของวัตถุนั้นๆจากระยะไกล โดยเทคโนโลยี GPS tracking นี้สามารระบุได้ครอบคลุมถึงพิกัดภูมิศาสตร์ ละติจูด, ลองจิจูด, ความเร็วบนภาคพื้น ทิศทางและเส้นทางการเคลื่อนที่ของวัตถุนั้นๆ ที่เราติดตามอยู่ได้

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

ซึ่ง Traccar เองก็มีทั้งเสียเงินและฟรีราคาให้บริการก็ตามนี้แต่ที่เราสนใจคือตัวที่เป็น Opensource

เริ่มกันด้วยการติดตั้งตัว Server โดยความเป็นจริงละ คนที่จะใช้งานจำเป็นต้องมี Server ที่ให้บริการจริง ๆ ในระบบอินเตอร์เนตเพื่อให้อุปกรณ์ GPS ติดต่อได้ อาจเป็นเครื่องจริง ๆ วางไว้ที่ IDC สักที่หรือถ้าไม่ลงทุนเครื่อง Server จริง ๆ จะเป็น VPS (Virtual Private Server) ก็ได้ ในท้องตลาดก็มีทั้งของไทยและต่างประเทศที่ดัง ๆ หน่อยก็เป็น Amazon Digital Ocean ในบล๊อกนี้เราใช้ DigitalOcean ตัวเล็กสุด 1 CPU SSD 25GB ค่าบริการ 5$/month สร้างตัว Droplet ขึ้นมา รายละเอียดเรื่อง VPS อ่านได้ที่นี่ครบละสำหรับคนเริ่มต้น ส่วนใครจะสมัครตอนนี้ไปนี่เลย

https://m.do.co/c/2f653359b82c
**ตอนนี้สมัครตาม Referral ก็จะได้เครดิตไว้ใช้งาน 100$

หลังจากที่สร้าง Droplet เสร็จแล้ว (ในที่นี้ใช้ Ubuntu 18.10) ก็ติดตั้ง Docker กันต่อเลย (Traccar มี Docker Image ให้ด้วย ^__^)

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

แล้วก็เพิ่ม Docker repository เข้าไป (ตอนนี้ Docker สำหรับ Ubuntu 18.10 ยังไม่มีรุ่น Stable ออกมานะ ต้องใช้ รุ่น test ไปพลาง ๆ )

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) test"

เสร็จแล้วก็ทำการ Update และติดตั้ง Docker ต่อได้เลย

sudo apt-get update
sudo apt-get install -y docker-ce

ถ้าไม่มีอะไรผิดพลาดตัว Docker ต้องทำงานละ

sudo systemctl status docker

ที่นี้ก็เริ่มติดตั้ง Traccar Server กัน ให้ทำการสร้าง Directory ขึ้นมา 2 Directory คือ

  • logs สำหรับเก็บล็อกใช้งาน
  • conf สำหรับเก็บไฟล์ Config
mkdir -p {conf,logs}

ต่อมาก็สร้างไฟล์ Config ในที่นี้ใช้ไฟล์ Default จาก Traccar เลย

docker run \
--rm \
--entrypoint cat \
traccar/traccar \
/opt/traccar/conf/traccar.xml > conf/traccar.xml

โดยค่ามาตรฐานของ Traccar จะใช้ฐานข้อมูลของ hbase ถ้าเราอยากเปลี่ยนเป็น MySQL หรือตัวอื่น ก็แก้ไขตามรายละเอียดนี้  ไฟล์ Config จะหน้าตาประมาณนี้

<?xml version='1.0' encoding='UTF-8'?>

<!DOCTYPE properties SYSTEM 'http://java.sun.com/dtd/properties.dtd'>

<properties>

    <entry key='config.default'>./conf/default.xml</entry>

    <!--

    This is the main configuration file. All your configuration parameters should be placed in this file.

    Default configuration parameters are located in the "default.xml" file. You should not modify it to avoid issues
    with upgrading to a new version. Parameters in the main config file override values in the default file. Do not
    remove "config.default" parameter from this file unless you know what you are doing.

    For list of available parameters see following page: https://www.traccar.org/configuration-file/

    -->

    <entry key='database.driver'>org.h2.Driver</entry>
    <entry key='database.url'>jdbc:h2:./data/database</entry>
    <entry key='database.user'>sa</entry>
    <entry key='database.password'></entry>

</properties>

เสร็จก็เริ่ม Run Server

docker run \
-d --restart always \
--name traccar \
--hostname traccar \
-p 8082:8082 \
-p 5000-5150:5000-5150 \
-p 5000-5150:5000-5150/udp \
-v /root/logs:/opt/traccar/logs:rw \
-v /root/conf/traccar.xml:/opt/traccar/conf/traccar.xml:ro \
traccar/traccar

จะได้หน้าตา Web Management สำหรับจัดการ Traccar โดยเข้าไปที่ http://<IP Address>:8082
** IP Address จะได้มาจาก VPS ที่เราสร้างขี้น

ต่อไปก็ทำการติดตั้ง Client ตอนนี้มีทั้งที่เป็น Android และ iOS รวมทั้งอุปกรณ์ GPS ตัวอื่น ๆ เช็คอุปกรณ์ที่รองรับได้ที่นี่

การใช้งานก็กำหนด IP Address ของเราตรง Server URL ตามฟอร์แมทตัวอย่างได้เลย

จบเรื่องการติดตั้งทั้ง Server และ Client ^_^

ป.ล.

Optimize คำสั่ง SQL สำหรับการสุ่มเวชระเบียนด้วยวิธี Systematic sampling

เดิมเคยเขียนคำสั่ง SQL ไว้นานละพอแก่ตัวขึ้นกลับไปดู มันก็สมควรเปลี่ยน (Optimize) แหล่ะ  เราจะไม่ลงรายละเอียดเรื่องของการตรวจสอบเวชระเบียนหล่ะกัน ขอข้ามไปพาร์ทสำหรับการเตรียมข้อมูล (กลุ่มตัวอย่าง) เพื่อให้ผู้เกี่ยวข้องทำงานต่อ
เริ่มด้วย Systematic Random Sampling (การสุ่มตัวอย่างแบบเป็นระบบ)

การสุ่มตัวอย่างแบบเป็นระบบ ( Systematic sampling) เป็นการสุ่มตัวอย่างโดยมีรายชื่อของทุกหน่วยประชากรมาเรียงเป็นระบบตามบัญชีเรียกชื่อ การสุ่มจะแบ่งประชากรออกเป็นช่วงๆที่เท่ากันอาจใช้ช่วงจากสัดส่วนของขนาดกลุ่มตัวอย่างและประชากร แล้วสุ่มประชากรหน่วยแรก ส่วนหน่วยต่อๆไปนับจากช่วงสัดส่วนที่คำนวณไว้

ขั้นตอนคร่าว ๆ ของการเตรียมข้อมูลสุ่มตัวอย่างแบบนี้คือ

  1. เลือกแฟ้มจาก OPD Card หรือ สมุดทะเบียนผู้มารับบริการ จำแนกตาม PID หรือ HN หรือวันที่ที่มารับบริการ
  2. หาช่วง Interval (I) ของการสุ่มโดยใช้สูตร
    I = จำนวนเวชระเบียนผู้ป่วยทั้งหมด ÷ จำนวนเวชระเบียนผู้ป่วยที่ต้องการ
  3. หาค่าตั้งต้นโดยการจับฉลาก (สุ่ม) เช่น จับฉลากได้หมายเลข 5 ให้เลือกเวชระเบียนแฟ้มแรกคือลำดับที่ 5 แล้วนับต่อไปทุกลำดับที่ I เช่นกรณีได้ค่า I = 3 ก็นับไปเลย 5, 8, 11, 14, 17, 20, ………จนได้ครบตามจำนวนที่ต้องการ

มาดู SQL ตัวที่พยายาม  Optimize กัน

 

Implements a scheduled task using Supercronic

Cron เป็นโปรแกรมสำหรับการทำ schedule tasks  ที่เราต้องการ พบเจอได้ใน Unix-like OS ตามไปอ่านรายละเอียดได้ที่นี่

Supercronic ก็จัดอยู่ในโปรแกรมข้างต้น คนทำให้นิยามว่า

Supercronic is a crontab-compatible job runner, designed specifically to run in containers.

เหตุผลที่ทำ Supercronic ขึ้นมาตามไปอ่านรายละเอียดได้ที่นี่ (ไม่ได้ขี้เกียจนะ 55+) ที่นี้เราลองมาอิมพลีเมนท์กันดู

เริ่มก็สร้าง Dockerfile ตามนี้

FROM alpine:3.8
LABEL author="mf"
LABEL version="latest"

ENV SUPERCRONIC_VERSION="v0.1.6" \
    SUPERCRONIC_PACKAGE=supercronic-linux-amd64 \
    SUPERCRONIC_SHA1SUM=c3b78d342e5413ad39092fd3cfc083a85f5e2b75

ENV SUPERCRONIC_URL=https://github.com/aptible/supercronic/releases/download/$SUPERCRONIC_VERSION/$SUPERCRONIC_PACKAGE

ENV TZ Asia/Bangkok

# install dependencies
RUN apk add --update --no-cache ca-certificates curl \
# install supercronic
    && curl -fsSLO "$SUPERCRONIC_URL" \
    && echo "${SUPERCRONIC_SHA1SUM}  ${SUPERCRONIC_PACKAGE}" | sha1sum -c - \
    && chmod +x "${SUPERCRONIC_PACKAGE}" \
    && mv "${SUPERCRONIC_PACKAGE}" "/bin/${SUPERCRONIC_PACKAGE}" \
    && ln -s "/bin/${SUPERCRONIC_PACKAGE}" /bin/supercronic \
# remove unwanted deps & cleanup
    && apk del --purge ca-certificates curl \
    && rm -rf /tmp/* /var/cache/apk/*

ADD crontab.sample /etc/crontab
RUN chmod 0644 /etc/crontab

ENTRYPOINT ["supercronic"]
CMD ["/etc/crontab"]

** ณ ตอนนี้ (29 พ.ย. 61) เวอร์ชั่นล่าสุดอยู่ที่ 0.1.6 ลองเช็คดูเรื่อย ๆ ที่ Github

ตามด้วยการสร้างไฟล์ Crontab สำหรับทำงาน ตัวอย่าง คือกำหนดให้แสดงผลคำว่า “hello from Supercronic” ทุก 1 นาที

# Run every minute
*/1 * * * * echo "hello from Supercronic"

เสร็จก็ทำการ Build และรัน container sudo docker build -t mf/supercronic . && sudo docker run -it mf/supercronicผลลัพธ์จะได้ตามนี้

จบปิ๊ง ^__^

Source

  • https://github.com/aptible/supercronic

Disable screen sleep on Raspberry PI

Raspberry PI เวลาเอามาใช้ทำตัว Dashboard หรือ Kiosk สักพักก็จะเข้าสู่ Sleep mode วิธีการแก้ไข ก็คือให้ทำการแก้ไขไฟล์ lightdm.conf

sudo nano /etc/lightdm/lightdm.conf

เพิ่มบรรทัดนี้เข้าไปในเซคชั่น [Seat:*]

xserver-command=X -s 0 dpms

เสร็จก็ Reboot รอบนึง จบปิ๊งงง ^__^