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}

จบปิ๊ง !!

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 รอบนึง จบปิ๊งงง ^__^

Automatic Update All Docker Images

สำหรับอัพเดต Docker Images ทั้งหมดที่ได้ติดตั้งไปแล้ว ใช้คำสั่งด้านล่างนี้

docker images | grep -v REPOSITORY | awk '{printf $1; printf ":"; print $2}' | xargs -L1 docker pull

โดยเมื่อเราได้อัพเดตไปแล้วไฟล์ตัวใหม่จะไม่ได้ทับ (Overwrite) ตัวเดิม เราต้องตามไปลบ (Cleanup) ตัวเดิมอีกรอบ โดยใช้คำสั่ง

docker images | grep "<none>" | awk '{print $3}' | xargs -L1 docker rmi


จบปิ๊งง  ^_^

My GNOME Shell Extensions – Part 1

สำหรับ Linux User ที่เลือก GNOME (อ่านว่า กะโนม) เป็น desktop environment ซึ่งปัจจุบัน (ตุลาคม 2561) เวอร์ชั่นล่าสุดคือ GNOME 3.30 กรณีที่อยากลองใช้ ณ ตอนนี้ก็มี Ubuntu 18.10 Cosmic Cuttlefish ซึ่งจะออกใกล้ ๆ นี้มาให้ทดลองใช้งาน

สำหรับดิสโทรอื่น หลัก ๆ ก็ยังใช้เวอร์ชั่น 3.28 กันอยู่ สามารถตรวจสอบเวอร์ชั่นในเครื่องตัวเองได้จากคำสั่งนี้ (เครื่องตัวเองตอนนี้ใช้เวอร์ชั่น GNOME Shell 3.28.3)

gnome-shell --version

ใครที่อยากลอง GNOME Shell 3.30 ก็ใช้กำลังภายในกันนิดนึงแต่ส่วนตัวก็ยังแนะนำให้ใช้เวอร์ชั่นเดิม ๆ นั่นแหล่ะปลอดภัยสุดแล้ว

GNOME Shell เดิม ๆ นั้นก็ไม่ถึงกับง่อยหรอก แต่ถ้าอยากให้ชีวิตง่ายขึ้น GNOME Shell Extensions ช่วยได้ ซึ่งก็มีให้เลือกใช้งานกันตามแต่ละปัญหาของแต่ละคน (ส่วนใหญ่ปัญหาการใช้งานก็ไม่ค่อยต่างกันมากนัก  :P)

