Avatar
VΔz
674473f682bc0101c94a7b2f463661943948ee1b8d6e266077578d46f859eb3c
Vin Jakkaphat Linux User👾 FOSS Dev👨‍💻 🍻 Permaculture🌳🌞🐂🐓 Full-time System Engineer Life-time Farmer เป็นเกษตรกรที่เขียนโค้ดได้นิดหน่อย Discord SiamDev: https://discord.gg/x9PHDE249n blog : https://blog.siamstr.com เช่า Server 👉 https://bangmod.cloud
Replying to Avatar Notoshi⚡

น่าทำบอทสร้างรูปแบบนี้เนาะ 🤤🤤

Main Stream Media is a Joke🤐

#siamstr

เจอกันครับผม🍻

ฝนตกแต่เช้าเลยฮะ น่านอนมาก 🤣

GM ครับ ตื่นมาทำสิ่งที่เรารักกันต่อ🔥

#siamstr

ยายนึกว่าค่ำแล้วจะไปปิดประตูบ้าน 😅😂

https://video.nostr.build/2b73a5386da00cd17d7e44aa408fd9b9c76b2d22f3268f369c8d2ba2c8ef3814.mp4

จนกระทั่ง async trait และ lifetime 🥰😆

ปัญหา off by one ที่เกิดจาก char string ใน C เป็นเรื่องที่ละเอียดอ่อนและมักสร้างความสับสนให้กับโปรแกรมเมอร์หลายคน โดยเฉพาะผู้ที่เพิ่งเริ่มต้นเขียนโปรแกรมภาษา C ลองมาดูรายละเอียดกันครับ:

1. ธรรมชาติของ C-style strings:

ใน C, string ถูกแทนด้วยอาร์เรย์ของ char ที่จบด้วยตัวอักขระ null ('\0') string "Hello" จะถูกเก็บเป็น {'H', 'e', 'l', 'l', 'o', '\0'}

2. ความยาวของ string:

เมื่อประกาศ char array เพื่อเก็บ string ต้องจองพื้นที่เพิ่มอีก 1 ตัวอักขระสำหรับ null terminator

ตัวอย่าง: char str[6] = "Hello"; // ต้องใช้ขนาด 6 ไม่ใช่ 5

3. การคัดลอก string:

เมื่อใช้ฟังก์ชัน strcpy() ต้องแน่ใจว่า destination array มีขนาดเพียงพอสำหรับ source string รวมถึง null terminator

4. การอ่าน/เขียนเกินขอบเขต:

หากไม่คำนึงถึง null terminator อาจทำให้เกิดการอ่านหรือเขียนเกินขอบเขตของ array ได้

5. การใช้ strlen():

strlen() นับความยาวของ string โดยไม่รวม null terminator ซึ่งอาจทำให้เกิดความสับสนเมื่อจัดสรรหน่วยความจำ

ตัวอย่างโค้ดที่แสดงปัญหา off by one:

```c

char str[5] = "Hello"; // ผิด: ไม่มีที่สำหรับ null terminator

char dest[5];

strcpy(dest, str); // อันตราย: dest ไม่มีที่พอสำหรับ null terminator

// แก้ไขเป็น:

char str[6] = "Hello"; // ถูก: มีที่สำหรับ null terminator

char dest[6];

strcpy(dest, str); // ปลอดภัย

```

6. การใช้ strncpy():

strncpy() อาจไม่เพิ่ม null terminator หากขนาดที่กำหนดไม่เพียงพอ:

```c

char dest[5];

strncpy(dest, "Hello", sizeof(dest)); // อันตราย: ไม่มี null terminator

// แก้ไขเป็น:

strncpy(dest, "Hello", sizeof(dest) - 1);

dest[sizeof(dest) - 1] = '\0'; // เพิ่ม null terminator เอง

```

7. การใช้ buffer ในฟังก์ชัน:

เมื่อส่ง string เข้าฟังก์ชัน ต้องระวังการเขียนเกินขนาด buffer:

```c

void func(char *buffer) {

strcpy(buffer, "This is a long string"); // อันตราย: ไม่รู้ขนาด buffer

}

// แก้ไขเป็น:

void func(char *buffer, size_t size) {

strncpy(buffer, "This is a long string", size - 1);

buffer[size - 1] = '\0';

}

```

การเข้าใจและระวังปัญหาเหล่านี้จะช่วยป้องกันข้อผิดพลาดและช่องโหว่ด้านความปลอดภัยในโปรแกรม C ได้

นอกจาก off-by-one error แล้ว ยังมีปัญหาอื่นๆ ที่พบบ่อยในการเขียนโปรแกรม โดยเฉพาะในภาษา C และ C++ ลองมาดูกัน:

1. Use-After-Free:

- เกิดเมื่อใช้หน่วยความจำที่ถูก free ไปแล้ว

- อาจนำไปสู่พฤติกรรมที่คาดเดาไม่ได้หรือช่องโหว่ด้านความปลอดภัย

2. Double Free:

- พยายาม free หน่วยความจำที่ถูก free ไปแล้ว

- อาจทำให้เกิด crash หรือ corrupt heap

3. Memory Leaks:

- ไม่คืนหน่วยความจำที่จองไว้เมื่อไม่ใช้แล้ว

