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

Sync เวลาจาก Server อีกเครื่องหนึ่ง

วิธีการ sync เวลากับเซิร์ฟเวอร์ตัวอื่น

Option 1
Found a way to synchronize date and time with a server over ssh which can quickly solve the problem:
# date --set="$(ssh user@server date)"

Or you can do it the other way around:

# ssh user@host "date --set \"$(date)\""
Option 2

‘ntpdate 10.200.117.37’
or
‘/usr/sbin/sntp -P no -r 10.200.117.37’
Of course you need to set up a ntp or sntp server first.

ที่มา
http://blogs.perl.org/users/michael_li/2014/07/how-to-sync-time-between-two-linux-servers.html

วันพุธที่ 5 กันยายน พ.ศ. 2561

ทำไมใน main() ต้อง return 0;

ทำไมต้อง return 0 ใน main( )

คำถามยอดฮิตแต่คำตอบมีนิดเดียว หายากเหมือนกันครับ แต่เอาง่ายๆ เลย คือ

"เป็นกฏที่เพิ่มเข้ามาในมาตรฐานภาษา C ในปี 1999 หรือ C99"

โดยกำหนดให้มีการคืนค่าเป็นตัวเลขเสมอ จะไม่สามารถคืนค่าอื่นได้

ในสมัยก่อนการเขียนโปรแกรมภาษา C จะเขียนฟังค์ชัน main( ) ดังนี้

void main(){

}

บางคนบอกว่าไม่ส่งค่าอะไรกลับ จริงๆ แล้วก็ ส่งค่า void นั่นแหละครับ ต่อมาจึงมีกำหนดมาตรฐานใหม่ให้ส่งค่า int กลับคืน ดังนั้น ก่อนจบฟังค์ชัน main() จึงต้องส่งค่า 0 กลับไป หมายถึง โปรแกรมทำงานเสร็จสิ้นโดยสมบูรณ์แล้ว ไม่มี error

การทำงานลักษณะนี้คนที่คุ้นเคยกับ Linux ที่เขียนสคริปส์บ่อยๆ จะไม่ค่อยแปลกใจสักเท่าใดนั

สำหรับคนที่สอนเขียนภาษา C ส่วนหนึ่งจะเพิ่ม int main( ) และ return 0; เสมอ เพราะกลัวว่าบางคนใช้ ide บางรุ่นแล้วจะคอมไพล์ไม่ผ่าน แต่ปัจจุบันหลายโปรแกรมไม่มีปัญหาแบบนี้แล้ว อย่างไรก็ตามใส่ไว้ก็ไม่เสียหายครับ


 

มาตรฐานที่ออกปี 1990 ยังไม่มีข้อกำหนดให้ return 0 หากไม่ได้ส่งค่าอะไรกลับ โปรแกรมจะส่งค่า undefined กลับไป
 
 

มาตรฐานที่ออกปี 1999 กำหนดไว้ในข้อ 5.1.2.2.3 ให้ส่งค่า return 0 กลับไปด้วย
 
 

เอกสารอ้างอิง gnc-c Manual
http://studenti.fisica.unifi.it/~carla/manuali/gnu-c-manual.pdf

วันพฤหัสบดีที่ 9 สิงหาคม พ.ศ. 2561

วิธีการดาวน์โหลด Qt เวอร์ชันล่าสุด

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

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

ล่าสุดเข้าไปเพื่อติดตั้งเวอร์ชันใหม่ เดิมเคยดาวน์โหลดโดยคลิกตามจากหน้า Home ของ qt.io ไปเรื่อยๆ แล้วเข้าไปหน้าที่จะเลือกดาวน์โหลดเอง โดยไม่ผ่านระบบอัตโนมัติ แต่ตอนนี้ไม่มีแล้ว จะให้ดาวน์โหลดระบบช่วยติดตั้งมาอย่างเดียว

ระบบช่วยติดตั้งก็ง่าย ดาวน์โหลดไฟล์เล็กๆ มาก่อน แล้วในไฟล์ติดตั้งจะไปดาวน์โหลดไฟล์อื่นๆ มาขณะที่ติดตั้ง แต่จากประสบการณ์มักจะติดตั้งไม่ผ่าน เพราะไปถึงขั้นตอนสุดท้ายประมาณ 98-99% จะค้างนานมาก และสุดท้ายก็ error เกี่ยวกับการเชื่อมต่อ จึงต้องอาศัยดาวน์โหลดไฟล์ขนาดใหญ่มาเก็บไว้ในเครื่องก่อน

ตอนแรกนึกว่าทาง qt ได้ตัดวิธีการดาวน์โหลดแบบเดิมไปเสียแล้ว

