วันเสาร์ที่ 9 กันยายน พ.ศ. 2566

Bun 1.0

Post นี้เราได้มาลองศึกษาตัว Bun 1.0 ที่พึ่งปล่อยมาวันนี้ (8 กันยายน 2566)
ในตอนนี้ Bun จะยังไม่สามารถใช้งานแบบ Native บน Windows แต่เราสามารถใช้งานผ่าน WSL
และในอนาคตคาดว่าจะมีรองรับบน Windows

Bun คืออะไร


Bun เป็น JavaScript Runtime เหมือนกับ Node.js แต่มีความแตกต่างกันที่ Engine
โดย Bun สร้างขึ้นมาบน JavaScript Core (อยู่ใน Webkit จาก Safari)
และ Node.js ถูกสร้างมาบน V8 (รันอยู่บน Chrome)

Bun ถูกพัฒนาให้รองรับการเขียน JavaScript โดยมี 3 เป้าหมายหลัก
1. Speed - ทำงานได้เร็ว พัฒนาจาก JavaScript Core เป็น Engine ที่มีประสิทธิภาพที่ใช้กับ Safari
2. Elegant APIs. - มี APIs ที่เป็น Common โดยปรับแต่งเรื่องประสิทธิภาพแล้ว เช่น HTTP Server หรือ การเขียน File และมีอื่น ๆ อีก
3. Cohesive DX - มี Toolkit ที่ใช้สำหรับสร้าง JavaScript Apps เช่น Package Manager, Test Runner และ Bundler
Bun ถูกออกแบบมาให้สามารถใช้แทน Node.js ได้เลย และสามารถ Run TypeScript, TSX File โดยที่ไม่ต้องพึ่ง Dependency

วันจันทร์ที่ 21 มีนาคม พ.ศ. 2565

(Shortcut) TAR File

# TAR Command Line

### 1 Create Archive File / Directory / Zip ###
# -c create
# -z gzip, gunzip, ungzip
# -f file

tar -cf archive.tar file1 file2
tar -cf archive.tar dir/
tar -czf archive.tar.gz dir/

### 2 Show Detail in Archive File ###
# -t list
# -v verbose
# -f file

tar -tf archive.tar
tar -tvf archive.tar

### 3 Extract Archive File ###
# -x extract
# -z gzip, gunzip, ungzip
# -v verbose
# -f file

tar -xvf archive.tar
tar -xzvf archive.tar.gz

วันศุกร์ที่ 18 มีนาคม พ.ศ. 2565

(Shortcut) Install MariaDB Server 10.3 on Ubuntu 20.04

# update package and install
sudo apt update
sudo apt install mariadb-server mariadb-client

sudo mysql_secure_installation

sudo mysql -u root -p
# system will ask 2 password
# 1 linux user password
# 2 mysql root password

วันพฤหัสบดีที่ 1 กรกฎาคม พ.ศ. 2564

(Shortcut) Uncomplicated Firewall on Ubuntu 20.04

ref https://www.cyberciti.biz/faq/unix-linux-check-if-port-is-in-use-command/ ref https://www.cyberciti.biz/faq/how-to-configure-firewall-with-ufw-on-ubuntu-20-04-lts/ sudo lsof -i:[port-number] sudo lsof -i -P -n | grep LISTEN sudo ufw status sudo ufw status numbered sudo ufw delete [number] sudo ufw enable sudo ufw disable sudo ufw allow 80/tcp comment 'accept Apache' sudo ufw allow 443/tcp comment 'accept HTTPS Connections' sudo ufw allow from [ip]

วันพฤหัสบดีที่ 10 มิถุนายน พ.ศ. 2564

การติดตั้ง Postfix ใน Ubuntu 20.04 ปี 2021

