From fbe02be64818abe24030dca80c1f3314fe47e5c8 Mon Sep 17 00:00:00 2001 From: tiennm99 Date: Fri, 15 May 2026 21:21:58 +0700 Subject: [PATCH] docs(newsletter): validate URLs, fix redirects, strikethrough dead links - Update ~38 URLs to current canonical (domain moves, restructures, tracking-param strip) - Strikethrough ~15 sections with confirmed dead URLs (404/410/DNS-fail) - Fix malformed markdown ((double parens, stray bracket) - Correct evanhahn.com URL typo Two-pass review with verification pass to catch HEAD-only false-positives. --- content/post/2025/02/16/index.md | 4 +-- content/post/2025/02/23/index.md | 6 ++-- content/post/2025/02/27/index.md | 2 +- content/post/2025/03/04/index.md | 12 ++++---- content/post/2025/03/08/index.md | 2 +- content/post/2025/04/05/index.md | 2 +- content/post/2025/04/30/index.md | 2 +- content/post/2025/05/02/index.md | 16 +++++------ content/post/2025/05/04/index.md | 2 +- content/post/2025/05/07/index.md | 2 +- content/post/2025/05/10/index.md | 2 +- content/post/2025/05/13/index.md | 2 +- content/post/2025/07/21/index.md | 48 ++++++++++++++++---------------- content/post/2025/07/24/index.md | 2 +- content/post/2025/07/25/index.md | 10 +++---- content/post/2025/07/26/index.md | 18 ++++++------ content/post/2025/07/28/index.md | 2 +- content/post/2025/08/04/index.md | 2 +- content/post/2025/08/05/index.md | 8 +++--- content/post/2025/08/06/index.md | 2 +- content/post/2025/08/08/index.md | 18 ++++++------ content/post/2025/08/31/index.md | 2 +- content/post/2025/09/07/index.md | 4 +-- content/post/2025/09/10/index.md | 2 +- content/post/2025/09/29/index.md | 24 ++++++++-------- content/post/2025/09/30/index.md | 26 ++++++++--------- content/post/2025/10/12/index.md | 20 ++++++------- content/post/2025/11/25/index.md | 4 +-- content/post/2025/12/02/index.md | 2 +- content/post/2025/12/03/index.md | 4 +-- content/post/2025/12/08/index.md | 2 +- content/post/2025/12/10/index.md | 20 ++++++------- content/post/2025/12/14/index.md | 2 +- content/post/2025/12/20/index.md | 4 +-- content/post/2025/12/27/index.md | 6 ++-- content/post/2026/02/02/index.md | 2 +- content/post/2026/02/03/index.md | 2 +- content/post/2026/02/24/index.md | 2 +- content/post/2026/02/28/index.md | 4 +-- content/post/2026/03/20/index.md | 18 ++++++------ content/post/2026/04/02/index.md | 2 +- 41 files changed, 158 insertions(+), 158 deletions(-) diff --git a/content/post/2025/02/16/index.md b/content/post/2025/02/16/index.md index 93ae037..6961d63 100644 --- a/content/post/2025/02/16/index.md +++ b/content/post/2025/02/16/index.md @@ -11,7 +11,7 @@ Chào các bạn, đến hẹn lại lên, đây là Newsletter #2 của mình. Thôi không vòng vo nữa, vào ngay Newsletter #2 của MiTi nào. -## [Some things to expect in 2025](https://lwn.net/Articles/1003780) +## [Some things to expect in 2025](https://lwn.net/Articles/1003780/) Bài viết dự đoán một số xu hướng và sự kiện có thể xảy ra trong cộng đồng Linux và phần mềm tự do năm 2025. Đầu tiên, sched-ext sẽ trở thành yếu tố thay đổi cuộc chơi, cho phép tải trình lập lịch CPU từ không gian người dùng thông qua BPF, thúc đẩy sự sáng tạo và thử nghiệm. Mã Rust sẽ được tích hợp nhiều hơn vào kernel, mang lại các tính năng mà người dùng cuối có thể không nhận ra. Bài viết cảnh báo về một nỗ lực backdoor tương tự như XZ có thể xuất hiện, và các dự án chỉ có một người duy trì sẽ bị coi là rủi ro hơn. @@ -31,7 +31,7 @@ Bài viết trình bày chi tiết các thuật toán rate limiting phổ biến Để chọn thuật toán phù hợp, cần hiểu rõ đặc điểm traffic (dự đoán được, đột biến, hỗn hợp), mức độ chính xác cần thiết, giới hạn tài nguyên (bộ nhớ, CPU, khả năng mở rộng) và trải nghiệm người dùng. Bài viết nhấn mạnh rằng rate limiting không chỉ là việc thiết lập giới hạn mà còn là thiết kế các hệ thống hiệu quả, công bằng và thân thiện với người dùng. Các triển khai cho từng loại rate limiter với Java & Redis sẽ được phát hành hàng tuần. -## [Why does Cloudflare Pages have such a generous Free tier?](https://mattsayar.com/why-does-cloudflare-pages-have-such-a-generous-free-tier) +## [Why does Cloudflare Pages have such a generous Free tier?](https://mattsayar.com/why-does-cloudflare-pages-have-such-a-generous-free-tier/) Bài viết của Matt Sayar khám phá lý do tại sao Cloudflare Pages lại có một gói miễn phí hào phóng trong bối cảnh nhiều dịch vụ hosting hiện nay cung cấp các gói miễn phí tương tự. Cloudflare Pages nổi bật với băng thông không giới hạn, điều mà ít nền tảng nào khác có thể cạnh tranh. Các dịch vụ như GitHub Pages, GitLab Pages và Netlify đều có giới hạn băng thông, trong khi Cloudflare cho phép người dùng thoải mái phát triển trang web mà không lo lắng về chi phí phát sinh. diff --git a/content/post/2025/02/23/index.md b/content/post/2025/02/23/index.md index 8ba3537..49b92ac 100644 --- a/content/post/2025/02/23/index.md +++ b/content/post/2025/02/23/index.md @@ -13,11 +13,11 @@ Chào các bạn, lại một cuối tuần nữa trôi qua, mời các bạn ch Video này trên Inside Java Newscast trình bày những phát triển và kế hoạch dự kiến cho Java trong năm 2025, tập trung vào các dự án OpenJDK lớn như Babylon, Loom, Leyden, Lilliput, Panama và Valhalla (ngoại trừ Amber, sẽ được đề cập trong một video khác). -## [Why You Should Learn Kotlin in 2025](https://dev.to/empiree/why-you-should-learn-kotlin-in-2025-47g0) +## ~~[Why You Should Learn Kotlin in 2025](https://dev.to/empiree/why-you-should-learn-kotlin-in-2025-47g0)~~ -Bài viết này trên Dev.to khuyến khích các nhà phát triển tìm hiểu Kotlin vào năm 2025, nhấn mạnh các tính năng hiện đại, khả năng tương tác với Java và các ứng dụng đa dạng của nó. Bài đăng này cũng thảo luận về thị trường việc làm và mức lương tiềm năng cho các nhà phát triển Kotlin. +~~Bài viết này trên Dev.to khuyến khích các nhà phát triển tìm hiểu Kotlin vào năm 2025, nhấn mạnh các tính năng hiện đại, khả năng tương tác với Java và các ứng dụng đa dạng của nó. Bài đăng này cũng thảo luận về thị trường việc làm và mức lương tiềm năng cho các nhà phát triển Kotlin.~~ -## [Mastering Java Logging: Best Practices for Effective Application Monitoring](https://dev.to/aaravjoshi/mastering-java-logging-best-practices-for-effective-application-monitoring-20h7) +## [Mastering Java Logging: Best Practices for Effective Application Monitoring](https://dev.to/nithinbharathwaj/mastering-java-logging-best-practices-for-effective-application-monitoring-20h7) Bài viết này trên Dev.to cung cấp hướng dẫn toàn diện về việc thực hiện ghi log hiệu quả trong các ứng dụng Java. Nó bao gồm các khía cạnh thiết yếu như chọn khung ghi log phù hợp, sử dụng các cấp log thích hợp, triển khai ghi log có cấu trúc và nhận biết ngữ cảnh, quản lý hiệu suất và bảo mật, đồng thời thiết lập ghi log tập trung. diff --git a/content/post/2025/02/27/index.md b/content/post/2025/02/27/index.md index 81ec9fd..4c0b255 100644 --- a/content/post/2025/02/27/index.md +++ b/content/post/2025/02/27/index.md @@ -36,7 +36,7 @@ Bài viết này cung cấp một cái nhìn tổng quan về một số ngôn n **Tóm lại:** Bài viết nhấn mạnh rằng việc lựa chọn ngôn ngữ lập trình phù hợp phụ thuộc vào yêu cầu của dự án, kinh nghiệm của nhóm và mục tiêu dài hạn. Mặc dù không có ngôn ngữ nào phù hợp với mọi trường hợp, nhưng việc hiểu rõ điểm mạnh và hạn chế của từng ngôn ngữ có thể giúp đưa ra quyết định thông minh hơn. -## [Discovery Coding](https://jimmyhmiller.github.io/discovery-coding) +## [Discovery Coding](http://jimmyhmiller.com/discovery-coding) Bài viết giới thiệu "Discovery Coding" (tạm dịch: Lập trình khám phá) như một phương pháp tiếp cận vấn đề bằng cách viết code trước, thay vì cố gắng thiết kế hoặc suy nghĩ trước. Tác giả so sánh phương pháp này với việc "viết khám phá" trong văn học, nơi tác giả khám phá ra câu chuyện trong quá trình viết. diff --git a/content/post/2025/03/04/index.md b/content/post/2025/03/04/index.md index 3307636..0af4df5 100644 --- a/content/post/2025/03/04/index.md +++ b/content/post/2025/03/04/index.md @@ -9,7 +9,7 @@ categories: [ "Newsletter" ] Chào các bạn, cuối tuần rồi MiTi hơi lười nên không lên bài. Mời các bạn thưởng thức Newsletter #5 nhé! -## [5 Advanced Java Reflection Techniques for Dynamic Programming](https://dev.to/aaravjoshi/5-advanced-java-reflection-techniques-for-dynamic-programming-4ph1) +## [5 Advanced Java Reflection Techniques for Dynamic Programming](https://dev.to/nithinbharathwaj/5-advanced-java-reflection-techniques-for-dynamic-programming-4ph1) Bài viết "5 Advanced Java Reflection Techniques for Dynamic Programming" của Aarav Joshi đi sâu vào sức mạnh của Java Reflection API, cho phép developer kiểm tra và thao tác cấu trúc của classes và objects trong runtime. Bài viết trình bày 5 kỹ thuật nâng cao: truy cập private members (cẩn trọng); tạo dynamic instances của classes sử dụng tên classes được xác định ở runtime; sử dụng custom annotations để thêm metadata và xử lý nó trong runtime (ví dụ: logging); tạo dynamic proxies để triển khai cross-cutting concerns như logging hoặc transaction management; và thao tác bytecode ở runtime với các thư viện như ByteBuddy để sửa đổi classes trong runtime. Mặc dù các kỹ thuật này mang lại sự linh hoạt và khả năng mở rộng, bài viết nhấn mạnh tầm quan trọng của việc sử dụng chúng một cách thận trọng do các vấn đề tiềm ẩn về maintainability và performance. Reflection là một công cụ mạnh mẽ cho developer Java để tạo ra các ứng dụng dynamic và thích ứng. @@ -29,15 +29,15 @@ Bài viết chỉ ra những giả định ẩn sau các con số độ tin cậ Bài viết kết thúc bằng cách kêu gọi các kỹ sư xem xét tác động kinh doanh thực tế của các loại lỗi khác nhau và tập trung vào việc cung cấp giá trị nhất quán cho người dùng đồng thời duy trì các hoạt động kỹ thuật bền vững, thay vì mù quáng theo đuổi các con số độ tin cậy tùy ý. Các phương pháp tiếp cận hiện đại đang chuyển sang các số liệu sắc thái hơn như error budget và SLO (Service Level Objectives) dựa trên trải nghiệm người dùng. -## [How to write a good design document](https://grantslatton.com/how-to-design-document) +## ~~[How to write a good design document](https://grantslatton.com/how-to-design-document)~~ -Bài viết "How to Design Document" đưa ra lời khuyên hữu ích về cách viết tài liệu thiết kế hiệu quả. Tài liệu thiết kế, theo tác giả, là một báo cáo kỹ thuật phác thảo chiến lược triển khai của một hệ thống trong bối cảnh trade-offs và constraints. Mục tiêu chính là thuyết phục người đọc (và quan trọng nhất là chính tác giả) rằng thiết kế này là tối ưu trong tình hình hiện tại. +~~Bài viết "How to Design Document" đưa ra lời khuyên hữu ích về cách viết tài liệu thiết kế hiệu quả. Tài liệu thiết kế, theo tác giả, là một báo cáo kỹ thuật phác thảo chiến lược triển khai của một hệ thống trong bối cảnh trade-offs và constraints. Mục tiêu chính là thuyết phục người đọc (và quan trọng nhất là chính tác giả) rằng thiết kế này là tối ưu trong tình hình hiện tại.~~ -Tác giả so sánh việc viết tài liệu thiết kế với việc viết một chứng minh toán học. Để đạt được hiệu quả cao nhất, cần tuân thủ tổ chức tốt, tương tự như tổ chức code. Người viết nên tránh tạo ra "spaghetti design docs" bằng cách đảm bảo mọi câu văn đều liên kết và dễ hiểu. Mục tiêu là không gây bất ngờ cho người đọc, giúp họ cảm thấy giải pháp rõ ràng ngay cả khi nó đòi hỏi nhiều suy nghĩ phức tạp. +~~Tác giả so sánh việc viết tài liệu thiết kế với việc viết một chứng minh toán học. Để đạt được hiệu quả cao nhất, cần tuân thủ tổ chức tốt, tương tự như tổ chức code. Người viết nên tránh tạo ra "spaghetti design docs" bằng cách đảm bảo mọi câu văn đều liên kết và dễ hiểu. Mục tiêu là không gây bất ngờ cho người đọc, giúp họ cảm thấy giải pháp rõ ràng ngay cả khi nó đòi hỏi nhiều suy nghĩ phức tạp.~~ -Bài viết cũng nhấn mạnh tầm quan trọng của việc nắm bắt được tâm lý của người đọc và dự đoán những phản đối có thể xảy ra. Hơn nữa, cần chỉnh sửa để loại bỏ mọi từ ngữ thừa thãi, vì sự chú ý của người đọc là một nguồn tài nguyên hạn chế. Tác giả khuyến khích việc thực hành bằng cách đánh giá các tài liệu khác và chắt lọc ý tưởng thành các tweet ngắn gọn. +~~Bài viết cũng nhấn mạnh tầm quan trọng của việc nắm bắt được tâm lý của người đọc và dự đoán những phản đối có thể xảy ra. Hơn nữa, cần chỉnh sửa để loại bỏ mọi từ ngữ thừa thãi, vì sự chú ý của người đọc là một nguồn tài nguyên hạn chế. Tác giả khuyến khích việc thực hành bằng cách đánh giá các tài liệu khác và chắt lọc ý tưởng thành các tweet ngắn gọn.~~ -Cuối cùng, bài viết gợi ý tổ chức tài liệu thành các bullet point có thể tóm tắt trong một câu duy nhất và sử dụng footnote cho các chi tiết phức tạp để không làm gián đoạn mạch chính của tài liệu. +~~Cuối cùng, bài viết gợi ý tổ chức tài liệu thành các bullet point có thể tóm tắt trong một câu duy nhất và sử dụng footnote cho các chi tiết phức tạp để không làm gián đoạn mạch chính của tài liệu.~~ ## [Picking your battles when you are hyper-rational](https://newsletter.weskao.com/p/picking-your-battles-hyper-rational) diff --git a/content/post/2025/03/08/index.md b/content/post/2025/03/08/index.md index e504b41..6d98f32 100644 --- a/content/post/2025/03/08/index.md +++ b/content/post/2025/03/08/index.md @@ -25,7 +25,7 @@ Tóm lại, theo Sean, LLM là công cụ giá trị nếu được sử dụng Chris Kiehl là một lập trình viên phần mềm hiện đang làm việc tại Amazon. Anh đã viết cuốn sách "Lập trình hướng dữ liệu trong Java" và tạo ra Gooey, một công cụ chuyển đổi hầu hết các chương trình dòng lệnh Python thành ứng dụng GUI đầy đủ chức năng chỉ với một dòng code. Bốn năm trước, Kiehl đã đăng một danh sách các chủ đề về phát triển phần mềm mà anh đã thay đổi quan điểm sau khi làm việc trong ngành công nghiệp. Đây là một bản cập nhật về quan điểm của Kiehl - những điều anh đã thay đổi suy nghĩ, những ý kiến anh đã tiếp thu trong quá trình làm việc, và những điều anh vẫn giữ nguyên quan điểm. -## [Looking Under the Lamppost (On Problem-Solving)](https://www.edbatista.com/2025/01/looking-under-the-lamppost-on-problem-solving.html) +## [Looking Under the Lamppost (On Problem-Solving)](https://edbatista.com/2025/01/looking-under-the-lamppost-on-problem-solving.html) Ed Batista mở đầu bài viết bằng một câu chuyện ngụ ngôn quen thuộc: một người đàn ông tìm chìa khóa dưới cột đèn, dù biết đã đánh rơi ở chỗ tối hơn. Câu chuyện này là phép ẩn dụ cho cách chúng ta thường tiếp cận việc giải quyết vấn đề. Thay vì đối mặt với vấn đề cần giải quyết, chúng ta lại tập trung vào vấn đề muốn giải quyết. diff --git a/content/post/2025/04/05/index.md b/content/post/2025/04/05/index.md index e1522b4..056b99e 100644 --- a/content/post/2025/04/05/index.md +++ b/content/post/2025/04/05/index.md @@ -7,7 +7,7 @@ categories: [ "Newsletter" ] *Mời bạn thưởng thức Newsletter \#10.* -## [Gaining Years of Experience in a Few Months](https://marcgg.com/blog/2025/02/11/high-growth) +## [Gaining Years of Experience in a Few Months](https://marcgg.com/blog/2025/02/11/high-growth/) Bài viết của Marc G. Gauthier chia sẻ về cách đạt được nhiều năm kinh nghiệm trong một thời gian ngắn thông qua các dự án thách thức. Đây là một góc nhìn thú vị về sự phát triển nhanh trong sự nghiệp công nghệ. diff --git a/content/post/2025/04/30/index.md b/content/post/2025/04/30/index.md index a57aefd..219f60d 100644 --- a/content/post/2025/04/30/index.md +++ b/content/post/2025/04/30/index.md @@ -36,7 +36,7 @@ Tác giả giới thiệu một số cấu trúc dữ liệu súc tích quan tr Bài viết cũng đề cập đến các ứng dụng thực tế như xử lý XML, DNA và AST của ngôn ngữ lập trình, cùng với các thư viện Rust hiện có như `vers`, `sucds` và `fm-index`. Đây là một lĩnh vực đầy tiềm năng cho các ứng dụng cần xử lý dữ liệu lớn với bộ nhớ hạn chế. -## [The art of engineering team focus: less is more](https://resources.github.com/developer-productivity/engineering-team-focus/) +## [The art of engineering team focus: less is more](https://github.com/resources/insights/engineering-team-focus) Bài viết từ GitHub Resources trình bày một quan điểm ngược với trực giác thông thường: để đội ngũ kỹ thuật làm việc hiệu quả hơn, họ cần làm ít việc hơn cùng một lúc. Tác giả lập luận rằng việc phân tán nguồn lực vào nhiều tác vụ song song thường dẫn đến hiệu suất thấp hơn, không phải cao hơn. diff --git a/content/post/2025/05/02/index.md b/content/post/2025/05/02/index.md index 3267df2..6bc02c8 100644 --- a/content/post/2025/05/02/index.md +++ b/content/post/2025/05/02/index.md @@ -79,18 +79,18 @@ Bài viết trình bày các kỹ thuật để giảm thiểu việc tạo đ Tác giả cũng chia sẻ các benchmark so sánh hiệu suất giữa code Java thông thường và code được tối ưu để giảm thiểu garbage, cho thấy sự khác biệt đáng kể về thời gian xử lý và độ trễ. Đây là một bài viết giá trị cho các lập trình viên Java làm việc với các hệ thống yêu cầu hiệu năng cao như tài chính, giao dịch thời gian thực, hoặc xử lý dữ liệu lớn. -## [Microbenchmarks: Java Locks vs Atomic](https://blog.tombert.com/posts/2025-03-04-lock-benchmark/) +## ~~[Microbenchmarks: Java Locks vs Atomic](https://blog.tombert.com/posts/2025-03-04-lock-benchmark/)~~ -Bài viết này trình bày một phân tích chi tiết về hiệu suất của các cơ chế đồng bộ hóa (synchronization) khác nhau trong lập trình đa luồng. Tác giả đã thực hiện benchmark so sánh hiệu năng của nhiều loại lock khác nhau như mutex, spin lock, read-write lock và các giải pháp lock-free, đánh giá chúng trong các tình huống tải khác nhau. +~~Bài viết này trình bày một phân tích chi tiết về hiệu suất của các cơ chế đồng bộ hóa (synchronization) khác nhau trong lập trình đa luồng. Tác giả đã thực hiện benchmark so sánh hiệu năng của nhiều loại lock khác nhau như mutex, spin lock, read-write lock và các giải pháp lock-free, đánh giá chúng trong các tình huống tải khác nhau.~~ -Kết quả benchmark cho thấy sự khác biệt đáng kể giữa các loại lock, với những phát hiện thú vị như: -1. Spin lock thường hiệu quả hơn mutex trong các tác vụ ngắn với mức độ cạnh tranh thấp -2. Read-write lock mang lại lợi ích lớn trong các trường hợp đọc nhiều, ghi ít -3. Các giải pháp lock-free có thể mang lại hiệu suất vượt trội trong một số trường hợp, nhưng lại phức tạp hơn đáng kể trong việc triển khai và bảo trì +~~Kết quả benchmark cho thấy sự khác biệt đáng kể giữa các loại lock, với những phát hiện thú vị như:~~ +~~1. Spin lock thường hiệu quả hơn mutex trong các tác vụ ngắn với mức độ cạnh tranh thấp~~ +~~2. Read-write lock mang lại lợi ích lớn trong các trường hợp đọc nhiều, ghi ít~~ +~~3. Các giải pháp lock-free có thể mang lại hiệu suất vượt trội trong một số trường hợp, nhưng lại phức tạp hơn đáng kể trong việc triển khai và bảo trì~~ -Bài viết cũng thảo luận về các yếu tố ảnh hưởng đến hiệu suất của lock như độ trễ, throughput, khả năng mở rộng theo số lượng luồng, và tác động của cache coherence. Tác giả cung cấp các hướng dẫn thực tế về việc lựa chọn cơ chế đồng bộ hóa phù hợp dựa trên đặc điểm của ứng dụng và mô hình truy cập dữ liệu. +~~Bài viết cũng thảo luận về các yếu tố ảnh hưởng đến hiệu suất của lock như độ trễ, throughput, khả năng mở rộng theo số lượng luồng, và tác động của cache coherence. Tác giả cung cấp các hướng dẫn thực tế về việc lựa chọn cơ chế đồng bộ hóa phù hợp dựa trên đặc điểm của ứng dụng và mô hình truy cập dữ liệu.~~ -Đây là một tài liệu tham khảo giá trị cho các lập trình viên làm việc với hệ thống đa luồng hiệu năng cao, giúp họ đưa ra quyết định sáng suốt khi lựa chọn cơ chế đồng bộ hóa phù hợp với yêu cầu cụ thể của dự án. +~~Đây là một tài liệu tham khảo giá trị cho các lập trình viên làm việc với hệ thống đa luồng hiệu năng cao, giúp họ đưa ra quyết định sáng suốt khi lựa chọn cơ chế đồng bộ hóa phù hợp với yêu cầu cụ thể của dự án.~~ ## Bonus: Vài ảnh hay ho đến từ [ByteByteGo](https://bytebytego.com/) diff --git a/content/post/2025/05/04/index.md b/content/post/2025/05/04/index.md index 27dc152..de16c8d 100644 --- a/content/post/2025/05/04/index.md +++ b/content/post/2025/05/04/index.md @@ -83,7 +83,7 @@ Một số điểm nổi bật bao gồm: không để bị gán nhãn là "frus - Chấp nhận để người khác sai ở những chi tiết không quan trọng, tập trung vào mục tiêu chính. - Sắp xếp thời gian họp và tương tác hợp lý, tránh các khung giờ kém hiệu quả. -## [Code is the new no-code](https://lumberjack.so/p/code-is-the-new-no-code) +## [Code is the new no-code](https://lumberjack.so/code-is-the-new-no-code/) Bài viết phân tích sự chuyển dịch từ các nền tảng no-code sang việc lập trình truyền thống với sự hỗ trợ mạnh mẽ của AI và các mô hình thành phần (component-based) như React. Tác giả cho rằng, dù no-code hứa hẹn giúp mọi người xây dựng phần mềm mà không cần biết lập trình, thực tế các công cụ này vẫn gặp giới hạn về độ phức tạp và khả năng mở rộng. diff --git a/content/post/2025/05/07/index.md b/content/post/2025/05/07/index.md index 0a35aa9..c68a941 100644 --- a/content/post/2025/05/07/index.md +++ b/content/post/2025/05/07/index.md @@ -46,7 +46,7 @@ Cleaner cũng có thể kết hợp với AutoCloseable để cung cấp cả c Tuy nhiên, cần lưu ý rằng Cleaner chỉ nên được sử dụng khi không thể giải phóng tài nguyên thông qua try-with-resources hoặc gọi phương thức close() một cách tường minh. Cleaner có chi phí cao hơn do sử dụng thread nền và cơ chế PhantomReference, vì vậy nên ưu tiên sử dụng try-with-resources khi có thể. -## [5 Hidden Git Tips for Java Developers](https://blog.payara.fish/5-hidden-git-tips-for-java-developers) +## [5 Hidden Git Tips for Java Developers](https://www.azul.com/blog/5-hidden-git-tips-for-java-developers/) Git là công cụ quản lý phiên bản không thể thiếu đối với các lập trình viên Java. Ngoài các lệnh cơ bản như git commit, git push và git pull, Git còn có nhiều tính năng ẩn có thể cải thiện đáng kể quy trình làm việc của bạn. Bài viết từ blog của Payara giới thiệu năm mẹo Git hữu ích dành riêng cho phát triển Java. diff --git a/content/post/2025/05/10/index.md b/content/post/2025/05/10/index.md index e2b9b1d..893e386 100644 --- a/content/post/2025/05/10/index.md +++ b/content/post/2025/05/10/index.md @@ -182,7 +182,7 @@ Những điểm chính: Bài viết kết luận rằng mặc dù Jakarta Data chưa có sẵn tính năng specifications, nhưng việc tự triển khai không khó và mang lại nhiều lợi ích. Tác giả cũng gợi ý rằng một tính năng tương tự sẽ được tích hợp trong Jakarta Data 1.1 trong tương lai. -## [There is no Vibe Engineering](https://serce.me/posts/2025-31-03-there-is-no-vibe-engineering) +## [There is no Vibe Engineering](https://serce.me/posts/2025-03-31-there-is-no-vibe-engineering) Bài viết này của Sergey Tselovalnikov (SerCe) phân tích về khái niệm "vibe coding" được Andrej Karpathy đề xuất gần đây và đưa ra những nhận định sâu sắc về vai trò thực sự của kỹ sư phần mềm trong thời đại AI. Tác giả phản bác quan điểm cho rằng AI sẽ thay thế hoàn toàn vai trò của kỹ sư phần mềm. diff --git a/content/post/2025/05/13/index.md b/content/post/2025/05/13/index.md index c4c11d3..834f8ea 100644 --- a/content/post/2025/05/13/index.md +++ b/content/post/2025/05/13/index.md @@ -256,7 +256,7 @@ Tác giả đề xuất một số cải tiến trong tương lai: Cách tiếp cận này mang lại nhiều lợi ích cho việc phát triển và kiểm thử ứng dụng web locally. Nó giúp đơn giản hóa việc truy cập các ứng dụng và tạo ra một môi trường phát triển chuyên nghiệp hơn. Mặc dù cần một số cấu hình ban đầu, nhưng lợi ích mang lại là đáng kể, đặc biệt khi làm việc với nhiều ứng dụng cùng lúc. -## [AI 50: AI Agents Move Beyond Chat](https://www.sequoiacap.com/article/ai-50-2025/) +## [AI 50: AI Agents Move Beyond Chat](https://sequoiacap.com/article/ai-50-2025/) ![](https://sequoiacap.com/wp-content/uploads/sites/6/2025/04/ai-50-2025.png) diff --git a/content/post/2025/07/21/index.md b/content/post/2025/07/21/index.md index 2838523..29fac92 100644 --- a/content/post/2025/07/21/index.md +++ b/content/post/2025/07/21/index.md @@ -8,7 +8,7 @@ draft: false *Đã lâu rồi mình không viết bài. Và thú thật thì những newsletter dạo trước hơi kiểu "chạy KPI", ~~mình cứ cố cho rất nhiều link vào và để AI Agent làm nốt phần còn lại~~. Lần này mình sẽ chọn lọc bài kĩ hơn, ~~còn viết thì vẫn để AI thôi, vì mình lười hehe =)))~~. Mong các bạn sẽ thích. Chào mừng bạn đến với Newsletter #31.* -## [Claude Code: Best Practices for Agentic Coding](https://www.anthropic.com/engineering/claude-code-best-practices) +## [Claude Code: Best Practices for Agentic Coding](https://code.claude.com/docs/en/best-practices) Anthropic vừa ra mắt hướng dẫn thực hành tốt nhất cho Claude Code - một công cụ command-line mạnh mẽ cho lập trình với sự hỗ trợ của AI. Đây là một dự án nghiên cứu linh hoạt và có thể tùy chỉnh cao, giúp các kỹ sư tích hợp AI vào quy trình phát triển phần mềm một cách hiệu quả. @@ -70,36 +70,36 @@ Bài viết từ Skip Labs giới thiệu khái niệm "Event-Hidden Architectur --- -## [Lessons from Distributed Systems](https://www.16elt.com/2025/04/19/lessons-from-distributed-systems/) +## ~~[Lessons from Distributed Systems](https://www.16elt.com/2025/04/19/lessons-from-distributed-systems/)~~ -Bài viết từ 16elt.com chia sẻ những bài học thực tế từ việc xây dựng và vận hành distributed systems ở quy mô lớn. Tác giả tổng hợp những kinh nghiệm xương máu về các vấn đề thường gặp và cách giải quyết khi làm việc với hệ thống phân tán. +~~Bài viết từ 16elt.com chia sẻ những bài học thực tế từ việc xây dựng và vận hành distributed systems ở quy mô lớn. Tác giả tổng hợp những kinh nghiệm xương máu về các vấn đề thường gặp và cách giải quyết khi làm việc với hệ thống phân tán.~~ -**Điểm chính:** -- Tách riêng cache clusters: tránh chia sẻ một cache cluster cho nhiều services vì workload nặng từ Service A có thể evict dữ liệu quan trọng của Service B, gây ra performance issues khó chẩn đoán -- Sử dụng message queues: queues giúp quản lý traffic spikes và service load, cung cấp buffering và resilience giữa các services như "một người trưởng thành có trách nhiệm" ngăn chặn service overload -- Đo lường end-to-end latency: không chỉ xem xét service response times mà còn cả "dequeue latency" - thời gian messages chờ trong queue trước khi được xử lý -- Design for failure: expect và plan cho network và service failures tiềm tàng, implement retry policies, circuit breakers, dead-letter queues cho failed messages -- Đảm bảo idempotency: assume message duplicates sẽ xảy ra, thiết kế hệ thống handle repeated events một cách graceful vì message queues guarantee 'at least once' delivery -- Distributed systems đòi hỏi proactive design, robust monitoring và resilient architecture để quản lý complexity và potential failure points -- Monitoring và observability là chìa khóa để hiểu được hành vi thực của hệ thống trong production environment +~~**Điểm chính:**~~ +~~- Tách riêng cache clusters: tránh chia sẻ một cache cluster cho nhiều services vì workload nặng từ Service A có thể evict dữ liệu quan trọng của Service B, gây ra performance issues khó chẩn đoán~~ +~~- Sử dụng message queues: queues giúp quản lý traffic spikes và service load, cung cấp buffering và resilience giữa các services như "một người trưởng thành có trách nhiệm" ngăn chặn service overload~~ +~~- Đo lường end-to-end latency: không chỉ xem xét service response times mà còn cả "dequeue latency" - thời gian messages chờ trong queue trước khi được xử lý~~ +~~- Design for failure: expect và plan cho network và service failures tiềm tàng, implement retry policies, circuit breakers, dead-letter queues cho failed messages~~ +~~- Đảm bảo idempotency: assume message duplicates sẽ xảy ra, thiết kế hệ thống handle repeated events một cách graceful vì message queues guarantee 'at least once' delivery~~ +~~- Distributed systems đòi hỏi proactive design, robust monitoring và resilient architecture để quản lý complexity và potential failure points~~ +~~- Monitoring và observability là chìa khóa để hiểu được hành vi thực của hệ thống trong production environment~~ --- -## [Better Error Handling: Từ Try/Catch đến Modern Approaches](https://meowbark.dev/Better-error-handling) +## ~~[Better Error Handling: Từ Try/Catch đến Modern Approaches](https://meowbark.dev/Better-error-handling)~~ -Bài viết từ meowbark.dev khám phá các phương pháp xử lý lỗi hiện đại trong software development, từ traditional try/catch cho đến các kỹ thuật tiên tiến như Go-style error handling và monadic Result types. Tác giả phân tích ưu nhược điểm của từng approach và đưa ra khuyến nghị về cách chọn lựa phương pháp phù hợp. +~~Bài viết từ meowbark.dev khám phá các phương pháp xử lý lỗi hiện đại trong software development, từ traditional try/catch cho đến các kỹ thuật tiên tiến như Go-style error handling và monadic Result types. Tác giả phân tích ưu nhược điểm của từng approach và đưa ra khuyến nghị về cách chọn lựa phương pháp phù hợp.~~ -**Điểm chính:** -- Ba approaches chính cho error handling: traditional try/catch, Go-style return tuples, và monadic Result types -- Challenges của error handling truyền thống: thiếu type safety, unpredictable error control flow, limited type system integration -- Go-style approach: return errors như part của tuple, explicitly handle failure scenarios, cung cấp clear error context -- Monadic Result approach: treat errors as values, sử dụng container types như `Result`, enable functional-style error chaining -- Best practices quan trọng: phân biệt recoverable và unrecoverable errors, wrap external library errors sớm, sử dụng type-safe error handling mechanisms -- Cân nhắc performance và developer experience khi chọn strategy -- Recommended techniques: sử dụng libraries như `neverthrow` cho robust error management, implement error mapping và transformation -- Tạo centralized error handling layers để quản lý lỗi một cách systematic -- Chọn error handling strategy cân bằng giữa type safety, readability, và team expertise -- Duy trì clear error communication và recovery mechanisms trong suốt application +~~**Điểm chính:**~~ +~~- Ba approaches chính cho error handling: traditional try/catch, Go-style return tuples, và monadic Result types~~ +~~- Challenges của error handling truyền thống: thiếu type safety, unpredictable error control flow, limited type system integration~~ +~~- Go-style approach: return errors như part của tuple, explicitly handle failure scenarios, cung cấp clear error context~~ +~~- Monadic Result approach: treat errors as values, sử dụng container types như `Result`, enable functional-style error chaining~~ +~~- Best practices quan trọng: phân biệt recoverable và unrecoverable errors, wrap external library errors sớm, sử dụng type-safe error handling mechanisms~~ +~~- Cân nhắc performance và developer experience khi chọn strategy~~ +~~- Recommended techniques: sử dụng libraries như `neverthrow` cho robust error management, implement error mapping và transformation~~ +~~- Tạo centralized error handling layers để quản lý lỗi một cách systematic~~ +~~- Chọn error handling strategy cân bằng giữa type safety, readability, và team expertise~~ +~~- Duy trì clear error communication và recovery mechanisms trong suốt application~~ --- diff --git a/content/post/2025/07/24/index.md b/content/post/2025/07/24/index.md index 1d60f46..7ceca09 100644 --- a/content/post/2025/07/24/index.md +++ b/content/post/2025/07/24/index.md @@ -110,7 +110,7 @@ Các module cấp cao nên phụ thuộc vào abstraction, không phải concret **Kết luận thực tế**: Các nguyên tắc SOLID không chỉ là lý thuyết mà là công cụ thực tế giúp viết mã sạch, có thể mở rộng và bảo trì. Việc áp dụng đúng các nguyên tắc này giúp hệ thống phần mềm linh hoạt hơn trước những thay đổi và yêu cầu mới. -## [A year on, Valkey charts path to v9 after break from Redis](https://www.theregister.com/2025/05/15/a_year_of_valkey) +## [A year on, Valkey charts path to v9 after break from Redis](https://www.theregister.com/software/2025/05/15/a-year-on-valkey-charts-path-to-v9-after-break-from-redis/852499) Sau một năm tách khỏi Redis, Valkey đã chứng tỏ sức sống mạnh mẽ và đang vạch ra lộ trình phát triển bền vững. Dự án này được sinh ra từ sự phản đối với việc Redis Labs thay đổi giấy phép gây tranh cãi, dẫn đến làn sóng các contributor rời bỏ Redis, bao gồm Madelyn Olson - hiện là đồng maintainer của Valkey. diff --git a/content/post/2025/07/25/index.md b/content/post/2025/07/25/index.md index 0bf7be4..6a30a95 100644 --- a/content/post/2025/07/25/index.md +++ b/content/post/2025/07/25/index.md @@ -41,15 +41,15 @@ Một số điểm nổi bật bao gồm bài viết của Andy Wingo về "a si Đặc biệt, tác giả nhấn mạnh sức mạnh của việc viết kỹ thuật rõ ràng và súc tích trong việc truyền đạt những khái niệm phức tạp. Danh sách này không chỉ phản ánh niềm đam mê của tác giả với lý thuyết ngôn ngữ lập trình mà còn cho thấy tầm quan trọng của những tài liệu có thể thay đổi cách nhìn nhận kỹ thuật của chúng ta. -## [LLMs are Making Me Dumber](https://vvvincent.me/llms-are-making-me-dumber/) +## ~~[LLMs are Making Me Dumber](https://vvvincent.me/llms-are-making-me-dumber/)~~ -Vincent Cheng đã đặt ra một câu hỏi thú vị và gây tranh cãi: liệu các mô hình ngôn ngữ lớn (LLMs) có đang khiến chúng ta trở nên "ngu đần" hơn không? Tác giả chia sẻ những quan sát cá nhân về cách AI đang ảnh hưởng đến quá trình học tập và phát triển kỹ năng của mình. +~~Vincent Cheng đã đặt ra một câu hỏi thú vị và gây tranh cãi: liệu các mô hình ngôn ngữ lớn (LLMs) có đang khiến chúng ta trở nên "ngu đần" hơn không? Tác giả chia sẻ những quan sát cá nhân về cách AI đang ảnh hưởng đến quá trình học tập và phát triển kỹ năng của mình.~~ -Tác giả chỉ ra những "đường tắt" trong học tập mà AI mang lại: sử dụng LLMs để hoàn thành các dự án lập trình mà không hiểu sâu về mã nguồn, giải bài tập toán bằng cách để AI tạo ra đáp án, hoặc soạn thảo email mà không luyện tập kỹ năng viết. Những hành vi này có thể dẫn đến việc "thoái hóa" khả năng giải quyết vấn đề và hy sinh độ sâu của việc học để đổi lấy tốc độ đầu ra. +~~Tác giả chỉ ra những "đường tắt" trong học tập mà AI mang lại: sử dụng LLMs để hoàn thành các dự án lập trình mà không hiểu sâu về mã nguồn, giải bài tập toán bằng cách để AI tạo ra đáp án, hoặc soạn thảo email mà không luyện tập kỹ năng viết. Những hành vi này có thể dẫn đến việc "thoái hóa" khả năng giải quyết vấn đề và hy sinh độ sâu của việc học để đổi lấy tốc độ đầu ra.~~ -Tuy nhiên, Vincent cũng thừa nhận những lợi ích ngắn hạn về năng suất và đưa ra những phép so sánh lịch sử với máy tính bỏ túi, GPS hay cuộc cách mạng công nghiệp. Ông nhận ra sự không chắc chắn về tác động dài hạn và đề xuất một chiến lược cân bằng. +~~Tuy nhiên, Vincent cũng thừa nhận những lợi ích ngắn hạn về năng suất và đưa ra những phép so sánh lịch sử với máy tính bỏ túi, GPS hay cuộc cách mạng công nghiệp. Ông nhận ra sự không chắc chắn về tác động dài hạn và đề xuất một chiến lược cân bằng.~~ -Giải pháp mà tác giả đưa ra là có ý thức bảo tồn các kỹ năng cốt lõi như tư duy độc lập, ra quyết định và tập trung dài hạn, đồng thời sử dụng LLMs một cách chiến lược mà vẫn duy trì được tính chủ động cá nhân. Như ông viết: "Việc chuyển giao hoàn toàn sẽ làm tê liệt việc học thực sự nhưng tối đa hóa tốc độ và đầu ra ngắn hạn, và việc tìm ra sự cân bằng phù hợp là rất quan trọng." +~~Giải pháp mà tác giả đưa ra là có ý thức bảo tồn các kỹ năng cốt lõi như tư duy độc lập, ra quyết định và tập trung dài hạn, đồng thời sử dụng LLMs một cách chiến lược mà vẫn duy trì được tính chủ động cá nhân. Như ông viết: "Việc chuyển giao hoàn toàn sẽ làm tê liệt việc học thực sự nhưng tối đa hóa tốc độ và đầu ra ngắn hạn, và việc tìm ra sự cân bằng phù hợp là rất quan trọng."~~ ## [How Cursor Indexes Codebases Fast](https://read.engineerscodex.com/p/how-cursor-indexes-codebases-fast) diff --git a/content/post/2025/07/26/index.md b/content/post/2025/07/26/index.md index e52a0d0..1b7c8b1 100644 --- a/content/post/2025/07/26/index.md +++ b/content/post/2025/07/26/index.md @@ -35,19 +35,19 @@ Tác giả khuyến khích các lập trình viên nên thành thật với bả - Được phép sử dụng công cụ "lạ" nếu nó làm bạn hạnh phúc - Sự hài lòng cá nhân cũng quan trọng như tính thực tiễn -## [Ảo tưởng về Copilot](https://deplet.ing/the-copilot-delusion/) +## ~~[Ảo tưởng về Copilot](https://deplet.ing/the-copilot-delusion/)~~ -Bài viết này đưa ra những phê phán sâu sắc về các trợ lý lập trình AI như GitHub Copilot và ảnh hưởng tiêu cực của chúng đến ngành phát triển phần mềm. Tác giả lập luận rằng các công cụ AI này tạo ra mã nguồn mà không có sự hiểu biết thực sự về kiến trúc hệ thống hay những phức tạp kỹ thuật sâu xa. +~~Bài viết này đưa ra những phê phán sâu sắc về các trợ lý lập trình AI như GitHub Copilot và ảnh hưởng tiêu cực của chúng đến ngành phát triển phần mềm. Tác giả lập luận rằng các công cụ AI này tạo ra mã nguồn mà không có sự hiểu biết thực sự về kiến trúc hệ thống hay những phức tạp kỹ thuật sâu xa.~~ -Vấn đề cốt lõi là việc phụ thuộc vào AI làm suy giảm kỹ năng tư duy phản biện và học hỏi của lập trình viên. Khi "gia công tư duy cho AI", chúng ta cũng đang "gia công việc học" cho chúng. Các công cụ này thiếu trực giác về hiệu năng phần cứng, quản lý bộ nhớ, và tối ưu hóa - những yếu tố then chốt trong phát triển phần mềm chất lượng cao. +~~Vấn đề cốt lõi là việc phụ thuộc vào AI làm suy giảm kỹ năng tư duy phản biện và học hỏi của lập trình viên. Khi "gia công tư duy cho AI", chúng ta cũng đang "gia công việc học" cho chúng. Các công cụ này thiếu trực giác về hiệu năng phần cứng, quản lý bộ nhớ, và tối ưu hóa - những yếu tố then chốt trong phát triển phần mềm chất lượng cao.~~ -Tác giả lo ngại về tác động văn hóa trong ngành kỹ thuật phần mềm, có thể tạo ra một thế hệ lập trình viên ưu tiên sản lượng nhanh hơn chất lượng, đe dọa "linh hồn hacker" và sự tò mò kỹ thuật sâu sắc. Nguy cơ là sẽ có nhiều người nghĩ mình giỏi chỉ vì bot của họ vượt qua được CI, nhưng thực tế thiếu hiểu biết căn bản. +~~Tác giả lo ngại về tác động văn hóa trong ngành kỹ thuật phần mềm, có thể tạo ra một thế hệ lập trình viên ưu tiên sản lượng nhanh hơn chất lượng, đe dọa "linh hồn hacker" và sự tò mò kỹ thuật sâu sắc. Nguy cơ là sẽ có nhiều người nghĩ mình giỏi chỉ vì bot của họ vượt qua được CI, nhưng thực tế thiếu hiểu biết căn bản.~~ -**Mối lo ngại chính:** -- AI tạo mã mà không hiểu kiến trúc hệ thống -- Suy giảm kỹ năng tư duy phản biện của lập trình viên -- Thiếu hiểu biết về hiệu năng và tối ưu hóa -- Nguy cơ tạo ra thế hệ lập trình viên "giỏi trên giấy" +~~**Mối lo ngại chính:**~~ +~~- AI tạo mã mà không hiểu kiến trúc hệ thống~~ +~~- Suy giảm kỹ năng tư duy phản biện của lập trình viên~~ +~~- Thiếu hiểu biết về hiệu năng và tối ưu hóa~~ +~~- Nguy cơ tạo ra thế hệ lập trình viên "giỏi trên giấy"~~ ## [Tại sao Cline không lập chỉ mục mã nguồn (và đó là điều tốt)](https://cline.bot/blog/why-cline-doesnt-index-your-codebase-and-why-thats-a-good-thing) diff --git a/content/post/2025/07/28/index.md b/content/post/2025/07/28/index.md index ef0f291..d17ef75 100644 --- a/content/post/2025/07/28/index.md +++ b/content/post/2025/07/28/index.md @@ -27,7 +27,7 @@ Bài viết giải quyết những lo ngại phổ biến như vấn đề "ảo Điều quan trọng nhất là tác giả nhấn mạnh rằng lập trình viên vẫn phải chịu trách nhiệm đọc hiểu và đánh giá mã được tạo ra, nhưng AI đang trở thành công cụ hỗ trợ năng suất không thể thiếu. -## [Claude 4 Best Practices](https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/claude-4-best-practices#general-principles) +## [Claude 4 Best Practices](https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices) Tài liệu chính thức từ Anthropic về các phương pháp tốt nhất khi làm việc với Claude 4, cung cấp hướng dẫn chi tiết về kỹ thuật prompt engineering để tối ưu hóa hiệu suất và chất lượng đầu ra. diff --git a/content/post/2025/08/04/index.md b/content/post/2025/08/04/index.md index edcb18f..2eabd3d 100644 --- a/content/post/2025/08/04/index.md +++ b/content/post/2025/08/04/index.md @@ -46,7 +46,7 @@ Nghiên cứu này thách thức giả định phổ biến rằng AI luôn giú Bài học cho các lập trình viên: AI là công cụ mạnh mẽ nhưng cần được sử dụng một cách chiến lược. Hãy đo lường hiệu quả thực tế và điều chỉnh cách sử dụng AI để đạt được lợi ích tối đa mà không làm giảm chất lượng công việc. -## [Evolution of Uber's Search Platform](https://www.uber.com/en-IN/blog/evolution-of-ubers-search-platform/) +## [Evolution of Uber's Search Platform](https://www.uber.com/in/en/blog/evolution-of-ubers-search-platform/) Bài viết này chia sẻ hành trình phát triển nền tảng tìm kiếm của Uber trong suốt 10 năm qua, từ một hệ thống đơn giản ban đầu đến một kiến trúc phức tạp phục vụ hàng triệu yêu cầu mỗi ngày. Đây là ví dụ điển hình cho việc thiết kế hệ thống có khả năng mở rộng theo thời gian. diff --git a/content/post/2025/08/05/index.md b/content/post/2025/08/05/index.md index 5878e0a..8eba0ff 100644 --- a/content/post/2025/08/05/index.md +++ b/content/post/2025/08/05/index.md @@ -57,13 +57,13 @@ Thay vì bắt đầu với các khái niệm phức tạp như class, inheritan Quan điểm này rất đáng suy ngẫm: "Các best practices trong lập trình không cần phải được học thuộc lòng từ sách giáo khoa; chúng có thể trở nên trực quan và rõ ràng thông qua việc tăng dần độ phức tạp của chương trình một cách hợp lý." Đây là một lời nhắc nhở rằng giáo dục lập trình nên tập trung vào việc xây dựng tư duy logic và khả năng giải quyết vấn đề, thay vì ép học sinh ghi nhớ các quy tắc mà họ chưa hiểu được bản chất. -## [How I Write Code That I Don't Hate Reading a Week Later](https://dev.to/resource_bunk_1077cab07da/how-i-write-code-that-i-dont-hate-reading-a-week-later-303b) +## ~~[How I Write Code That I Don't Hate Reading a Week Later](https://dev.to/resource_bunk_1077cab07da/how-i-write-code-that-i-dont-hate-reading-a-week-later-303b)~~ -Một bài viết thực tế và hữu ích về cách viết mã dễ đọc - một kỹ năng quan trọng mà nhiều lập trình viên thường bỏ qua. Tác giả chia sẻ triết lý cốt lõi: "Viết mã như thể bạn sẽ phải debug nó lúc 2 giờ sáng, trong trạng thái buồn ngủ, với deadline cận kề." +~~Một bài viết thực tế và hữu ích về cách viết mã dễ đọc - một kỹ năng quan trọng mà nhiều lập trình viên thường bỏ qua. Tác giả chia sẻ triết lý cốt lõi: "Viết mã như thể bạn sẽ phải debug nó lúc 2 giờ sáng, trong trạng thái buồn ngủ, với deadline cận kề."~~ -Các nguyên tắc chính bao gồm: đặt tên biến và hàm mô tả rõ ràng (ví dụ `parsed_user_profile_data` thay vì chỉ `d`), viết comment giải thích "tại sao" thay vì "cái gì", ưu tiên tính dễ đọc hơn là "sự thông minh" của mã. Thay vì viết những dòng mã phức tạp để khoe kỹ thuật, hãy tách chúng thành nhiều dòng dễ hiểu hơn. +~~Các nguyên tắc chính bao gồm: đặt tên biến và hàm mô tả rõ ràng (ví dụ `parsed_user_profile_data` thay vì chỉ `d`), viết comment giải thích "tại sao" thay vì "cái gì", ưu tiên tính dễ đọc hơn là "sự thông minh" của mã. Thay vì viết những dòng mã phức tạp để khoe kỹ thuật, hãy tách chúng thành nhiều dòng dễ hiểu hơn.~~ -Điểm hay nhất là nguyên tắc viết hàm nhỏ và tập trung: mỗi hàm chỉ làm một việc cụ thể với tên mô tả rõ ràng như `handleLoginFormSubmission()`. Khi mã trở nên rối rắm, hãy dừng lại và tái cấu trúc thay vì cứ thêm độ phức tạp. Tác giả cũng giới thiệu các công cụ hỗ trợ như Prettier, Black cho Python, và thậm chí ChatGPT để giúp tái cấu trúc mã. Đây là những lời khuyên đơn giản nhưng cực kỳ thực tế cho bất kỳ lập trình viên nào muốn code của mình dễ bảo trì hơn. +~~Điểm hay nhất là nguyên tắc viết hàm nhỏ và tập trung: mỗi hàm chỉ làm một việc cụ thể với tên mô tả rõ ràng như `handleLoginFormSubmission()`. Khi mã trở nên rối rắm, hãy dừng lại và tái cấu trúc thay vì cứ thêm độ phức tạp. Tác giả cũng giới thiệu các công cụ hỗ trợ như Prettier, Black cho Python, và thậm chí ChatGPT để giúp tái cấu trúc mã. Đây là những lời khuyên đơn giản nhưng cực kỳ thực tế cho bất kỳ lập trình viên nào muốn code của mình dễ bảo trì hơn.~~ ## [7 Habits That Quietly Made Me A 10x Developer (No, Not ChatGPT)](https://dev.to/abubakersiddique771/7-habits-that-quietly-made-me-a-10x-developer-no-not-chatgpt-13c4) diff --git a/content/post/2025/08/06/index.md b/content/post/2025/08/06/index.md index c40dc8d..e09bf98 100644 --- a/content/post/2025/08/06/index.md +++ b/content/post/2025/08/06/index.md @@ -27,7 +27,7 @@ Tác giả hướng dẫn chi tiết cách tạo thủ công cấu trúc thư m Điểm quan trọng nhất mà tác giả nhấn mạnh là "Sức mạnh của Git không đến từ sự phức tạp, mà từ tính đơn giản và thanh lịch trong thiết kế." Việc hiểu rõ kiến trúc bên trong này giúp các lập trình viên sử dụng Git hiệu quả hơn và giải quyết các vấn đề phức tạp một cách tự tin. -## [Why I'm Betting Against AI Agents in 2025 (Despite Building Them)](https://utkarshkanwat.com/writing/betting-against-agents/) +## [Why I'm Betting Against AI Agents in 2025 (Despite Building Them)](https://utkarshkanwat.com/writing/betting-against-agents) Utkarsh Kanwat, một lập trình viên đang xây dựng các tác nhân AI, đưa ra góc nhìn khá táo bạo khi "đặt cược chống lại" xu hướng AI agents trong năm 2025. Bài viết này không phải là lời phê phán mù quáng mà là phân tích thực tế về những thách thức cốt lõi mà AI agents đang đối mặt. diff --git a/content/post/2025/08/08/index.md b/content/post/2025/08/08/index.md index 239b431..13c7397 100644 --- a/content/post/2025/08/08/index.md +++ b/content/post/2025/08/08/index.md @@ -61,23 +61,23 @@ def download_all(urls): Đây hiện tại chỉ là "đề xuất thảo luận" nhưng thể hiện tầm nhìn tiền phong về việc đơn giản hóa lập trình đồng thời, giảm tải trí tuệ cho lập trình viên và cải thiện hiệu suất thông qua cơ chế điều phối virtual thread của runtime. -## [Six Principles for Production AI Agents](https://www.app.build/blog/six-principles-production-ai-agents) +## ~~[Six Principles for Production AI Agents](https://www.app.build/blog/six-principles-production-ai-agents)~~ -Với sự phát triển mạnh mẽ của các AI Agent trong thực tế, việc đưa chúng vào sản xuất đòi hỏi những nguyên tắc thiết kế chắc chắn. Bài viết này trình bày 6 nguyên tắc cốt lõi để xây dựng AI Agent hoạt động ổn định trong môi trường sản xuất: +~~Với sự phát triển mạnh mẽ của các AI Agent trong thực tế, việc đưa chúng vào sản xuất đòi hỏi những nguyên tắc thiết kế chắc chắn. Bài viết này trình bày 6 nguyên tắc cốt lõi để xây dựng AI Agent hoạt động ổn định trong môi trường sản xuất:~~ -**1. Đầu tư vào System Prompt**: Tập trung vào hướng dẫn rõ ràng, trực tiếp. Các mô hình hiện đại chỉ cần ngữ cảnh chi tiết và không mâu thuẫn, không cần các thủ thuật phức tạp. +~~**1. Đầu tư vào System Prompt**: Tập trung vào hướng dẫn rõ ràng, trực tiếp. Các mô hình hiện đại chỉ cần ngữ cảnh chi tiết và không mâu thuẫn, không cần các thủ thuật phức tạp.~~ -**2. Tách biệt Ngữ cảnh**: Cung cấp kiến thức ban đầu tối thiểu, cho phép các công cụ lấy thêm ngữ cảnh khi cần. Sử dụng "nén ngữ cảnh" để quản lý độ phức tạp. +~~**2. Tách biệt Ngữ cảnh**: Cung cấp kiến thức ban đầu tối thiểu, cho phép các công cụ lấy thêm ngữ cảnh khi cần. Sử dụng "nén ngữ cảnh" để quản lý độ phức tạp.~~ -**3. Thiết kế Công cụ Cẩn thận**: Tạo các công cụ tập trung, được kiểm thử kỹ lưỡng. Giới hạn số lượng công cụ với tham số rõ ràng và đảm bảo tính idempotency. +~~**3. Thiết kế Công cụ Cẩn thận**: Tạo các công cụ tập trung, được kiểm thử kỹ lưỡng. Giới hạn số lượng công cụ với tham số rõ ràng và đảm bảo tính idempotency.~~ -**4. Thiết kế Vòng phản hồi**: Sử dụng phương pháp actor-critic, cho phép tạo ra sáng tạo nhưng có kiểm chứng nghiêm ngặt. Bao gồm kiểm chứng chuyên biệt cho từng lĩnh vực. +~~**4. Thiết kế Vòng phản hồi**: Sử dụng phương pháp actor-critic, cho phép tạo ra sáng tạo nhưng có kiểm chứng nghiêm ngặt. Bao gồm kiểm chứng chuyên biệt cho từng lĩnh vực.~~ -**5. Phân tích Lỗi bằng LLM**: Sử dụng nhiều agent để phân tích log và quỹ đạo hoạt động, dùng LLM để xác định các khu vực cần cải thiện. +~~**5. Phân tích Lỗi bằng LLM**: Sử dụng nhiều agent để phân tích log và quỹ đạo hoạt động, dùng LLM để xác định các khu vực cần cải thiện.~~ -**6. Nhận diện Hành vi gây bực xúc như Lỗi hệ thống**: Hiểu rằng agent có thể "hack" các hướng dẫn. Debug thiết kế hệ thống trước khi đổ lỗi cho mô hình. +~~**6. Nhận diện Hành vi gây bực xúc như Lỗi hệ thống**: Hiểu rằng agent có thể "hack" các hướng dẫn. Debug thiết kế hệ thống trước khi đổ lỗi cho mô hình.~~ -Kết luận quan trọng: "Xây dựng AI Agent hiệu quả không phải là tìm giải pháp vạn năng... mà là thiết kế hệ thống và kỹ thuật phần mềm đúng đắn." +~~Kết luận quan trọng: "Xây dựng AI Agent hiệu quả không phải là tìm giải pháp vạn năng... mà là thiết kế hệ thống và kỹ thuật phần mềm đúng đắn."~~ ## [Working Effectively with AI Coding Tools like Claude Code](https://sajalsharma.com/posts/effective-ai-coding/) diff --git a/content/post/2025/08/31/index.md b/content/post/2025/08/31/index.md index 8fd9493..fbf1d42 100644 --- a/content/post/2025/08/31/index.md +++ b/content/post/2025/08/31/index.md @@ -5,7 +5,7 @@ tags: ["AI-Assisted", "Algorithms", "Performance", "Data Structures", "AI Tools" categories: ["Newsletter"] --- -*Chào các bạn, nay lại đến chu kỳ lười biếng của mình rồi (với thật ra thì dạo trước cày kha khá rồi nên nội dung còn lại cũng không nhiều), nên mình sẽ chuyển sang viết khoảng 1-2 bài/tuần tuỳ cảm hứng. Với tuần rồi mình cũng có được idol ✨🌙 của mình giới thiệu cuốn sách [Tìm mình trong thế giới hậu tuổi thơ](https://nhanam.vn/tim-minh-trong-the-gioi-hau-tuoi-tho-nha-nam), cũng khá hay, nếu hứng thú các bạn có thể tìm đọc. Còn giờ thì mời bạn thưởng thức Newsletter #51.* +*Chào các bạn, nay lại đến chu kỳ lười biếng của mình rồi (với thật ra thì dạo trước cày kha khá rồi nên nội dung còn lại cũng không nhiều), nên mình sẽ chuyển sang viết khoảng 1-2 bài/tuần tuỳ cảm hứng. Với tuần rồi mình cũng có được idol ✨🌙 của mình giới thiệu cuốn sách ~~[Tìm mình trong thế giới hậu tuổi thơ](https://nhanam.vn/tim-minh-trong-the-gioi-hau-tuoi-tho-nha-nam)~~, cũng khá hay, nếu hứng thú các bạn có thể tìm đọc. Còn giờ thì mời bạn thưởng thức Newsletter #51.* ## [p-fast trie: lexically ordered hash map](https://dotat.at/@/2025-08-04-p-fast-trie.html) diff --git a/content/post/2025/09/07/index.md b/content/post/2025/09/07/index.md index 1d8f45c..06e6996 100644 --- a/content/post/2025/09/07/index.md +++ b/content/post/2025/09/07/index.md @@ -61,7 +61,7 @@ if (!allGood) { Đây là một lời nhắc nhở quan trọng về việc hiểu rõ chi phí của các thao tác tưởng chừng như đơn giản trong lập trình Java. -## [Why do video games use kernel-mode anti-cheats?](https://vx-api.gitbook.io/vx-api/my-projects/why-do-video-games-use-kernel-mode-anti-cheats) +## [Why do video games use kernel-mode anti-cheats?](https://malwaresourcecode.com/home/my-projects/write-ups/why-do-video-games-use-kernel-mode-anti-cheats) Bài viết này giải thích lý do tại sao các trò chơi video sử dụng phần mềm chống gian lận ở chế độ kernel và cách thức hoạt động của chúng. @@ -166,7 +166,7 @@ Bài viết từ Ham Vocke là một tấm gương phản chiếu về những [Java interview questions and answers - Boosting your java career](https://enos.itcollege.ee/~jpoial/allalaadimised/reading/Java-Interview-Questions.pdf) -[Java Puzzlers - Traps, Pitfalls, and Corner Cases](https://github.com/shannonasmith/Java_books/blob/main/Java%20Puzzlers%20-%20Traps%2C%20Pitfalls%2C%20and%20Corner%20Cases%20(2005).pdf) +~~[Java Puzzlers - Traps, Pitfalls, and Corner Cases](https://github.com/shannonasmith/Java_books/blob/main/Java%20Puzzlers%20-%20Traps%2C%20Pitfalls%2C%20and%20Corner%20Cases%20(2005).pdf)~~ --- diff --git a/content/post/2025/09/10/index.md b/content/post/2025/09/10/index.md index 360f2dd..74abf5b 100644 --- a/content/post/2025/09/10/index.md +++ b/content/post/2025/09/10/index.md @@ -7,7 +7,7 @@ categories: ["Newsletter"] *~~Do dạo này tình hình tài chính cá nhân không tốt lắm, nên mình quyết định huỷ Claude Subscription, và do đó không còn dùng Claude Code nữa. Hiện tại mình đang dùng Roo Code với model Z.AI: GLM 4.5 Air từ OpenRouter.~~ Hi vọng bài viết đủ chất lượng làm hài lòng các bạn. Mời bạn thưởng thức Newsletter #54.* -## [Controlling the Rollout of Large-Scale Monorepo Changes](https://www.uber.com/en-IN/blog/controlling-the-rollout-of-large-scale-monorepo-changes/) +## [Controlling the Rollout of Large-Scale Monorepo Changes](https://www.uber.com/in/en/blog/controlling-the-rollout-of-large-scale-monorepo-changes/) Bài viết từ Uber chia sẻ kinh nghiệm thực tế về việc kiểm soát việc triển khai các thay đổi lớn trong hệ thống monorepo quy mô lớn, một thách thức phức tạp mà nhiều công ty công nghệ đối mặt khi phát triển phần mềm. diff --git a/content/post/2025/09/29/index.md b/content/post/2025/09/29/index.md index 46501d7..8f56c3d 100644 --- a/content/post/2025/09/29/index.md +++ b/content/post/2025/09/29/index.md @@ -39,21 +39,21 @@ Các preview features bao gồm Structured Concurrency (preview thứ 5) cho con - Compact headers và Generational GC: Tối ưu memory và performance. - JFR và AOT enhancements: Monitoring và compilation tốt hơn cho production. -## [Some Best Practices for Writing Readable Automation Tests](https://blog.scottlogic.com/2025/09/04/some-best-practices-for-writing-readable-automation-tests.html) +## ~~[Some Best Practices for Writing Readable Automation Tests](https://blog.scottlogic.com/2025/09/04/some-best-practices-for-writing-readable-automation-tests.html)~~ -Bài viết từ Scott Logic Blog hướng dẫn các best practices để viết automation tests dễ đọc, sử dụng Playwright với TypeScript. Đối với lập trình viên junior, automation testing giúp kiểm tra ứng dụng tự động, nhưng code test khó maintain nếu không readable, dẫn đến bugs ẩn hoặc team khó collaborate. +~~Bài viết từ Scott Logic Blog hướng dẫn các best practices để viết automation tests dễ đọc, sử dụng Playwright với TypeScript. Đối với lập trình viên junior, automation testing giúp kiểm tra ứng dụng tự động, nhưng code test khó maintain nếu không readable, dẫn đến bugs ẩn hoặc team khó collaborate.~~ -Về assertions, sử dụng expect() flexible như expect(response.status()).toBeOK() để handle codes thành công khác nhau (200, 201) mà không fail sớm, tập trung vào validations quan trọng. Với locators, ưu tiên .getByRole cho accessibility, dễ inspect qua DevTools bằng tab navigation, thay vì .getByTestID có thể confuse screen readers. Luôn advocate cho HTML roles đúng nếu thiếu. +~~Về assertions, sử dụng expect() flexible như expect(response.status()).toBeOK() để handle codes thành công khác nhau (200, 201) mà không fail sớm, tập trung vào validations quan trọng. Với locators, ưu tiên .getByRole cho accessibility, dễ inspect qua DevTools bằng tab navigation, thay vì .getByTestID có thể confuse screen readers. Luôn advocate cho HTML roles đúng nếu thiếu.~~ -Naming conventions: Sử dụng backticks cho test names động, ví dụ test(`should return a 400 when User Information is '${variable}'`), cho phép interpolation variables. Structure: Tag tests với {tag: 'THW-000'} để filter runs theo tickets, hoặc annotations cho links chi tiết theo Playwright docs, tăng traceability và longevity. +~~Naming conventions: Sử dụng backticks cho test names động, ví dụ test(`should return a 400 when User Information is '${variable}'`), cho phép interpolation variables. Structure: Tag tests với {tag: 'THW-000'} để filter runs theo tickets, hoặc annotations cho links chi tiết theo Playwright docs, tăng traceability và longevity.~~ -Những practices này giúp tests maintainable, accessible và team-friendly. Junior devs nên áp dụng để viết tests rõ ràng, giảm debugging time và cải thiện QA process. +~~Những practices này giúp tests maintainable, accessible và team-friendly. Junior devs nên áp dụng để viết tests rõ ràng, giảm debugging time và cải thiện QA process.~~ -**Điểm chính:** -- Assertions flexible: Sử dụng toBeOK() cho HTTP success codes đa dạng. -- Locators accessible: Ưu tiên .getByRole qua DevTools inspection. -- Dynamic naming: Backticks cho variable interpolation trong test titles. -- Tagging annotations: Lưu traceability với tickets cho better collaboration. +~~**Điểm chính:**~~ +~~- Assertions flexible: Sử dụng toBeOK() cho HTTP success codes đa dạng.~~ +~~- Locators accessible: Ưu tiên .getByRole qua DevTools inspection.~~ +~~- Dynamic naming: Backticks cho variable interpolation trong test titles.~~ +~~- Tagging annotations: Lưu traceability với tickets cho better collaboration.~~ ## [Tech Debt: Understanding its Business Impact - Optimism](https://www.optimism.io/blog/tech-debt-understanding-its-business-impact) @@ -70,7 +70,7 @@ Nguyên nhân chính bao gồm áp lực giao hàng nhanh chóng, thiếu kiểm - Phương pháp đo lường: metrics code như điểm phức tạp và tỷ lệ nợ. - Chiến lược: phân bổ sprint refactor, tích hợp CI/CD testing, và văn hóa coding bền vững. -## [Spec-Driven Development with AI: A New Approach and a Journey into the Past](https://foojay.io/today/spec-driven-development-with-ai-a-new-approach-and-a-journey-into-the-past) +## [Spec-Driven Development with AI: A New Approach and a Journey into the Past](https://foojay.io/today/spec-driven-development-with-ai-a-new-approach-and-a-journey-into-the-past/) Bài viết phê phán bản chất tập trung vào code trong phát triển phần mềm truyền thống, nơi yêu cầu thường trở nên lỗi thời, dẫn đến vấn đề bảo trì, đặc biệt khi AI tăng tốc coding mà không giải quyết nguyên nhân gốc rễ. Lấy cảm hứng từ Rational Unified Process (RUP) những năm 2000, tác giả Simon Martinelli đề xuất AI Unified Process (AIUP), một phương pháp dẫn dắt bởi yêu cầu, đặt nhu cầu kinh doanh làm nguồn sự thật duy nhất. @@ -134,7 +134,7 @@ Trade-off: Specialized excel ideal nhưng fail (panic/output sai) nếu dữ li - Specialized nhanh nhưng fragile (panic nếu domain thay đổi); generic robust cho production. - Kết luận: Std lib "unreasonably effective" cho pattern phổ biến, ưu tiên robustness hơn specialize. -## [How we made ClickHouse log queries 99.5% faster with resource fingerprinting](https://signoz.io/blog/query-performance-improvement) +## [How we made ClickHouse log queries 99.5% faster with resource fingerprinting](https://signoz.io/blog/query-performance-improvement/) Các kỹ sư SigNoz giải quyết truy vấn log chậm trong ClickHouse bằng cách xử lý lưu trữ dữ liệu không hiệu quả. Truyền thống, log từ các pod, service, môi trường đa dạng trộn lẫn qua các block lưu trữ, buộc database quét gần như toàn bộ dữ liệu cho filter mục tiêu, như theo namespace. Ví dụ, truy vấn namespace production trước đây kiểm tra 99.5% block, dẫn đến I/O cao và latency. diff --git a/content/post/2025/09/30/index.md b/content/post/2025/09/30/index.md index 3503a61..340f853 100644 --- a/content/post/2025/09/30/index.md +++ b/content/post/2025/09/30/index.md @@ -19,22 +19,22 @@ Sự xuất hiện của Agentic AI đang tạo ra những thay đổi đáng k - Cơ hội mới đang mở ra cho những người có thể kết hợp AI agent vào quy trình làm việc - Việc thích nghi sớm với xu hướng này có thể tạo ra lợi thế cạnh tranh trong sự nghiệp -## [Sự Phát Triển Của Garbage Collectors: Từ CMS Của Java Đến ZGC](https://codemia.io/blog/path/The-Evolution-of-Garbage-Collectors-From-Javas-CMS-to-ZGC-and-a-JVM-vs-Go-vs-Rust-Latency-Shootout) +## ~~[Sự Phát Triển Của Garbage Collectors: Từ CMS Của Java Đến ZGC](https://codemia.io/blog/path/The-Evolution-of-Garbage-Collectors-From-Javas-CMS-to-ZGC-and-a-JVM-vs-Go-vs-Rust-Latency-Shootout)~~ -Quản lý bộ nhớ là một chủ đề quan trọng trong lập trình, đặc biệt là trong các ngôn ngữ như Java, Go và Rust. Bài viết này khám phá sự tiến hóa của garbage collectors (GC) từ Concurrent Mark-Sweep (CMS) truyền thống của Java đến Z Garbage Collector (ZGC) hiện đại. +~~Quản lý bộ nhớ là một chủ đề quan trọng trong lập trình, đặc biệt là trong các ngôn ngữ như Java, Go và Rust. Bài viết này khám phá sự tiến hóa của garbage collectors (GC) từ Concurrent Mark-Sweep (CMS) truyền thống của Java đến Z Garbage Collector (ZGC) hiện đại.~~ -ZGC là một bước tiến lớn trong việc giảm thiểu thời gian tạm dừng của ứng dụng (pause times), với mục tiêu giữ thời gian tạm dừng dưới 10ms bất kể kích thước heap. Điều này tạo ra sự khác biệt lớn về hiệu suất so với các GC thế hệ trước như CMS. +~~ZGC là một bước tiến lớn trong việc giảm thiểu thời gian tạm dừng của ứng dụng (pause times), với mục tiêu giữ thời gian tạm dừng dưới 10ms bất kể kích thước heap. Điều này tạo ra sự khác biệt lớn về hiệu suất so với các GC thế hệ trước như CMS.~~ -Bài viết cũng so sánh hiệu suất về độ trễ giữa các nền tảng: -- JVM (với ZGC): Giảm đáng kể thời gian tạm dừng nhờ cải tiến trong thiết kế GC -- Go: GC hiệu quả với độ trễ thấp nhờ thuật toán concurrent và tri-color marking -- Rust: Tránh hoàn toàn GC nhờ mô hình ownership, mang lại hiệu suất dự đoán được mà không có chi phí GC +~~Bài viết cũng so sánh hiệu suất về độ trễ giữa các nền tảng:~~ +~~- JVM (với ZGC): Giảm đáng kể thời gian tạm dừng nhờ cải tiến trong thiết kế GC~~ +~~- Go: GC hiệu quả với độ trễ thấp nhờ thuật toán concurrent và tri-color marking~~ +~~- Rust: Tránh hoàn toàn GC nhờ mô hình ownership, mang lại hiệu suất dự đoán được mà không có chi phí GC~~ -**Điểm chính:** -- ZGC giúp giảm thời gian tạm dừng của ứng dụng xuống dưới 10ms -- Go sử dụng thuật toán marking hiệu quả để giữ độ trễ thấp -- Rust loại bỏ hoàn toàn nhu cầu GC nhờ ownership model -- Việc lựa chọn ngôn ngữ ảnh hưởng đáng kể đến hiệu suất và trải nghiệm người dùng +~~**Điểm chính:**~~ +~~- ZGC giúp giảm thời gian tạm dừng của ứng dụng xuống dưới 10ms~~ +~~- Go sử dụng thuật toán marking hiệu quả để giữ độ trễ thấp~~ +~~- Rust loại bỏ hoàn toàn nhu cầu GC nhờ ownership model~~ +~~- Việc lựa chọn ngôn ngữ ảnh hưởng đáng kể đến hiệu suất và trải nghiệm người dùng~~ ## [Mới Trong Java 25: Generational Shenandoah GC Không Còn Là Tính Năng Thử Nghiệm](https://theperfparlor.com/2025/09/14/new-in-java25-generational-shenandoah-gc-is-no-longer-experimental/) @@ -108,7 +108,7 @@ Việc sắp xếp giúp xác định các vấn đề như các mục nhập tr ## [Đánh Giá 26 Năm Thay Đổi Của Java](https://neilmadden.blog/2025/09/12/rating-26-years-of-java-changes/) -[Bài viết nhìn lại chặng đường 26 năm phát triển của ngôn ngữ lập trình Java, đánh giá các thay đổi quan trọng trong ngôn ngữ và thư viện cốt lõi. Tác giả bắt đầu từ Java 1.1.8 năm 1999 và điểm qua những cải tiến lớn như Bộ sưu tập (Collections Framework) ("4/10"), Generics ("8/10"), và java.util.concurrent ("10/10"). +Bài viết nhìn lại chặng đường 26 năm phát triển của ngôn ngữ lập trình Java, đánh giá các thay đổi quan trọng trong ngôn ngữ và thư viện cốt lõi. Tác giả bắt đầu từ Java 1.1.8 năm 1999 và điểm qua những cải tiến lớn như Bộ sưu tập (Collections Framework) ("4/10"), Generics ("8/10"), và java.util.concurrent ("10/10"). Một số tính năng bị chỉ trích như NIO ("0/10") và Streams ("1/10"), trong khi Records ("10/10") và UTF-8 mặc định ("10/10") được khen ngợi. Bài viết bao quát các phiên bản đến Java 25, nhấn mạnh xu hướng phát hành theo thời gian và các tính năng như pattern matching, virtual threads, và mã hóa hậu lượng tử. Mô-đun (Modules) nhận đánh giá rất tệ "-10/10". Bài viết kết thúc bằng lời mời gọi thảo luận về các đánh giá chủ quan này. diff --git a/content/post/2025/10/12/index.md b/content/post/2025/10/12/index.md index a8ce608..ff11cb8 100644 --- a/content/post/2025/10/12/index.md +++ b/content/post/2025/10/12/index.md @@ -7,7 +7,7 @@ categories: ["Newsletter"] *Mời bạn thưởng thức Newsletter #60.* -## [Diff Algorithms](https://flo.znkr.io/diff) +## [Diff Algorithms](https://flo.znkr.io/diff/) Thư viện diff mới được phát triển bằng Go mà tác giả giới thiệu trong bài viết hỗ trợ xử lý chuỗi tùy ý và định dạng đầu ra kiểu unified. Thư viện này thực hiện thuật toán Myers với tiền xử lý, các giải thuật heuristic và hậu xử lý nhằm cân bằng giữa hiệu suất và tính dễ đọc. Các tính năng chính bao gồm hỗ trợ các loại dữ liệu có thể so sánh và không thể so sánh, kết quả có cấu trúc và hành vi có thể tùy chỉnh thông qua các tùy chọn hàm số. @@ -29,7 +29,7 @@ Bài viết từ Netflix Tech Blog về việc xây dựng một nền tảng d - Tối ưu hóa hiệu suất cho các tác vụ đọc/ghi dữ liệu quy mô lớn - Giải pháp mở rộng theo chiều ngang để đáp ứng nhu cầu tăng trưởng dữ liệu -## [Vercel vs Cloudflare: Two Philosophies of Building for Developers](https://www.bharath.sh/writing/vercel-vs-cloudflare) +## [Vercel vs Cloudflare: Two Philosophies of Building for Developers](https://bharath.sh/writing/vercel-vs-cloudflare) Bài viết so sánh hai nền tảng phát triển web hàng đầu - Vercel và Cloudflare, với hai triết lý khác nhau trong việc phục vụ các nhà phát triển. Vercel, xuất phát từ nền tảng frontend và thiết kế, tập trung vào trải nghiệm phát triển liền mạch và tối ưu hóa tốc độ. Trong khi đó, Cloudflare với nền tảng hạ tầng của mình, nhấn mạnh vào tính minh bạch, kiểm soát và độ tin cậy. @@ -83,16 +83,16 @@ Bài viết khuyên tránh các "buồng vang tiêu cực" nơi việc than vãn - "Làm điều này thật khó về mặt xã hội. Ít nhất thì nó đòi hỏi phải trực tiếp thể hiện hình mẫu của điều tốt đẹp" - Dành năng lượng cho việc cải thiện hoặc rút lui, chứ không phải sự bi quan -## [My Productivity Rules](https://www.16elt.com/2025/10/08/studying-while-busy/) +## ~~[My Productivity Rules](https://www.16elt.com/2025/10/08/studying-while-busy/)~~ -Bài viết trình bày các mẹo thực tế để nâng cao hiệu suất học tập, nhấn mạnh vào việc lập kế hoạch, quản lý năng lượng, trung thực về nỗ lực, xem xét hàng ngày và giảm thiểu sự phân tâm. Bài viết cung cấp các quy tắc như chuẩn bị ngày mới vào buổi tối trước, nghỉ ngơi khi năng lượng thấp, trung thực về mức độ nỗ lực thực sự, phản chiếu lại tiến độ hàng ngày và loại bỏ các yếu tố gây xao nhãng như điện thoại hay các ứng dụng hấp dẫn. +~~Bài viết trình bày các mẹo thực tế để nâng cao hiệu suất học tập, nhấn mạnh vào việc lập kế hoạch, quản lý năng lượng, trung thực về nỗ lực, xem xét hàng ngày và giảm thiểu sự phân tâm. Bài viết cung cấp các quy tắc như chuẩn bị ngày mới vào buổi tối trước, nghỉ ngơi khi năng lượng thấp, trung thực về mức độ nỗ lực thực sự, phản chiếu lại tiến độ hàng ngày và loại bỏ các yếu tố gây xao nhãng như điện thoại hay các ứng dụng hấp dẫn.~~ -**Điểm chính:** -- Lập kế hoạch ngày mới vào buổi tối trước để tránh tình trạng trì hoãn buổi sáng -- Phối hợp cường độ học tập với mức năng lượng trong ngày -- Trung thực về mức độ nỗ lực thực sự mà bạn bỏ ra -- Phản chiếu lại tiến độ hàng ngày để cải thiện kế hoạch trong tương lai -- Loại bỏ các yếu tố gây xao nhãng bằng cách giữ các ứng dụng hấp dẫn ngoài tầm nhìn +~~**Điểm chính:**~~ +~~- Lập kế hoạch ngày mới vào buổi tối trước để tránh tình trạng trì hoãn buổi sáng~~ +~~- Phối hợp cường độ học tập với mức năng lượng trong ngày~~ +~~- Trung thực về mức độ nỗ lực thực sự mà bạn bỏ ra~~ +~~- Phản chiếu lại tiến độ hàng ngày để cải thiện kế hoạch trong tương lai~~ +~~- Loại bỏ các yếu tố gây xao nhãng bằng cách giữ các ứng dụng hấp dẫn ngoài tầm nhìn~~ ## Bonus: Vài ảnh thú vị đến từ [ByteByteGo](https://bytebytego.com/) *Nay mình đã gặp phải một số vấn đề khá phiền vì đã lưu quá nhiều ảnh sưu tầm trong bài viết. Cụ thể là mình mất hơn 17p để build site này khi dùng một máy tính khác :v* diff --git a/content/post/2025/11/25/index.md b/content/post/2025/11/25/index.md index 0b3f957..a0b5dfd 100644 --- a/content/post/2025/11/25/index.md +++ b/content/post/2025/11/25/index.md @@ -20,7 +20,7 @@ Khác biệt cốt lõi: RDBMS ưu tiên point lookups (O(log n)), OTF ưu tiên - Giảm IO qua file skipping dựa stats min/max, partition pruning. - Phù hợp analytical workloads lớn, không cần traditional secondary indexes. -## [What's The Deal With GitHub Spec Kit](https://den.dev/blog/github-spec-kit) +## [What's The Deal With GitHub Spec Kit](https://den.dev/blog/github-spec-kit/) Den Delimarsky giới thiệu GitHub Spec Kit, công cụ thực nghiệm cho Phát triển Dựa trên Đặc tả (SDD) sử dụng LLM để làm phần mềm ổn định hơn. Thay vì lập trình theo cảm hứng ngẫu nhiên, đặc tả (specs) định nghĩa rõ "cái gì" và "tại sao" (không chi tiết kỹ thuật), giúp LLM sinh code nhất quán, dễ lặp lại/ so sánh các triển khai (ví dụ Swift so Objective-C). @@ -47,7 +47,7 @@ Cách tiếp cận "no-bs" giúp developer junior nhanh chóng áp dụng AI: m - AI viết 100% code cho dự án thực tế, tăng productivity đáng kể. - Tránh overengineering; focus vào getting sh*t done qua natural conversation. -## [JIT: so you want to be faster than an interpreter on modern CPUs](https://www.pinaraf.info/2025/10/jit-so-you-want-to-be-faster-than-an-interpreter-on-modern-cpus) +## [JIT: so you want to be faster than an interpreter on modern CPUs](https://www.pinaraf.info/2025/10/jit-so-you-want-to-be-faster-than-an-interpreter-on-modern-cpus/) Pinaraf giải thích tại sao JIT compiler khó vượt interpreter trên CPU hiện đại (Zen 2+), nhờ OoO execution, superscalar và branch prediction. Ví dụ pseudo-code cho thấy CPU reorder instructions, speculate branches để tránh idle. Interpreter truyền thống dùng switch gây branch misprediction; optimized dùng computed gotos (như Python +15-20% speed, PostgreSQL) để linearize code, dễ predict hơn. diff --git a/content/post/2025/12/02/index.md b/content/post/2025/12/02/index.md index 273ab8c..e3eb77f 100644 --- a/content/post/2025/12/02/index.md +++ b/content/post/2025/12/02/index.md @@ -77,7 +77,7 @@ Predict H dễ hơn A (A cần multiple failures + bad E, trông như freak acci - Aviation/child/car examples minh họa constraints. - Systems theory: Leveson books, future topics RCA flaws. -## [Multi-Core By Default](https://www.rfleury.com/p/multi-core-by-default) +## [Multi-Core By Default](https://www.dgtlgrove.com/p/multi-core-by-default) Tác giả Ryan Fleury lập luận **multi-core nên là default** thay vì special-case trong single-core code, tận dụng core counts cao (8-64) hiện đại. Parallel for/job systems tốn overhead (kernel threads, subdivision, sync, debug khó, lifetime mgmt), scatter control flow. Thay vào đó, bootstrap threads chạy chung EntryPoint (như GPU shaders), dùng LaneIdx()/LaneCount()/LaneSync() phân bổ work uniform (LaneRange), barrier sync, atomic cho reduce (sum), narrow (if LaneIdx()==0) cho serial (I/O, printf). diff --git a/content/post/2025/12/03/index.md b/content/post/2025/12/03/index.md index 04cdbe1..abd4607 100644 --- a/content/post/2025/12/03/index.md +++ b/content/post/2025/12/03/index.md @@ -38,7 +38,7 @@ Leaders: Support scoping/chunking (commit/file), high-signal PR desc (intent/rat - Cognitive: Not bug-hunt, layered reasoning/collaboration. - Apply: Clear PRs, automate trivia, cognitive tooling. -## [The Great Software Quality Collapse: How We Normalized Catastrophe](https://techtrenches.substack.com/p/the-great-software-quality-collapse) +## [The Great Software Quality Collapse: How We Normalized Catastrophe](https://techtrenches.dev/p/the-great-software-quality-collapse) Bài viết từ Denis Stetskov trên Tech Trenches cảnh báo về **sự sụp đổ chất lượng phần mềm** đang diễn ra theo cấp số nhân. Các ứng dụng phổ biến như VS Code (leak 96GB RAM qua SSH), Microsoft Teams (100% CPU trên máy 32GB), Chrome (16GB cho 50 tabs), Discord (32GB khi share screen) hay Spotify (79GB trên macOS) giờ coi việc ngốn tài nguyên khủng là "bình thường". Các hệ thống lớn cũng thường xuyên hỏng: Windows 11 update làm tê liệt Start Menu, macOS Spotlight ghi 26TB dữ liệu qua đêm, iOS 18 crash khi reply tin nhắn, Android 15 ra mắt với 75+ bug nghiêm trọng. @@ -90,7 +90,7 @@ Nguyên tắc: Manager time >> Engineer time, explicit expectations (examples go - Principles: Automate, feedback loops, context-aware. - Outcome: High-velocity teams without gaming metrics. -## [Scripts I wrote that I use all the time](https://evanhahn.com/scripts-i-wrote-that-i-use/all-the-time) +## [Scripts I wrote that I use all the time](https://evanhahn.com/scripts-i-wrote-that-i-use-all-the-time/) Evan Hahn chia sẻ **hàng tá shell scripts cá nhân** từ dotfiles (10+ năm), dùng hàng ngày để boost productivity. Tất cả open source trên Codeberg, ngắn gọn, giải quyết pain points thường gặp. diff --git a/content/post/2025/12/08/index.md b/content/post/2025/12/08/index.md index e334310..aa6aace 100644 --- a/content/post/2025/12/08/index.md +++ b/content/post/2025/12/08/index.md @@ -7,7 +7,7 @@ categories: ["Newsletter"] *~~Dạo gần đây mấy model free trên OpenRouter đang không ổn định lắm, lúc dùng được lúc thì không. Sẵn còn vài $ credit trên đấy nên nay tranh thủ bào nốt rồi chuyển qua iFlow dùng hẳn (cho đến khi iFlow hết free :v).~~ Mời bạn thưởng thức Newsletter #65. ~~Bài viết này được thực hiện bởi [Claude Code](https://github.com/anthropics/claude-code), [Claude Code Router](https://github.com/musistudio/claude-code-router), [OpenRouter](https://openrouter.ai) & [Anthropic: Claude Sonnet 4.5](https://openrouter.ai/anthropic/claude-sonnet-4.5) (model 'xịn' nhe hehe)~~* -## [Scaling Engineering Teams: Lessons from Google, Facebook, and Netflix](https://greenido.wordpress.com/2025/09/25/scaling-engineering-teams-lessons-from-google-facebook-and-netflix) +## [Scaling Engineering Teams: Lessons from Google, Facebook, and Netflix](https://greenido.dev/2025/09/25/scaling-engineering-teams-lessons-from-google-facebook-and-netflix/) Bài viết chia sẻ kinh nghiệm quý báu từ tác giả với hơn 10 năm lãnh đạo kỹ thuật tại Google, Facebook và Netflix về cách mở rộng quy mô đội ngũ kỹ thuật từ 10 lên 1000+ engineers. Tác giả tập trung vào ba yếu tố then chốt: đặt mục tiêu với OKRs, xây dựng nền tảng chất lượng code, và nuôi dưỡng văn hóa làm việc. diff --git a/content/post/2025/12/10/index.md b/content/post/2025/12/10/index.md index 5f0c29d..df7fcb5 100644 --- a/content/post/2025/12/10/index.md +++ b/content/post/2025/12/10/index.md @@ -19,17 +19,17 @@ Slack Engineering chia sẻ cách họ đã cải thiện thời gian build từ - Thiết kế layering đúng cách - builder chỉ nên focus vào business logic, không nên tự implement parallelization - Kết quả cuối cùng: build nhanh hơn 6 lần, với best case chỉ 10 phút khi cached và parallelized -## [Things I Don't Like in Configuration Languages](https://medv.io/blog/things-i-dont-like-in-configuration-languages/) +## ~~[Things I Don't Like in Configuration Languages](https://medv.io/blog/things-i-dont-like-in-configuration-languages/)~~ -Anton Medvedev phân tích các vấn đề của nhiều ngôn ngữ configuration khác nhau và giải thích tại sao ông quyết định tạo ra ngôn ngữ MAML (Minimal And Markup Language) của riêng mình. Bài viết cung cấp cái nhìn sâu sắc về ưu và nhược điểm của từng ngôn ngữ configuration từ YAML, JSON đến các ngôn ngữ mới hơn. +~~Anton Medvedev phân tích các vấn đề của nhiều ngôn ngữ configuration khác nhau và giải thích tại sao ông quyết định tạo ra ngôn ngữ MAML (Minimal And Markup Language) của riêng mình. Bài viết cung cấp cái nhìn sâu sắc về ưu và nhược điểm của từng ngôn ngữ configuration từ YAML, JSON đến các ngôn ngữ mới hơn.~~ -**Điểm chính:** -- YAML có specification quá phức tạp và nhiều features không cần thiết -- JSON đã chiến thắng như một universal data-interchange format, nhưng có vài điểm nhỏ cần cải thiện -- TOML thiếu null value và cú pháp array of tables khó hiểu -- Nhiều ngôn ngữ như Pkl, CUE, Dhall thực chất là full programming languages, không chỉ là markup languages -- Tác giả tạo MAML dựa trên JSON với strict specification và tên gọi độc đáo -- MAML giữ tính readable của JSON nhưng thêm comments và multiline strings +~~**Điểm chính:**~~ +~~- YAML có specification quá phức tạp và nhiều features không cần thiết~~ +~~- JSON đã chiến thắng như một universal data-interchange format, nhưng có vài điểm nhỏ cần cải thiện~~ +~~- TOML thiếu null value và cú pháp array of tables khó hiểu~~ +~~- Nhiều ngôn ngữ như Pkl, CUE, Dhall thực chất là full programming languages, không chỉ là markup languages~~ +~~- Tác giả tạo MAML dựa trên JSON với strict specification và tên gọi độc đáo~~ +~~- MAML giữ tính readable của JSON nhưng thêm comments và multiline strings~~ ## [Here's What's Next in Agentic Coding](https://seconds0.substack.com/p/heres-whats-next-in-agentic-coding/) @@ -58,7 +58,7 @@ Octomind chia sẻ thực tế về việc sử dụng AI agents trong developme - AI tốt khi recreating well-known patterns nhưng kém với features phức tạp - Specialized agents trong well-defined boundaries có thể deliver value -## [Clarifying the Rule of Three in Refactoring](https://blog.thecodewhisperer.com/permalink/clarifying-the-rule-of-three-in-refactoring) +## [Clarifying the Rule of Three in Refactoring](https://blog.jbrains.ca/permalink/clarifying-the-rule-of-three-in-refactoring/) Bài viết giải thích rõ về Rule of Three trong refactoring - một heuristic gây nhiều tranh cãi. Tác giả phân tích mục đích thực sự của quy tắc này và đưa ra góc nhìn linh hoạt hơn về việc khi nào nên remove duplication. Bài viết giúp developer hiểu rõ hơn về trade-offs giữa việc extract abstractions sớm hay muộn. diff --git a/content/post/2025/12/14/index.md b/content/post/2025/12/14/index.md index 2a4e42b..f3941bd 100644 --- a/content/post/2025/12/14/index.md +++ b/content/post/2025/12/14/index.md @@ -35,7 +35,7 @@ Bài viết bao gồm các hình ảnh trực quan tương tác và ví dụ c - Hệ thống bias tự điều chỉnh cho các hệ thống viết khác nhau - Bao gồm các hình ảnh trực quan tương tác và ví dụ thực tế -## [Evolution and Scale of Uber's Delivery Search Platform](https://www.uber.com/en-IN/blog/evolution-and-scale-of-ubers-delivery-search-platform/) +## [Evolution and Scale of Uber's Delivery Search Platform](https://www.uber.com/in/en/blog/evolution-and-scale-of-ubers-delivery-search-platform/) Bài viết chi tiết về việc Uber Eats phát triển hệ thống semantic search để chuyển đổi cách người dùng tìm kiếm nhà hàng, món ăn, và các mặt hàng tạp hóa. Vượt ra ngoài việc matching lexical truyền thống, Uber triển khai kiến trúc neural network hai tháp sử dụng Qwen LLMs làm backbone, được huấn luyện với MRL (Matryoshka Representation Learning) cho các embedding dimensions linh hoạt. Hệ thống xử lý các truy vấn đa ngôn ngữ, từ đồng nghĩa, lỗi chính tả, và hiểu ngữ cảnh trên nhiều vertical. diff --git a/content/post/2025/12/20/index.md b/content/post/2025/12/20/index.md index a42e72a..396ea4f 100644 --- a/content/post/2025/12/20/index.md +++ b/content/post/2025/12/20/index.md @@ -85,7 +85,7 @@ AEAD là tiêu chuẩn mã hóa hiện đại, kết hợp mã hóa xác thực - Thư viện hiện đại như libsodium cung cấp API đơn giản, giảm thiểu lỗi - Các thuật toán phổ biến: AES256-GCM và ChaCha20-Poly1305 -## [Ceilometer: Khung đo lường thích ứng của Uber](https://www.uber.com/en-IN/blog/ceilometer-ubers-adaptive-benchmarking-framework/) +## [Ceilometer: Khung đo lường thích ứng của Uber](https://www.uber.com/in/en/blog/ceilometer-ubers-adaptive-benchmarking-framework/) Ceilometer là khung đo lường thích ứng của Uber, được thiết kế để hỗ trợ quyết định cơ sở hạ tầng và duy trì tiêu chuẩn hiệu suất cao. Hệ thống này có khả năng hoạt động trên nhiều khung kiểm thử khác nhau, bao gồm cả kiểm thử tổng hợp (synthetic), có trạng thái (stateful) và không trạng thái (stateless). @@ -274,7 +274,7 @@ Tác giả Anton Zhiyanov đã dựa trên khóa học Go concurrency của mìn - Hỗ trợ đọc trực tuyến và tải PDF - Phù hợp cho lập trình viên đã biết cơ bản Go -## [The State of AI Coding 2025 | Greptile](https://www.greptile.com/state-of-ai-coding-2025) +## [The State of AI Coding 2025 | Greptile](https://www.greptile.com/state-of-ai-coding) Báo cáo này là một nghiên cứu đa ngành về các xu hướng gần đây trong phát triển phần mềm AI, khám phá tốc độ đội kỹ sư, việc áp dụng công cụ AI, xu hướng tăng trưởng mô hình và điểm chuẩn hiệu suất. diff --git a/content/post/2025/12/27/index.md b/content/post/2025/12/27/index.md index 31c2050..b7ca8a1 100644 --- a/content/post/2025/12/27/index.md +++ b/content/post/2025/12/27/index.md @@ -5,7 +5,7 @@ tags: ["AI-Assisted"] categories: ["Newsletter"] --- -*~~Lâu rồi chưa pay 1 cái gì liên quan đến AI (từ thời Claude subscription để thử nghiệm Claude Code). Nay mới mua thử gói [GLM Coding Plan](https://z.ai/subscribe) của [Z.ai](https://z.ai) để trải nghiệm. Gói này hiện cho phép dùng model mới nhất của Z.ai là GLM-4.7. Từ nay mình sẽ tranh thủ dùng [Claude Code](https://claude.com/product/claude-code) với [Z.ai API](https://z.ai/model-api) để 'bào' cho xứng đáng số tiền bỏ ra^^.~~ Mời bạn thưởng thức Newsletter #74.* +*Lâu rồi chưa pay 1 cái gì liên quan đến AI (từ thời Claude subscription để thử nghiệm Claude Code). Nay mới mua thử gói [GLM Coding Plan](https://z.ai/subscribe) của [Z.ai](https://z.ai) để trải nghiệm. Gói này hiện cho phép dùng model mới nhất của Z.ai là GLM-4.7. Từ nay mình sẽ tranh thủ dùng [Claude Code](https://claude.com/product/claude-code) với [Z.ai API](https://z.ai/model-api) để 'bào' cho xứng đáng số tiền bỏ ra^^. Mời bạn thưởng thức Newsletter #74.* ## [Goodbye Microservices: From 100s of problem children to 1 superstar](https://www.twilio.com/en-us/blog/developers/best-practices/goodbye-microservices) @@ -104,7 +104,7 @@ Tác giả worry về decline trong consideration, không phải tools. Design v - Code essential cho execution, không all - Worry decline consideration, không tools -## [How we saved 70% CPU and 60% memory in Refinery]((https://www.honeycomb.io/blog/how-we-saved-70-cpu-60-memory-refinery) +## [How we saved 70% CPU and 60% memory in Refinery](https://www.honeycomb.io/blog/how-we-saved-70-cpu-60-memory-refinery) Honeycomb optimize Refinery telemetry pipeline: giảm 70% CPU và 60% memory. Root cause là dynamic attributes calculation - parse attributes nhiều lần, create intermediate allocations inefficiencies. @@ -120,7 +120,7 @@ Profiling trước khi optimize critical - find bottlenecks first. Trade-off: co - Profiling trước khi optimize - Trade-off: phức tạp hơn nhưng worth it -## [From Junior to Senior: 7 API Design Patterns That Scale]((https://designgurus.substack.com/p/from-junior-to-senior-7-api-design) +## [From Junior to Senior: 7 API Design Patterns That Scale](https://designgurus.substack.com/p/from-junior-to-senior-7-api-design) 7 architectural decisions cho scalable APIs - khác biệt junior/senior. Junior focus logic, senior focus system communication. API là critical component của distributed systems. diff --git a/content/post/2026/02/02/index.md b/content/post/2026/02/02/index.md index 4ee3855..c82bc89 100644 --- a/content/post/2026/02/02/index.md +++ b/content/post/2026/02/02/index.md @@ -17,7 +17,7 @@ Cốt lõi của phương pháp là định lượng hóa hình dạng của m Bài viết cũng đề cập đến các tối ưu hóa hiệu năng quan trọng như sử dụng k-d trees để tăng tốc độ tra cứu ký tự, caching với quantization để giảm tải tính toán, và chuyển xử lý sang GPU để đạt 60 FPS trên mobile. Đây là một bài viết kỹ thuật thú vị với nhiều ý tưởng có thể áp dụng cho các vấn đề khác về xử lý hình dạng đa chiều. -## [From Bare Metal to Containers: A Developer's Guide to Execution Environments](https://buildsoftwaresystems.com/post/guide-to-execution-environments) +## [From Bare Metal to Containers: A Developer's Guide to Execution Environments](https://buildsoftwaresystems.com/post/guide-to-execution-environments/) Bài viết này cung cấp cái nhìn toàn diện về các loại môi trường thực thi (execution environments) mà nhà phát triển phần mềm thường gặp, từ physical machine cho đến containers và virtual environments. Mỗi loại môi trường được trình bày rõ ràng với cơ chế cách ly, ưu nhược điểm và trường hợp sử dụng phù hợp. diff --git a/content/post/2026/02/03/index.md b/content/post/2026/02/03/index.md index 0bd01c8..3077e84 100644 --- a/content/post/2026/02/03/index.md +++ b/content/post/2026/02/03/index.md @@ -7,7 +7,7 @@ categories: ["Newsletter"] *Mời bạn thưởng thức Newsletter #80.* -## [Thư Mục Kỹ Năng Của Tác Nhân](https://skills.sh/) +## [Thư Mục Kỹ Năng Của Tác Nhân](https://www.skills.sh/) Skills.sh là một hệ sinh thái mở dành cho các kỹ năng của tác nhân trí tuệ nhân tạo, nơi tập hợp hàng ngàn kỹ năng có thể tái sử dụng để nâng cao khả năng của các tác nhân trí tuệ nhân tạo. Mỗi kỹ năng là một khả năng chuyên biệt có thể được cài đặt chỉ với một lệnh duy nhất, giúp các tác nhân trí tuệ nhân tạo tiếp cận các kiến thức quy trình chuẩn hóa. diff --git a/content/post/2026/02/24/index.md b/content/post/2026/02/24/index.md index 37ce752..3fdf23c 100644 --- a/content/post/2026/02/24/index.md +++ b/content/post/2026/02/24/index.md @@ -59,7 +59,7 @@ Thứ ba, thực thi tính duy nhất với chỉ mục băm. Khi lưu trữ cá - Chỉ mục băm (32 MB) nhỏ hơn 5 lần so với chỉ mục B-Tree (154 MB) cho URL - Hạn chế: không thể tham chiếu bởi khóa ngoại và không hỗ trợ `ON CONFLICT DO UPDATE` -## [Software engineering when machine writes the code](https://www.shayon.dev/post/2026/19/software-engineering-when-the-machine-writes-code) +## [Software engineering when machine writes the code](https://www.shayon.dev/post/2026/19/software-engineering-when-the-machine-writes-code/) Shayon Majumdar đã chia sẻ suy nghĩ sâu sắc về tương lai của kỹ thuật phần mềm khi máy móc có thể viết mã. Bài viết bắt đầu bằng việc nhắc lại cuộc khủng hoảng phần mềm năm 1968, khi các nhà khoa học máy tính nhận ra rằng máy tính đã trở nên quá mạnh đối với các phương pháp lập trình hiện có. Ngày nay, chúng ta đối mặt với sự gián đoạn tương tự nhưng theo hướng ngược lại: máy móc có thể viết mã tốt hơn và nhanh hơn con người. diff --git a/content/post/2026/02/28/index.md b/content/post/2026/02/28/index.md index 8413399..0b57da5 100644 --- a/content/post/2026/02/28/index.md +++ b/content/post/2026/02/28/index.md @@ -94,7 +94,7 @@ Khuyến nghị và thực hành tốt nhất: Ưu tiên transaction đơn datab - Giới hạn shard: quá nhiều shard làm giảm hiệu suất do tổng hợp - Transaction cục bộ: ưu tiên single-DB transaction thay vì distributed -## [Go Made Me Fast, Rust Made Me Care, AWS Made Me Pay](https://dev.to/art_light/go-made-me-fast-rust-made-me-care-aws-made-me-pay-2f82) +## [Go Made Me Fast, Rust Made Me Care, AWS Made Me Pay](https://dev.to/tirixa-hub/go-made-me-fast-rust-made-me-care-aws-made-me-pay-2f82) Bài viết thảo luận về lựa chọn ngôn ngữ lập trình cho kiến trúc cloud, tập trung vào sự đánh đổi giữa Go và Rust khi hệ thống phát triển từ "hợp lý" thành "đắt tiền". Tác giả chia sẻ kinh nghiệm thực tế về sự khác biệt giữa hai ngôn ngữ trong bối cảnh AWS, nơi chi phí được tính theo chu kỳ CPU, lượng bộ nhớ và lưu lượng mạng. @@ -109,7 +109,7 @@ AWS đóng vai trò như thực tế khắc nghiệt - nó không quan tâm đ - Hybrid approach: Go cho API/business logic, Rust cho high-throughput data paths - Sweet spot: Rust tối ưu phần nhạy cảm hiệu năng để giảm hóa đơn AWS -## [The Cloud Is Not Your Computer: Why Go and Rust Developers Secretly Miss the Monolith](https://dev.to/art_light/the-cloud-is-not-your-computer-why-go-and-rust-developers-secretly-miss-the-monolith-594c) +## [The Cloud Is Not Your Computer: Why Go and Rust Developers Secretly Miss the Monolith](https://dev.to/tirixa-hub/the-cloud-is-not-your-computer-why-go-and-rust-developers-secretly-miss-the-monolith-594c) Bài viết phân tích sự thật rằng đám mây không phải là máy tính của bạn mà là một cuộc đàm phán phức tạp. Tác giả trải nghiệm qua nhiều nền tảng từ bare metal đến AWS và nhận ra rằng dù viết code Go hay Rust cảm thấy kiểm soát được thì khi triển khai lên cloud, mọi thứ trở nên bất định. Sự khác biệt chính giữa cloud và máy tính cục bộ là: máy tính cục bộ cho cảm giác kiểm soát trực tiếp, còn cloud khiến bạn đang thuê xác suất chứ không phải chạy phần mềm. diff --git a/content/post/2026/03/20/index.md b/content/post/2026/03/20/index.md index 73968b6..2b796b5 100644 --- a/content/post/2026/03/20/index.md +++ b/content/post/2026/03/20/index.md @@ -7,18 +7,18 @@ categories: ["Newsletter"] *Mời bạn thưởng thức Newsletter #92.* -## [Tôi đã trở nên giỏi xử lý sự cố như thế nào](https://tomasztomczyk.com/blog/2026/how-i-became-good-at-leading-incidents/) +## ~~[Tôi đã trở nên giỏi xử lý sự cố như thế nào](https://tomasztomczyk.com/blog/2026/how-i-became-good-at-leading-incidents/)~~ -Tomasz Tomczyk chia sẻ những bài học từ hơn 100 sự cố mà anh đã dẫn dắt trong suốt sự nghiệp, nhấn mạnh rằng quản lý sự cố không chỉ là kỹ năng kỹ thuật mà còn là tư duy phân tích và khả năng lãnh đạo dưới áp lực. Anh cho rằng mỗi sự cố là cơ hội để hiểu sâu hơn về hệ thống và xây dựng văn hóa học hỏi từ thất bại. +~~Tomasz Tomczyk chia sẻ những bài học từ hơn 100 sự cố mà anh đã dẫn dắt trong suốt sự nghiệp, nhấn mạnh rằng quản lý sự cố không chỉ là kỹ năng kỹ thuật mà còn là tư duy phân tích và khả năng lãnh đạo dưới áp lực. Anh cho rằng mỗi sự cố là cơ hội để hiểu sâu hơn về hệ thống và xây dựng văn hóa học hỏi từ thất bại.~~ -Để xử lý sự cố hiệu quả, bạn cần nắm vững quy trình triển khai và toàn bộ ngăn xếp công nghệ từ DNS đến tầng ứng dụng, đồng thời thiết lập hệ thống giám sát toàn diện. Khi xảy ra sự cố, hãy phân công điều tra theo từng chủ đề cụ thể, đưa ra quyết định dứt khoát khi cần vô hiệu hóa tính năng, và cung cấp thông tin cập nhật kịp thời cho các bên liên quan. Việc lập tài liệu các mẫu lỗi phổ biến vào runbook và thực hành qua các bài tập chaos engineering cũng giúp đội nhóm chuẩn bị tốt hơn cho các tình huống thực tế. +~~Để xử lý sự cố hiệu quả, bạn cần nắm vững quy trình triển khai và toàn bộ ngăn xếp công nghệ từ DNS đến tầng ứng dụng, đồng thời thiết lập hệ thống giám sát toàn diện. Khi xảy ra sự cố, hãy phân công điều tra theo từng chủ đề cụ thể, đưa ra quyết định dứt khoát khi cần vô hiệu hóa tính năng, và cung cấp thông tin cập nhật kịp thời cho các bên liên quan. Việc lập tài liệu các mẫu lỗi phổ biến vào runbook và thực hành qua các bài tập chaos engineering cũng giúp đội nhóm chuẩn bị tốt hơn cho các tình huống thực tế.~~ -**Điểm chính:** -- Nắm vững quy trình triển khai và toàn bộ ngăn xếp công nghệ để nhanh chóng xác định nguyên nhân sự cố -- Đọc hiểu stack trace và sử dụng công cụ theo dõi lỗi như Sentry để điều tra sâu hơn -- Xây dựng văn hóa tâm lý an toàn để thất bại trở thành cơ hội học hỏi -- Phân công điều tra chiến lược và đưa ra quyết định dứt khoát trong thời điểm căng thẳng -- Lập tài liệu runbook và thực hành game day để chuẩn bị cho các sự cố thực tế +~~**Điểm chính:**~~ +~~- Nắm vững quy trình triển khai và toàn bộ ngăn xếp công nghệ để nhanh chóng xác định nguyên nhân sự cố~~ +~~- Đọc hiểu stack trace và sử dụng công cụ theo dõi lỗi như Sentry để điều tra sâu hơn~~ +~~- Xây dựng văn hóa tâm lý an toàn để thất bại trở thành cơ hội học hỏi~~ +~~- Phân công điều tra chiến lược và đưa ra quyết định dứt khoát trong thời điểm căng thẳng~~ +~~- Lập tài liệu runbook và thực hành game day để chuẩn bị cho các sự cố thực tế~~ ## [Decision Trees: Sức mạnh bất ngờ của các quy tắc quyết định lồng nhau](https://mlu-explain.github.io/decision-tree/) diff --git a/content/post/2026/04/02/index.md b/content/post/2026/04/02/index.md index 0d392c2..99c19ac 100644 --- a/content/post/2026/04/02/index.md +++ b/content/post/2026/04/02/index.md @@ -21,7 +21,7 @@ Haseeb Qureshi đã phân tích chi tiết mã nguồn của Claude Code CLI (kh - Cờ tính năng biên dịch (Bun) loại bỏ mã chết, gợi ý các tính năng chưa phát hành như `VOICE_MODE` và `KAIROS` - Luận điểm cốt lõi: mô hình AI có thể thay thế được, nhưng "harness" (khung vận hành) mới là nơi chứa đựng kinh nghiệm thực chiến -## [AI sẽ đẩy nhanh nợ kỹ thuật của bạn](https://securosis.com/ai/ai-will-accelerate-your-tech-debt) +## [AI sẽ đẩy nhanh nợ kỹ thuật của bạn](https://securosis.com/ai/ai-will-accelerate-your-tech-debt/) Chris Farris lập luận rằng đầu tư vào AI sẽ làm trầm trọng thêm vấn đề nợ kỹ thuật đối với các tổ chức chưa sẵn sàng giải quyết những thách thức hạ tầng nền tảng. Nhiều tổ chức đang vận hành trong tình trạng bấp bênh do nhiều năm ưu tiên phát triển tính năng thay vì xây dựng kiến trúc bền vững, rơi vào vòng xoáy mà việc xử lý sự cố liên tục ngốn hết nguồn lực lẽ ra dành cho việc trả nợ kỹ thuật.