❓ Vấn đề Sau khi nâng cấp lên Ubuntu 24.04, tôi gặp vấn đề với kết nối Wi-Fi: Máy khởi động xong thì không tự kết nối được Wi-Fi. Phải kết nối thủ công bằng tay mỗi lần (dù không cần nhập lại mật khẩu). Tốc độ kết nối rất chậm, và đôi khi mất ổn định. Qua lệnh lshw -C network, tôi phát hiện máy đang dùng USB Wi-Fi với chip Realtek RTL8821AU, sử dụng driver: ...
Trở lại với việc viết blog (nhờ AI)
Tôi vẫn luôn muốn viết blog. Không phải vì traffic, không phải để “phát triển thương hiệu cá nhân” — mà đơn giản là vì tôi học được nhiều nhất khi cố gắng truyền đạt điều mình biết cho người khác. Tuy nhiên, trong nhiều năm qua, tôi đã gặp trở ngại lớn: Thời gian. Và nỗ lực để sắp xếp lại suy nghĩ, cấu trúc bài viết, chọn lời, chọn ví dụ… ...
Driver trong Linux: Giao tiếp giữa Kernel Space và User Space
🧠 Kernel Space vs User Space – Driver hoạt động ở đâu trong Linux? Khi mới bắt đầu tìm hiểu hệ điều hành, mình từng nghĩ “ứng dụng chạy thì kernel xử lý” là đủ hiểu rồi. Nhưng khi đụng đến thiết bị, driver, và đặc biệt là Linux, thì hóa ra mọi thứ được chia rất rõ ràng thành hai “vùng thế giới”: User Space và Kernel Space. Vậy driver nằm ở đâu trong bức tranh này? Và ứng dụng thực sự giao tiếp với thiết bị như thế nào? ...
Tổng quan một số loại giấy phép mã nguồn mở
Giới thiệu về các Giấy phép Mã nguồn mở Phổ biến Trong phát triển phần mềm mã nguồn mở, việc lựa chọn giấy phép phù hợp là rất quan trọng để xác định cách phần mềm của bạn có thể được sử dụng, sửa đổi và phân phối. Dưới đây là tổng quan về một số giấy phép mã nguồn mở phổ biến: 1. Giấy phép MIT Đặc điểm chính: ...
Vấn đề tốn bộ nhờ (Memory) và CPU khi export file bằng Apache POI
Môi trường, điều kiện Ghi 1 triệu row ra file excel Môi trường: AMD Ryzen 5 3600 6-Core Processor Mem: 15Gi Khi sủ dụng với xssfworkbook Thời gian chạy : 24.7 s ➜ excel-performance-test mvn exec:java -Dexec.mainClass="com.example.ExcelPerformanceTestXSSFWorkbook" [INFO] Scanning for projects... [INFO] [INFO] -----------------< com.example:excel-performance-test >----------------- [INFO] Building excel-performance-test 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- exec-maven-plugin:3.1.0:java (default-cli) @ excel-performance-test --- Execution time: 24486 ms [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 24.776 s [INFO] Finished at: 2023-11-09T06:56:38+09:00 CPU, Memory Usage : Khi sử dụng với sxssfworkbook Thời gian chạy : 5.1 s ➜ excel-performance-test mvn exec:java -Dexec.mainClass="com.example.ExcelPerformanceTestSXSSFWorkbook" [INFO] Scanning for projects... [INFO] [INFO] -----------------< com.example:excel-performance-test >----------------- [INFO] Building excel-performance-test 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- exec-maven-plugin:3.1.0:java (default-cli) @ excel-performance-test --- Execution time: 4779 ms [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 5.106 s [INFO] Finished at: 2023-11-09T06:58:12+09:00 [INFO] ------------------------------------------------------------------------ CPU, Memory Usage Đánh giá: Sử dụng sxssfworkbook cho thời gian chạy nhanh hơn : 24.7 s vs 5.1 s Sử dụng sxssfworkbook cho mức độ chiếm dụng CPU ít hơn Sử dụng sxssfworkbook thì ghi file thường xuyên hơn Có thể điều chỉnh được bằng Buffer size (ở ví dụ trên đang để 1000 row) Một số chú ý Khi sử dụng sxssfworkbook thì một số thao tác GetRow sẽ không thể hoạt động được nữa. Tức là một phần của file Excel đã bị ghi ra rồi thì không thể tham chiếu lại nữa. Tham khảo https://poi.apache.org/ Code trên đều viết bằng ChatGPT
Tạo QRCode App bằng ChatGPT
Một vài hình ảnh Prompts đã sử dụng https://chat.openai.com/share/17cc3dd3-f2a5-4828-8adf-382fbace5da5 Github https://github.com/minatu2d/simpleqr
ChatGPT là gì? Tại sao Developer nên lo lắng
Đăng kí sử dụng Vào địa chỉ chat.openai.com sau đó đăng kí 1 account Có thể đăng kí bằng tài khoản Google, Microsoft hoặc Apple Hoặc dùng email bất kì Ta sẽ có một giao diện chat để sử dụng. Hỏi thử Bảo ChatGPT tự giới thiệu về chính ChatGPT Hỏi : Viết một bài giới thiệu về ChatGPT cho Developer. Trả lời : ChatGPT là một mô hình ngôn ngữ thông minh được phát triển bởi OpenAI dựa trên kiến trúc GPT-3.5. Với khả năng mô phỏng và tương tác ngôn ngữ tự nhiên, ChatGPT mang đến cho bạn một công cụ mạnh mẽ để xây dựng ứng dụng, dịch vụ và sản phẩm mới sử dụng trí tuệ nhân tạo. ...
OpenGL là gì?
0. Tại sao đi tìm hiểu OpenGL làm cái gì? Gần đây, phải quay sang làm 1 dự án có liên quan đến Computer Graphic, cụ thể là trong không gian 3 chiều (3D). Thực sự, đối với mình nó lại hoàn toàn mới. Ngoài chút kiến thức toán như: Vector, Ma trận (Matrix), vector đơn vị, vài phép cơ bản của Vector thì mình không còn tí kiến thức Đại số nào nữa. Vì thế, cũng mất khá nhiều thời gian để đọc lại các kiến thức đại số liên quan đến các phép biến đổi cơ bản : Tịnh tiến (translate), phép co giãn (scale), phép quay (rotation). Tuy không hiểu rõ, nhưng việc đọc lại, học lại cũng giúp ích rất nhiều trong việc debug. Tuy nhiên, khi động đến phần “Lighting” (tương tác với nguồn sáng) trong không gian 3D thì đọc lý thuyết thôi là không đủ. Vì thế, để hiểu kĩ hơn mình đã tìm hiểu về một vài Graphics Toolkit để chạy thử. Nổi tiếng nhất đó là : OpenGL. (Viết tắt từ: Open Graphic Library). Bài này sẽ nói về những thứ cơ bản khi tiếp cận với OpenGL. 1. OpenGL, GLUT, GLFW, GLEW, GLAD OpenGL: https://www.khronos.org/opengl/wiki/Main_Page ...
File locking trong linux
1. Giới thiệu File locking (khoá file) là cơ chế để đảm bảo việc đọc/ghi file giữa nhiều process cùng lúc một cách an toàn. Bài này chúng ta sẽ giới thiệu xem cơ chế Locking sinh ra giải quyết vấn đề gì và các ví dụ sử dụng của nó trên bash script và ngôn ngữ C. 2. Nếu vấn đề theo cách muôn thủa Ví dụ mô tả vấn đề cập nhật xen kẽ trong bất cứ hệ thống thông tin nào. Đó là vấn đề cập nhật số dư tài khoản (balance) được lưu trong file balance.dat thông quan 2 process là A và B, giả sử ban đầu trong tài khoản có 100 củ, thứ tự thực hiện đúng sẽ như sau: Process A: Đọc giá trị tài khoản hiện tại, trừ đi 20 củ và lưu kết quả vào số dư. Process B: Đọc giá trị tài khoản hiện tại, cộng vào 80 củ và cũng lưu kết quả vào số dư. Sau khi thực hiện xong, số dư tài khoản phải là : 100 - 20 + 80 = 160 củ. Tuy nhiên, nếu xảy ra vấn đề cập nhật xen kẽ, thứ tự thực hiện có thể như sau: Process A: Đọc giá trị balance hiện tại và chuẩn bị thực hiện tính toán. Process B: Đọc được cùng giá trị với Process A và cũng chuẩn bị thực hiện tính toán. Process A: Thực hiện trừ 20 củ và lưu kết quả (80 củ) vào balance Process B: Do không biết giá trị nó đọc lúc trước đã bị thay đổi (giá trị nó đang giữa là 100 củ trong khi giá trị của balance đã là 80 củ rồi), nên nó vẫn thực hiện cộng 80 củ và lưu kết quả 100 + 80 = 180 củ vào balance. Kết quả là 180 là giá trị cuối cùng chứ không phải là 160 như mong muốn. 3. Hai cơ chế Locking trong ứng dụng Linux File locking (ở đây là nói đến đơn vị File để phân biệt với memory locking) là cơ chế cho để hạn chế truy cập cùng 1 file của nhiều process. Có nghĩa là chỉ cho phép một process truy cập ở một thời điểm cụ thể nào đó, vì thế sẽ tránh được cập nhật xen kẽ. Ta hẳn đều biết câu lệnh được ví như ôm boom cảm tử trong linux: rm -rf / (Tuyệt đối đừng thử nếu không biết!!!!!). Nếu ta chạy nó, toà bộ hệ thống đang chạy sẽ bị xoá sạch không còn một cái gì, nên nhớ là không còn một cái gì hết. Tại sao lại kì quặc vậy, hệ thống đang chạy mà lại còn bị xoá đi là sao. Đó chính là vì : Linux thường không tự động thực hiện lock các file đang được mở. Cho nên cho dù hệ thống đang chạy với một tá file đang được mở đi nữa, thì nó vẫn có thể bị xoá sạch sẽ. Thực ra, Linux có hỗ trợ 2 cơ chế lock lock (gọi là 2 loại lock cũng được), đó là: Cơ chế khoá cộng tác (Advisory Locking) Cơ chế khoá độc quyền (Mandatory Locking) Chúng ta sẽ xem chi tiết thêm ở bên dưới. 3.1 Cơ chế khoá cộng tác (Advisory Locking) Nó không phải là một cách thức bắt buộc. ...
Sử dụng lệnh screen cơ bản
screen là một phần mềm (chạy ở chế độ dòng lệnh) trên Linux rất hữu ích. 1. screen giải quyết vấn đề gì? Vấn đề: Khi bạn kết nối bằng SSH đến server qua 1 terminal, bạn có thể gặp các vấn đề sau: Chương trình bạn định chạy (train 1 con AI, down phim XXX) sẽ rất mất thời gian, bạn không thể đợi đến khi nó xong được. Bạn muốn nó vẫn chạy kể cả khi bạn tắt terminal đi về, hôm sau đến vẫn có cái terminal cũ. Bạn muốn chạy 2,3,… chương trình một lúc một lúc, chương trình nào cũng bắn lỗi ra STDOUT, và bạn phải kiểm tra được tình trạng lỗi của mỗi chương trình một cách riêng biệt để fix bug, điều chỉnh dựa trên LOG của nó. Bạn chán việc log lỗi chương trình bằng redirect chúng sang file. screen sinh ra để giải quyết các vấn đề ở trên. Chỉ với một câu lệnh, bạn có thể giữ lại toàn bộ trạng thái của terminal, giúp cho chương trình vẫn chạy bình thường, các terminal log vẫn được ghi lại. Chỉ với một kết nối SSH bạn có thể chạy bao nhiêu chương trình đồng thời tuỳ thích, mỗi chương trình sẽ có terminal (tức là STDIN,STDOUT,STDERR ) riêng. Chỉ bằng screen, bạn không cần mở Desktop lên để chỉ để mở một tab terminal mới để chạy chương trình của bạn. 2. Một số khái niệm khi sử dụng và install session: Tức là một terminal ảo do screen quản lý. Trên đó bạn làm được mọi thứ như trên terminal thật. Chỉ khác một điều, khi bạn thoát (bằng lệnh exit) thì nó sẽ huỷ terminal ảo thôi, và trở về terminal thật. ...