อีกครั้งกับการที่ต้องมา Setup ตัว Postfix ซึ่งไม่ได้ทำบ่อยแล้วไม่มีความรู้เรื่องนี้เอาสะเลย ครั้งนี้จะต้องขึ้น Server Mail ให้ระบบอื่น ๆ เข้ามาเชื่อมต่อเพื่อส่งเมลออกไปยังที่อื่น ๆ ต่อไป แม้จะเคยทำมาแล้วแต่ก็ลืมไปหมด ครั้งนี้ได้โอกาสเลยเอามาเขียยลง Blog ไว้จะถ้ามีโอกาสได้ทำอีก ก็จะได้กลับมาหาอ่านไปกันเร็ว ๆ ได้ ในบทความนี้เราจะมาเริ่มแบบไม่รู้อะไรค่อย ๆ กันแก้ Error ต่าง ๆ ไปด้วย ไปเริ่มทำกันเลย

OS ที่ใช้จะเป็น Ubuntu 20.04 เพื่อให้ใช้ตัวนี้กันไปยาว ๆ ให้เราทำการติดตั้งให้เรียบร้อยตั้ง Date, Local, Network และทำการ Upgrade Package ให้เรียบร้อย
จากนั้นทำการติดตั้ง postfix อีเมล Server และ mailutils เพื่อใช้ทดสอบส่งอีเมลออกจาก Server
# Install postfix and mailutils
sudo apt install postfix mailutils
เมื่อติดตั้งเรียบร้อยแล้วให้ทำการ configuration ตัว postfix โดยใช้คำสั่ง dpkg-reconfigure postfix เพื่อช่วยให้เรา Config ง่ายขึ้น และผมจะใช้ค่า Config Default ตั้งตนไปก่อน เดียวมาทำความเข้าใจแต่ละส่วนที่หลัง ค่าอยู่หลัง : นั้นใช้ Default ระบบมาให้แต่แรกเดียวเราจะกลับมาแก้ที่ละอัน และตั้งค่าที่ configuration แล้วก็ให้ทำการ restart postfix อีก 1 รอบ
# Configure postfix
sudo dpkg-reconfigure postfix

# Config Value
# General type of mail configuration: Internet Site
# System mail name: enoti
# Root and postmaster mail recipient: sarankon
# Other destinations to accept mail for (blank for none): enoti, enoti, localhost.localdomain, , localhost
# Force synchronous updates on mail queue?: <No>
# Local networks: 127.0.0.0/8 [::ffff:127.0.0.0]/24 [::1]/128
# Mailbox size limit (bytes): 0
# Local address extension character: +
# Internet protocols to use: all

sudo systemctl restart postfix
ลองส่งอีเมลเลยว่าได้ไหม โดยใช้ mailutils ในการส่ง
# Test Send Mail
echo "Postfix Test" | mail -s "Subject Test" youremail@gmail.com

วันจันทร์ที่ 22 มีนาคม พ.ศ. 2564

Rsyslog ทำความรู้จักกับ Log และตั้งค่าให้ส่ง Log ไปเก็บยังเครื่อง Server

File Log ในระบบ Linux

เราจะต้องมีไฟล์ที่จะบันทึกการทำงานเพื่อใช้ในการตรวจสอบการทำงานและใช้เพื่อหาความผิดปกติที่เกิดขึ้นจากระบบ
Rsyslog มาจากคำว่า "The rocket-fast system for log processing"
Rsyslog เป็น Open Source ในระบบปฏิบัติการ UNIX และ Unix-like ใช้สำหรับส่งข้อมูล Log ผ่านทาง network

อ้างอิงจาก: https://www.rsyslog.com/, https://en.wikipedia.org/wiki/Rsyslog

Syslog

ใน syslog จะประกอบด้วย 3 ส่วน Facility, Priority และ Action โดยจากเขียนในรูปแบบตามนี้
Facility.Priority;Facility.Priority Action (; แทน และ)
Facility,Facility.Priority Action (, แทน หรือ)

วันเสาร์ที่ 20 มีนาคม พ.ศ. 2564