- ทำให้โปรแกรมใช้หน่วยความจำมากขึ้นเรื่อยๆ

4. Buffer Overflow:

- เขียนข้อมูลเกินขอบเขตของ buffer ที่จองไว้

- อาจนำไปสู่การ overwrite ข้อมูลสำคัญหรือ code injection

5. Null Pointer Dereference:

- พยายามเข้าถึงข้อมูลผ่าน null pointer

- มักทำให้โปรแกรม crash

6. Integer Overflow/Underflow:

- เกิดเมื่อผลลัพธ์ของการคำนวณเกินขอบเขตของตัวแปร

- อาจนำไปสู่พฤติกรรมที่ไม่คาดคิดหรือช่องโหว่ด้านความปลอดภัย

7. Race Conditions:

- ในโปรแกรมแบบ multi-threaded, เมื่อผลลัพธ์ขึ้นอยู่กับลำดับการทำงานของ threads

- อาจทำให้เกิดข้อมูลที่ไม่สอดคล้องกันหรือ deadlocks

8. Uninitialized Variable Use:

- ใช้ตัวแปรที่ยังไม่ได้กำหนดค่าเริ่มต้น

- อาจทำให้เกิดพฤติกรรมที่คาดเดาไม่ได้

9. Dangling Pointer:

- pointer ที่ชี้ไปยังหน่วยความจำที่ถูก free ไปแล้ว

- คล้ายกับ Use-After-Free แต่อาจเกิดในบริบทอื่นๆ ด้วย

10. Format String Vulnerabilities:

- ในฟังก์ชันเช่น printf, เมื่อใช้ input ของผู้ใช้เป็น format string โดยตรง

- อาจถูกใช้เพื่อ leak ข้อมูลหรือ execute arbitrary code

11. Improper Error Handling:

- ไม่จัดการข้อผิดพลาดอย่างเหมาะสม

- อาจทำให้โปรแกรมอยู่ในสถานะที่ไม่คาดคิดหรือเปิดช่องโหว่ด้านความปลอดภัย

12. Time-of-check to time-of-use (TOCTOU) Bugs:

- เกิดเมื่อสถานะของระบบเปลี่ยนระหว่างการตรวจสอบและการใช้งาน

- มักพบในการจัดการไฟล์หรือทรัพยากรที่ใช้ร่วมกัน

การป้องกันปัญหาเหล่านี้ต้องอาศัยการเขียนโค้ดอย่างระมัดระวัง, การใช้เครื่องมือวิเคราะห์โค้ดอัตโนมัติ, และการทดสอบอย่างละเอียด

#siamstr claude 3.5 sonnet

ว่าด้วยเรื่อง Intel gen 13 และ 14

สรุปง่าย ๆ

- สนิมกิน ทำให้กระชากไฟมากกว่าปกติ ทำให้ทำงานผิดพลาด

- พบปัญหาตั้งแต่สองปีก่อน

- Intel ชีโบ้ชีเบ้ โทษการ์ดจอมั่ง โทษเมนบอร์ดมั่ง เรื่องเพิ่งมาแดงช่วงนี้

https://www.youtube.com/watch?v=H8LrwI-I_fY

#siamstr

อ้อ ขอบคุณครับ เจ๋งเลย ต้องลองบ้างแล้วว

นั่งเล่น npub.pro ได้มาจากโน๊ตคุณ nostr:npub1vaz88a5zhsqsrj220vh5vdnpjsu53msm34hzvcrh27x5d7zeav7qm45t60 เห็นมีช่องให้ใส่ script ลงไปได้ แต่สภาพที่ออกมามันแอบตลกจัง 55555 ช่วยทำให้แก้ css ได้ด้วยจะดีมากเลย ลองใส่แบบ inline แล้วแต่มันไม่แก้ 5555

https://learnbn.npub.pro/

ว้าววว มีอัพเดตใหม่รึ ตอนแรกไม่เห็นนะ

# Git และ Github

Github ก็เปรียบเหมือน Pornhub เราสามารถใช้งาน Git ได้โดยไม่ต้องใช้ Github

เหมือนกัน เราสามารถดู Porn ได้โดยไม่ต้องเปิด Pornhub

git คือ software สำหรับทำ version control ในการพัฒนาโปรเจคต่าง ๆ ง่ายขึ้น สามารถพัฒนาหลาย ๆ จุด พร้อม ๆ กันได้โดยการแยก Branch แล้วค่อยมา Merge โค้ดภายหลัง ซึ่งเราสามารถ Rebase หรือปรับได้ว่า จะเพิ่มส่วนไหน รวมกันยังไง ไม่ให้เกิด conflict ภายในโปรเจคของเราได้อย่างง่ายดาย

ส่วน github คือผู้ให้บริการ Server ในส่วนของการ Host โปรเจคต่าง ๆ ซึ่งก็มีความ Centralized นั่นแหละ บริษัทไหนที่ไม่เชื่อใจ Github พวกเขาก็จะสร้าง Server สำหรับ version control ของตนเองแทน อย่างเช่น Gitlab

หรือ Sapling SCM ของ Meta ที่ใช้จัดการโค้ดขนาดมหึมา มากกว่า 15ล้านบรรทัด ใน repo เดียวได้

#siamstr