วิธีการดาวน์โหลดไฟล์ด้วยตนเองก็เข้าไปที่ https://download.qt.io/archive/qt/ แค่นี้แหละ เข้าไปเลือกเอาจะเอาเวอร์ชันไหนก็ตามถนัด แต่สำหรับผู้เขียนก็นิยมเวอร์ชันล่าสุดล่ะครับ เพราะมันมีอะไรใหม่ๆ มาให้เล่นอยู่เสมอ...

วันพฤหัสบดีที่ 31 พฤษภาคม พ.ศ. 2561

เพิ่ม User และตั้งสิทธิ์ sudo ใน Ubuntu

Ubuntu เป็น OS ที่นิยมนำมาใช้เป็นเซิร์ฟเวอร์อย่างแพร่หลาย ด้วยการติดตั้งง่าย การแก้ไขปัญหาก็ทำได้ดีเพราะมีเอกสาร คนใช้งานอยู่มาก และโดยปกติ Ubuntu จะติดตั้งโปรแกรมน้อยที่สุดให้ก่อน แล้วค่อยเพิ่มเติมทีหลังตามความจำเป็น จึงเป็นระบบที่เบาไม่รกเลอะเทอะ แต่กระนั้นก็ยังไม่วาย มีคนบางคนติดตั้งทั้งหมดไปด้วย แต่ไม่ได้ใช้งานครบ จึงเป็นช่องโหว่ให้ระบบถูกแฮ็กได้ง่าย เพราะไม่รู้จะป้องกันจุดไหนดี อีกทั้งทำให้ระบบโดยรวมช้าลง หรือเวลาเจอปัญหาก็แก้ไขได้ล่าช้า

ดังนั้นควรติดตั้งให้น้อยแล้วค่อยๆ ติดตั้งเพิ่มในภายหลัง

เมื่อติดตั้งครั้งแรก Ubuntu จะให้กำหนดชื่อผู้ใช้งานที่เป็น admin ไว้ และไม่มีรหัสสำหรับ root และผู้ใช้งานคนแรกนี่แหละที่จะเป็นคนเข้าไปใช้สิทธิ์ root ได้ผ่านคำสั่ง sudo และสามารถกำหนดรหัสผ่านให้ root ได้ แต่แนะนำว่าไม่ควรใช้ root ควรปล่อยไว้อย่างนั้นไม่ต้องไปตั้งรหัสผ่าน และการตั้งชื่อผู้ใช้งานคนแรกก็ไม่ควรตั้งง่ายๆ เพราะทำให้คนอื่นเดาชื่อผู้ใช้งานได้ เช่นไม่ควรใช้ชื่อ user01, user02 หรือ sale01 เป็นต้น

สำหรับผู้เขียนเองจะใช้ชื่อที่เราจำง่าย แต่เดาไม่ง่าย บางคนใช้ชื่อเล่นง่ายๆ ก็ทำให้สุ่มเดาได้ เช่น boss, big หรือ jib พวกนี้ก็เสี่ยงต่อการแฮ็คทั้งนั้น

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

(สิ่งสำคัญประการหนึ่ง อย่าเพิ่มผู้บริหาร หรือเจ้าของบริษัท หัวหน้างานที่ไม่เกี่ยวข้องกับการดูแลระบบ และไม่มีความรู้ด้านไอทีเข้าไปเป็น user ที่มีสิทธิ์ admin เพราะบางหน่วยงานจะให้เกียรติด้วยการเพิ่มเป็นผู้ดูแล โดยถือว่าเป็นเจ้าของ เป็นเถ้าแก่ แต่แล้วนั่นอาจจะเป็นช่องทางหายนะได้ เพราะหลายคนได้รหัสแล้วจดแปะไว้ที่หน้าจอก็มี)

การเพิ่ม user ให้ใช้คำสั่ง 

adduser [ชื่อผู้ใช้]

ระบบจะให้ใส่รหัสผ่าน และรายละเอียดเกี่ยวกับผู้ใช้ คำสั่ง adduser จะสร้าง /home/ชื่อผู้ใช้ อย่าใช้คำสั่ง useradd เพราะจะยุ่งยากกว่า

เพิ่มสิทธิ์ sudo

usermod -aG sudo ชื่อผู้ใช้งาน


ทดสอบ

su - ชื่อผู้ใช้งาน

แล้วใช้คำสั่ง sudo su หากไม่ทำอะไรผิดพลาดก็จะให้ใส่รหัสผ่านอีกครั้งเพื่อเข้าไปเป็น super user

แค่นี้แหละครับง่ายๆ ไม่มีอะไรซับซ้อน แต่อย่าลืมเรื่องความปลอดภัยให้มากที่สุดนะครับ ไม่อย่างนั้นจะมานั่งเครียดกันภายหลัง...

Gtk4 ตอนที่ 6 Defining a Child object

Defining a Child object A Very Simple Editor ในบทความที่ผ่านมาเราสร้างโปรแกรมอ่านไฟล์ชนิดข้อความ และในบทความนี้ก็จะมาปรับแต่งโปรแกรมกันสักหน...