สรุปภาษา Dart เบื้องต้น สำหรับคนมีพื้นฐานการเขียนโปรแกรมแล้ว

method main() สำหรับการเริ่มต้นโปรแกรม และ method print() ในการแสดงผล

เริ่มต้นโครงสร้างต้องมี method main() ระบบจะเริ่มทำงานภายใน method เป็นอันดับแรก
method print('ข้อความ') เป็นการสั่งให้แสดงผลออกมาทาง console
void main() {
	print('Hello World!');
}

วันจันทร์ที่ 16 พฤศจิกายน พ.ศ. 2563

[Review] รีวิว 3BB GIGATV กล่อง Android TV ดู TV Online

กล่อง 3BB Android TV เราสามารถใช้ดู Live TV ได้ และเท่าที่ผมลองเลื่อน ๆ ดูนั้น เราสามารถดู Live TV ได้กว่า 60 ช่อง ยังมีผังรายการ Live TV ให้เราทราบว่าแต่ละช่องมีรายการอะไรบ้างเวลาไหน และถ้าช่องไหนมีรูปเครื่องหมายนาฬิการเวลา เราจะสามารถดูรายการย้อนหลังในช่องนั้น ๆ ได้ด้วยครับ


วันอาทิตย์ที่ 15 พฤศจิกายน พ.ศ. 2563

[Review] รีวิว 3BB GIGATV กล่อง Android TV จาก 3BB

รีวิวกล่อง 3BB TV Box เป็นกล่อง Android TV ที่เป็น Android Version 10 และมี Chromecast ในตัวมาแล้ว


Chromecast และ Android TV คืออะไรก่อน

ก็จะพูดถึงกันสั้น ๆ ตรงนี้, ช่วงก่อนหน้านี้ Google ได้ทำอุปกรณ์ที่ชื่อว่า Chromecast โดยเจ้าอุปกรณ์ตัวนี้ใช้ต่อเข้ากับ TV ผ่านช่องสัญญา HDMI โดยจะทำให้ TV ธรรมดาของเราสามารถรับคำสั่งมือถือของเราได้ เช่น แชร์ภาพหน้าจอมือถือ, สั่งให้เล่น Video ผ่าน Youtube หรือเล่นเกมได้ โดยการเล่น Youtube กับเจ้าตัว Chromecast นั้นมือถือเราไม่จำเป็นต้องเปิด App Youtube ทิ้งไว้ เพราะการทำงานของ Chromecast คือรับคำสั่งจากมือถือให้เล่น Video จากนั้นตัว Chromecast จะทำการเปิด Video โดยไม่ได้ใช้การส่งภาพจากมือถือของเรา ทำให้เราสามารถใช้งานโปรแกรมอื่น ๆ ในขนาดที่ใช้งาน Chromecast อยู่

ส่วน Android TV มาหลังจาก Chromecast สักพักใหญ่ ซึ่งเจ้า Android TV เขาประกาศตัวไว้เป็น OS (Operating System) สำหรับ TV (Television) และมีเจ้า Chromecast อยู่ข้างในตัว Android TV อีกที โดยตัว Android TV นั้นก็เหมือนกับที่อยู่ในมือถือ Android ของเรา เราจะต้องทำการผูกบัญชี Google เข้ากับ Android TV และก็สามารถลงแอพต่าง ๆ ได้ใน Google Play ลงมายัง Android TV ได้อีกด้วย
***แต่ก็ยังไม่เยอะเท่าบนมือถือนะครับเท่าที่ลองทดสอบดู คิดว่าตัวแอพก็ต้องทำให้รองรับเฉพาะ Android TV ด้วย

