[บันทึกกันลืม] วิธีติดตั้ง mariadb package สำหรับ python บน Ubuntu

เรามักเข้าใจว่าแค่ใข้คำสั่ง แล้วจะก็จะเรียกใช้งานได้ แต่จริง ๆ แล้ว ไม่ใช่ เพราะจะต้องติดตั้ง package บน OS (ในที่นี้จะเป็น Ubuntu 20.04 – focal) แต่จะติดตั้ง package นี้ได้ จะต้องติดตั้ง MariaDB Connector/C Community Server package repository (CS) ซึ่งขั้นตอนต้นฉบับของ mariadb นั้น ก็ช่าง …. ซับซ้อน ลิงค์ไปมา https://mariadb.com/docs/server/connect/programming-languages/python/install/#Prerequisites_for_Source_Distributions https://mariadb.com/docs/server/connect/programming-languages/c/install/ ซึ่งจุดใหญ่ใจความคือ การติดตั้ง repository ให้ได้ แล้วก็จะติดตั้ง package ได้ เลยบันทึกกันลืมไว้ที่นี่ copy วางได้เลย เท่านี้แหล่ะ Update สำหรับ Ubuntu 22.04 ไม่รู้ว่าเกี่ยวกับการเป็น Ubuntu pro หรือไม่ แต่ libssl1.1 ไม่สามารถลงตรง ๆ ได้ ต้องทำดังนี้

Read More »

บันทึกลับ vim

Update: 2022-12-16 สารบัญ แสดง Line Number ลบบรรทัดแรกถึงบรรทัดสุดท้าย Before After Comment ทีละหลาย ๆ บรรทัด Ctrl+v Shift+i # Before Ctrl+v แล้วเลื่อนลูกศรลงมาเรื่อย ๆ Shift+i แล้วใส่ # แล้วกดปุ่ม Esc

Read More »

วิธีหา processing speed จาก log file ด้วย shell script

[บันทึกกันลืม] ห่างหายไปนาน กำลังทำระบบ ETL ซึ่งเป็นลักษณะของ Concurrent processing โจทย์คือ ต้องเอาข้อมูล 40 ล้าน items เข้าไปใน Apache Cassandra cluster ที่ประกอบด้วย 5 nodes เป้าหมายคือ 1000 items /second วิธีทำ concurrent ด้วย python เดี๋ยวมาเล่าให้ฟัง (รอ Link ตรงนี้) โดยย่อ การนำเข้าข้อมูล ทำด้วย Python script แล้วจะเขียน log file หน้าตาประมาณนี้ ให้สนใจแค่ว่าคอลัมน์แรก เป็น timestamp ประมาณว่า บรรทัดแรก เขียนข้อมูลเมื่อ 2022-11-30 07:34:13 แล้วบรรทัดล่าสุด หน้าตาประมาณนี้ ประมาณว่า บรรทัดสุดท้าย เขียนข้อมูลเมื่อ 2022-11-30 11:12:19 ทำไปแล้วกี่ items ใช้คำสั่ง wc -l นับบรรทัด เก็บในตัวแปร it ได้มาประมาณ 17,030,016 items แล้วเราจะหา จำนวนวินาที จากเริ่มต้น ถึงปัจจุบันอย่างไร ??? อันนี้คือ shell script เดี๋ยวอธิบายต่อไป เมื่อ run แล้ว ได้ผลลัพธ์ประมาณนี้ มาดูรายละเอียดกัน เป็นการสร้างตัวแปร ชื่อ t1 ซึ่ง $(…) เป็นการสั่งให้คำสั่ง ภายในวงเล็บ นั้นทำงาน คำสั่ง head -1 คือ เอาบรรทัดแรก เป็นการ แยกข้อความ ด้วย , และเอา ฟิลด์ (field) ที่ 1 ออกมา ผลรวมของคำสั่งนี้ คือ จะได้ timestamp เก็บในตัวแปร t1 เช่นเดียวกับเวลาของบรรทัดสุดท้าย เปลี่ยนจาก head เป็น tail ก็จะได้ ตัวแปร t2 คราวนี้ เราจะรู้ได้ไง ว่า ระหว่าง 2022-11-30 07:34:13 กับ 2022-11-30 11:12:19 ห่างกันกี่วินาที ? เราสามารถใช้คำสั่ง (เก็บในตัวแปร ts2) เพื่อได้วินาทีของวันเวลา คือค่า เช่นดัวกับ เวลาเริ่มต้น (เก็บในตัวแปร ts1) จะได้ค่า มาถึงตรงนี้ เราก็จะได้ตัวแปร ts1, ts2, it เราจะหาความเร็วก็ต้องใช้สูตร ใน shell script เราเขียนตรง ๆ อย่างนั้นไม่ได้ ต้องใช้ผ่านคำสั่ง expr (เก็บในตัวแปร speed) คราวนี้ เราต้องการรู้ด้วยว่า ใช้เวลาทำไปแล้ว กี่ชั่วโมง นาที วินาที คำสั่งนี้ ใช้ date -d แล้วใช้ @ ตามด้วยจำนวนวินาที ใช้คำสั่งนี้ หา จำนวนวินาที เก็บในตัวแปร ss แล้วใช้คำสั่งนี้ แปลงเป็น ชั่วโมง นาที วินาที เก็บในตัวแปร timelag สุดท้าย เอามารวมกันทั้งหมด แล้ว echo ออกไป ผลที่ได้คือ หวังว่าจะเป็นประโยชน์ครับ