ส่วนตัวแล้วเลือกใช้ Extensions อยู่ไม่กี่ตัว มาดูกันว่ามีตัวไหนกันบ้าง (แนะนำให้ติดตั้ง sudo apt install gnome-tweak-tool ด้วย) เรียงลำดับตามตัวอักษรหล่ะกันครับ

  1. Applications Menu by fmuellner
    Add a category-based menu
    สำหรับเรียกเมนูโดยจัดกลุ่มแอพปลิชั่นให้ คล้ายปุ่ม Start ในฝั่ง Windows นั่นแหล่ะ
  2. Blyr by yozoon
    Apply a Blur Effect to GNOME Shell UI elements

    ช่วยเพิ่ม Effect  Blur ใน Background เมื่อเรียกหน้าจอ Activities Overview Screen ขึ้นมา มันดู Sexy ขึ้นนะ
  3. Caffeine by eon
    Disable the screensaver and auto suspend

    ปิดการทำงานของ Screensaver
  4. Clipboard Indicator by Tudmotu
    Clipboard Manager extension for Gnome-Shell – Adds a clipboard indicator to the top panel, and caches clipboard history.

    เพิ่มความสามารถของ Clipboard เราสามารถกำหนดประวัติการใช้งาน Clipboard ได้ (Default อยู่ที่ 30 รายการ)
  5. Coverflow Alt-Tab by p91paul
    Replacement of Alt-Tab, iterates through windows in a cover-flow manner.

    โดยปกติเมื่อเรากดคีย์ Alt-Tab/Alt-Shift-Tab จะเป็นการเลื่อน (Switch) ไปยังแอพปลิเคชั่นที่เปิดอยู่ Extensions นี้ช่วยปรับให้ลักษณะการเลื่อนเป็นแบบ Coverflow ตัวอย่าง
  6. cpufreq by konkor
    Gnome CPU Frequency Monitor and Governor Manager.

    สามารถกำหนด Profile ให้ CPU ทำงานได้ โดยปกติ Linux เองก็ฉลาดมากพอที่จะกำหนดความเร็วของ CPU ตามลักษณะการใช้งาน แต่บางครั้งเราก็อยากรีดความเร็วณ ตอนนั้น หรือลดความเร็วลงเพื่อประหยัดพลังงาน Extension ตัวนี้ช่วยได้
  7. Dash to Dock by michele_g
    A dock for the Gnome Shell. This extension moves the dash out of the overview transforming it in a dock for an easier launching of applications and a faster switching between windows and desktops. Side and bottom placement options are available.

    Dock ที่ติดมากับ Ubuntu ถึงแม้จะ Fork Dash to Dock มาแต่ก็ปรับแต่ง/ทำอะไรไม่ได้มาก ถ้าพฤติกรรมการใช้งานเรา แค่นั้นไม่พอก็ติดตั้ง Dash to Dock ช่วย (Dock จะเก่งขึ้นมากถึงมากที่สุด)
  8. Dash to Panel by jderose9
    An icon taskbar for the Gnome Shell. This extension moves the dash into the gnome main panel so that the application launchers and system tray are combined into a single panel, similar to that found in KDE Plasma and Windows 7+. A separate dock is no longer needed for easy access to running and favorited applications.
    อยากได้ Dock ฟิล Windows ก็ใช้ตัวนี้ (เราก็ใช้สลับกับ Dash to Dock นะ)
  9. Disconnect Wifi by kgshank
    Adds a Disconnect option for Wifi in status menu, when a network is connected. Shows a Reconnect option, after network is disconnected.

    เพิ่มเมนู Disconnect หลังจากที่เชื่อมต่อ Wifi แล้ว เป็น Extension เหมือนไม่มีอะไรแต่มีประโยชน์มาก
  10. EasyScreenCast
    This extension simplifies the use of the video recording function integrated in gnome shell, allows quickly to change the various settings of the desktop recording.

    Screen recording ติดมากับ GNOME Shell แต่การใช้งานก็ไม่ได้ง่ายนัก สำหรับใครที่อยากใช้และไม่ต้องการ Extension ตัวนี้ วิธีใช้ พอไปอ่านแล้วคุณจะกลับมาติดตั้ง Extensions ตัวนี้ 😛
  11. Freon by UshakovVasilii
    Shows CPU temperature, disk temperature, video card temperature (NVIDIA/Catalyst/Bumblebee&NVIDIA), voltage and fan RPM (forked from xtranophilist/gnome-shell-extension-sensors)

    แสดงอุณหภูมิทั้ง CPU และ Video Card รองรับทั้งทั้งฝั่งเขียวและแดงนะครับ
  12. Frippery Move Clock by rmyorston
    Move clock to left of status menu button

    ย้ายตำแหน่งของนาฬิกาเฉย ๆ
  13. gTile by scherepanov
    Tile windows on a grid.

    ช่วยให้การจัดหน้าต่างที่กำลังเปิดอยู่ทั้งหมดดูง่ายและเป็นระเบียบ ไม่ต้องลากเองนี่จัดตำแหน่งให้เลย
  14. Impatience by gfxmonk
    Speed up the gnome-shell animation speed
    รู้สึกว่าเครื่องมีการตอบสนองมันช้าใช่ไหม เครื่องช้าไหม แต่เปล่าเลย Animation ล้วน ๆ งั้นเรามาเร่ง Speed Animation กัน คือถ้าไม่ชอบก็สามารถปิดได้ ใช้ Gnome Tweak Tool > Appearance แต่ Animation ก็อยากใช้แต่เร่งความเร็วนิดนึง ก็ติดตั้งเลยครับ

จบ Part 1 นะครับ ^_^ (เหลืออีกประมาณ 10 กว่าตัว)

Set video wallpaper for your Ubuntu 18.04 Bionic Beaver

การมาของ Live Wallpaper ทำให้ความจำเจเราหายไปบ้าง แต่ก็นั่นหล่ะ เราอยากได้แบบนี้บ้างใน Linux ที่ใช้งานอยู่ (ปัจจุบันใช้ Ubuntu 18.04 Bionic Beaver) พบว่ามีทูลหลายตัวที่ช่วยทำเรื่องเกี่ยวกับ Wallpaper ไม่ว่าจะเป็น Package หรือ Extension สำหรับ Gnome Shell

หรือแม้แต่ komorebi เอง

และก็มี Tool อีกตัวหนึ่งซึ่งสามารถทำได้เหมือนกันคือ VLC Media Player โดยปกติเราใช้ VLC เป็น Media Player หลักอยู่แล้วเลยไม่ต้องติดตั้งอะไรเพิ่มเติมแต่ถ้ายังไม่ได้ติดตั้งก็ติดตั้งได้เลยตามนี้

sudo snap install vlc
หรือ
sudo apt install vlc

ต่อมาก็ใช้ VLC แบบ Command Line กำหนดให้เล่นวิดีโอใน Mode Wallpaper อ่านรายละเอียดคำสั่ง/Options ได้จากที่นี่ รูปแบบคำสั่งก็ใช้แค่นี้แหล่ะ

cvlc --video-wallpaper --no-audio --loop --no-video-title-show "Video File Path"

หรือเปิด VLC ในโหมด GUI ปกติแล้วกำหนดให้เป็น Wallpaper โดยการกด Hot Keys ‘w’


ผลลัพธ์ที่ได้ก็ตามนี้

ป.ล.