โดยปกติแล้วไม่ชอบ TV ที่เป็น Smart หรือมี OS อะไรมาในตัวเพราะส่วนตัวคิดว่าถ้าระบบนั้นพัง TV ก็จะดูไม่ได้ไปด้วย และ TV ที่ไม่ใช่ Smart ส่วนใหญ่ก็จะราคาถูกกว่า Smart ด้วย ***เป็นความคิดเห็นส่วนตัวนะครับ ส่วนกล่องที่ได้มาเป็นของทาง 3BB ซึ่งมีเจ้าหน้าที่โทรติดต่อมาว่าต้องการปรับ Package โดยใช้กล่องหรือไหม เราเองยังไม่แน่ใจครับ แต่เพราะก็กำลังมองหาพวก Mi Box หรือ Chromecast มาใช้งานอยู่แล้วเลยตอบตกลงดู ก็เลยได้มาเขียนรีวืวตอนนี้ เพื่อจะเป็นประโยชน์กับใครที่กำลังอยากได้ข้อมูลว่ากล่องนี้มันเป็นอะไรยังไงกันแน่ครับ ไปดูกันเลย


วันจันทร์ที่ 2 พฤศจิกายน พ.ศ. 2563

[Windows] การใช้งาน WSL 2 (Windows Subsystem for Linux 2)

การใช้งาน Windows Subsystem for Linux 2 เราสามารถใช้งานได้ผ่าน Command Line
เมื่อเราต้องการดูรายการ Linux ที่ลงไว้แล้วสามารถใช้คำสั่ง wsl --list --verbose

วันอาทิตย์ที่ 1 พฤศจิกายน พ.ศ. 2563

[Windows] ติดตั้ง WSL 2 (Windows Subsystem for Linux 2) และการใช้งาน WSL 2

การติดตั้ง WSL 2 (Windows Subsystem for Linux 2)
ขั้นตอนการติดตั้ง WSL 2
1. การ Update Windows เป็น 2004
2. เปิดใช้ Windows Subsystem for Linux Feature
3. Set เป็น Windows Subsystem for Linux 2

การดูว่า Windows ของเราเป็น 2004 หรือยังให้ไปที่ปุ่มคลิกที่ปุ่ม Start แล้วค้นหาคำว่า winver แล้วคลิกดูรายละเอียด

วันเสาร์ที่ 31 ตุลาคม พ.ศ. 2563

[React Native] Redux

Redux

- ใช้แชร์ State แบบ Global ให้ทุก Component เข้าถึงได้
- Component ต้องเรียกใช้ Action ในการแก้ไขข้อมูลใน State Global โดยตรง
- ใช้ Logger ในการ Track ได้จะเห็น prev state, action, next state

npm install redux redux-logger redux-thunk react-redux

redux react-redux : ลง redux และใช้ react-redux
redux-logger : ใช้ track การเปลี่ยนแปลงข้อมูล
redux-thunk : เพื่อให้ใช้งาน asynchronous ได้

Flow

graph LR; a([State])--defines-->b([UI]); b([UI])--triggers-->c([Actions]); c([Actions])--sent to-->d([Reducer]); d([Reducer])--updates-->e([Store]); e([Store])--contains-->a([State]);

วันศุกร์ที่ 30 ตุลาคม พ.ศ. 2563

[Blogger] ลองเปลี่ยนมาใช้ highlight.js ทำ Syntax Highlight Code

เนื่องจากครั้งก่อนใช้งาน Syntax Highlighter ซึ้งเป็น Version 3 และไม่มีภาษาใหม่ ๆ ให้ใช้งานตอนนี้ก็เลยต้องหาตัวใหม่มาใช้งาน
เจอ highlight.js น่าสดใจมากและคนใช้เยอะมาก เลยจับมาลงสักหน่อย

และเหมือนเดิมเราต้องไปทำการเพิ่ม Code ที่ Template ก่อนเอา Code มาจาก https://highlightjs.org/usage/
มองหาส่วนของ CDN Hosted เราจะใช้ของ Cloudflare https://cdnjs.com/libraries/highlight.js
เลือกภาษาและ Theme ได้ที่ https://highlightjs.org/static/demo/


<!-- highlight.js -->
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.3.2/styles/default.min.css"/>
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.3.2/highlight.min.js"></script>
      