Read More »

วิธี github clone มาเฉพาะบาง Folder

ถ้าต้องการเฉพาะบาง folder เช่นจากของ Google Research https://github.com/google-research/google-research แต่เราต้องการเพียงแค่ project ย่อยเดียว เช่น tft (Temporal Fusion Transformer) วิธีการมีดังนี้ 0. ต้องใช้ git version ใหม่ ๆ ในที่นี้ผมใช้ 2.32.0 1. จะมี sparse-checkout ซึ่งทำให้กำหนดได้ว่า ต้องการ folder ใด ให้ใช้คำสั่งแรกคือ 2. จากนั้น กำหนดว่า ต้องการเฉพาะ folder ชื่อ tft 3 . จากนั้นก็กำหนด remote repository ด้วยคำสั่ง 4 . แล้วก็ pull ด้วยคำสั่ง รอสักครู่ เราก็จะได้เฉพาะ folder ที่ต้องการ หวังว่าจะเป็นประโยชน์ครับ

Read More »

วิธีแก้ปัญหา docker container ไม่ start cron อัตโนมัติ

ปัญหา เวลาสร้าง docker container เพื่อ run งานแบบอัตโนมัติ เราก็จำเป็นต้องใช้ cron แต่ว่า เจ้า docker container images เนี่ย จะเป็นรุ่นตัดทุกอย่างที่ไม่จำเป็นออกหมด เอาไว้ให้ start – run – stop แต่ถึงกระนั้น เราก็ยังอยากได้การทำงานแบบ cron อยู่ดี Reproduce สร้าง docker container จาก ubuntu:20.04 ตรวจสอบว่ามี crontab หรือไม่ ก็ไม่มี /var/log/syslog มีไม๊ ก็ไม่มี systemctl มีไม๊ ก็ไม่มี แก้ไข ติดตั้ง 3 อย่าง cron, systemctl, rsyslog แล้ว ขอแถม vim ด้วย ติดตั้งแล้ว ลองตรวจสอบ ก็พบว่า crontab มาแล้ว, systemctl มาแล้ว ส่วน /var/log/syslog ยังไม่ได้สร้าง ลอง start cron และ rsyslog ดู ก็พบว่า /var/log/syslog มาแล้ว ทดสอบสร้าง cron ทำความเข้าใจก่อน crontab เอาไว้สร้าง cron ส่วนตัวของแต่ละ user แต่ที่ /etc/cron.d/ นั้น เอาไว้สร้างสำหรับ system 2 วิธีการสร้าง cron นี้แตกต่างกันที่ crontab ไม่สามารถระบุผู้ใช้ได้ แต่ใน /etc/cron.d/ นั้น สามารถระบุ user ที่จะ run ได้ ต่อไป จะสร้าง cron ง่าย ๆ ให้ echo เวลา ทุก 1 นาทีลงไฟล์ แล้วใส่ บรรทัดนี้ลงไป ดูใน /var/log/syslog แล้ว ก็พบว่า ทำงานได้ ดูผลใน -/test.log เป็นอันว่า OK ต่อไป ดูว่า ถ้า restart docker แล้ว cron จะทำงานไม๊ ? ทดสอบ restart docker container ออกจาก bash ของ docker แล้วใช้คำสั่ง รอสัก 3 นาที แล้วใช้คำสั่ง ผลที่ได้คือ อ้าว cron ไม่ทำงานต่อ มาดูเหตุกันก่อน เราต้องไปดู รากเหง้าของ ubuntu:20.04 image https://hub.docker.com/_/ubuntu Docker ทำงานโดยจะทำเพียงคำสั่งเดียว การสร้าง docker image จะสร้างจาก Dockerfile ซึ่ง ubuntu:20.04 มี Dockerfile ดังนี้ แสดงว่า docker container ที่ใช้ ubuntu:20.04 (ตัวอื่น ๆ ก็ต้องตามไปดูกัน) ก็จะเรียก Bash เป็นคำสั่งสุดท้าย ก่อนจะยืนเป็น Service ให้ใช้งาน ดังนั้น … เราก็ต้องไปทำให้ start cron service ใน .bashrc กัน ประเด็นคือ มัน start ด้วย user ไหน ? ลองใช้คำสั่งนี้ ก็แสดงว่า สำหรับ image ตัวนี้

Read More »