<!-- and it's easy to individually load additional languages -->
<script charset="UTF-8" src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.3.2/languages/bash.min.js"></script>
<script charset="UTF-8" src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.3.2/languages/css.min.js"></script>
<script charset="UTF-8" src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.3.2/languages/javascript.min.js"></script>
<script charset="UTF-8" src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.3.2/languages/sql.min.js"></script>
<script charset="UTF-8" src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.3.2/languages/typescript.min.js"></script>
<script charset="UTF-8" src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.3.2/languages/xml.min.js"></script>
การใช้งานก็ใส่ Code ไปในบนความของเรา

<pre><code class="bash"> ... </code></pre>

วันพุธที่ 28 ตุลาคม พ.ศ. 2563

[MySQL] Config Basic

การ Config ไฟล์ cnf ของ MySQL Server

เราใช้ MySQL Server 5.7 ในหัวข้อนี้พูดถึงการใช้ไฟล์ cnf ในการ Config ค่าต่าง ๆ
ถ้าอยากรู้ Version ให้พิมพ์ mysqld --version ที่ terminal

ไฟล์ conf จะเก็บไว์ที่ path /etc/mysql/my.cnf, /etc/mysql/mysql.cnf
- /etc/mysql/my.cnf
- /etc/mysql/mysql.cnf

และอีก 2 ไฟล์ที่
- /etc/mysql/conf.d/mysql.cnf
- /etc/mysql/mysql.conf.d/mysql.cnf

มาเปิดดู 2 ไฟล์แรกก่อน

#
# The MySQL database server configuration file.
#
# You can copy this to one of:
# - "/etc/mysql/my.cnf" to set global options,
# - "~/.my.cnf" to set user-specific options.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

#
# * IMPORTANT: Additional settings that can override those from this file!
#   The files must end with '.cnf', otherwise they'll be ignored.
#

!includedir /etc/mysql/conf.d/mysql.conf
!includedir /etc/mysql/mysql.conf.d/


วันพฤหัสบดีที่ 1 ตุลาคม พ.ศ. 2563

[Ubuntu] & [Linux Container]
NFS Kernel Server ต้น ๆ กับ การ Mount NFS ใน Container

[Ubuntu] NFS Kernel Server


คำสั่งที่ใช้ติดตั้ง NFS Server

sudo apt install nfs-kernel-server

sudo mkdir -p /mnt/nfs_share
sudo chown -R nobody:nogroup /mnt/nfs_share
sudo chmod 777 /mnt/nfs_share

sudo cp /etc/exports /etc/exports.bak
sudo nano /etc/exports

วันศุกร์ที่ 18 กันยายน พ.ศ. 2563

[Ubuntu] การติดตั้ง OJS3 ใน Ubuntu 18.04

สรุปการติดตั้ง OJS3 (Open Conference System 3) ให้ทำการติดตั้ง Apache2, PHP7 และ MySQL ก่อน

การติดตั้ง Apache2 และ PHP7 เราสามารถติดตั้ง PHP7 ได้เลยโดยไม่ต้องใช้คำสั่งติดตั้ง Apache2 เพราะ PHP7 ต้องการ Apache2 อยู่แล้ว
และทำการติดตั้ง MySQL เสร็จแล้วก็ทำการตั้งค่า OJS3

 
apt install php php-mbstring php-xml php-mysql
apt install mysql-server

# ติดตั้งใช้งานครั้งแรก
mysql_secure_installation



วันอาทิตย์ที่ 14 มิถุนายน พ.ศ. 2563

[MySQL] Command Line Basic

Login to MySQL

mysql -u [username] -p

MySQL User Management


DESC mysql.user:
SELECT host, user FROM mysql.user;

CREATE USER 'username'@'hostname' IDENTIFIED BY 'password';
-- Hostname % or Localhost

DROP USER 'username'@'hostname';


ERROR 1819 (HY000)
Your password does not satisfy the current policy requirements

SHOW VARIABLES LIKE 'validate_%';
SET GLOBAL validate_password_policy=LOW;


Database Management

-- List all DATABASE 
SHOW DATABASES;

-- List database with DEFAULT_CHARACTER_SET_NAME and DEFAULT_COLLATION_NAME
SELECT * FROM INFORMATION_SCHEMA.SCHEMATA;

-- Create DATABASE and set CHARACTER_SET and COLLATION_NAME
CREATE DATABASE db_name [DEFAULT] CHARACTER SET utf8 [DEFAULT] COLLATE utf8_general_ci;

-- Change CHARACTER_SET and COLLATION_NAME
ALTER DATABASE db_name [DEFAULT] CHARACTER SET utf8 [DEFAULT] COLLATE utf8_general_ci;

-- Grant user to database
GRANT ALL PRIVILEGES ON *.* TO 'username'@'host';
GRANT ALL PRIVILEGES ON db_name.* TO 'username'@'host';
GRANT ALL|SELECT|INSERT|UPDATE|DELETE ON db_name.* TO 'username'@'host';
FLUSH PRIVILEGES;

-- Show user grant;
SHOW GRANTS FOR 'username'@'hostname';

-- Revoke
REVOKE ALL PRIVILEGES ON *.* TO 'username'@'host';
REVOKE ALL PRIVILEGES ON db_name.* TO 'username'@'host';
REVOKE ALL|SELECT|INSERT|UPDATE|DELETE ON db_name.* TO 'username'@'host';

Table Management

-- Create table and set CHARACTER_SET and COLLATION_NAME
CREATE TABLE tbl_name (column_list) [DEFAULT] CHARACTER SET charset_name COLLATE collation_name;

-- Change table and set CHARACTER_SET and COLLATION_NAME
ALTER TABLE tbl_name (column_list) [DEFAULT] CHARACTER SET charset_name COLLATE collation_name;
-- Temp
SHOW VARIABLES LIKE 'collation%';

Quit

QUIT;


https://dev.mysql.com/doc/refman/8.0/en/show-grants.html
https://dev.mysql.com/doc/refman/8.0/en/show-collation.html
https://dev.mysql.com/doc/refman/8.0/en/charset-database.html
https://dev.mysql.com/doc/refman/8.0/en/charset-table.html
https://stackoverflow.com/questions/5906585/how-to-change-the-character-set-and-collation-throughout-a-database

วันเสาร์ที่ 16 พฤษภาคม พ.ศ. 2563

[Ubuntu] การติดตั้ง และ การใช้งาน Cron Jobs

การติดตั้ง Cron ก่อนอื่นให้เราเช็คดูก่อนว่ามีการติดตั้งลงไปที่เครื่องแล้วหรือยัง
dpkg -l cron

# cron installed

Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name           Version               Architecture    Description
+++-===============-====================-===============-==============================
ii  cron            3.0pl1-128.1ubuntu1  amd64           process scheduling daemon


เมื่อพบว่ายังไม่ได้ทำการติดตั้งให้เราทำการ Update Package ก่อนทำการติดตั้ง และเมื่อทำการติดตั้งแล้วให้เช็คว่า Cron ทำงาน
apt update
apt install cron

systemctl status cron

วันอาทิตย์ที่ 10 พฤษภาคม พ.ศ. 2563

[Github] Automate - Build และ Deploy Angular JS ไปยัง Firebase

สิ่งที่เราต้องเตรียมคือ
- Account Github
- Account Firebase

ทำการ Push Project ของเราที่เป็น Angular ขึ้นไปยัง Github จากนั้นเปิดที่หน้าเว็บของ Github เข้าไปยัง Repository ของเรา สังเกตุแถบด้านบนจะเห็น แถบ Actions ให้คลิกเข้าไปแล้วเลือก set up a workflow yourself เราจะเห็นไฟล์ main.yml