[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"site-settings":3,"site-menu":10,"home-posts":21,"home-categories":496},{"siteName":4,"siteDescription":5,"contactEmail":6,"phone":7,"githubUrl":8,"facebookUrl":9},"vdhoangson.com","Ghi chép về lập trình, hệ thống và những điều học được trên đường làm sản phẩm.","contact@vdhoangson.com","+84 387 324 112","https:\u002F\u002Fgithub.com\u002Fvdhoangson","",{"items":11},[12,15,18],{"href":13,"label":14},"\u002F","Mới nhất",{"href":16,"label":17},"\u002Fcategory\u002Fdich-vu","Dịch vụ",{"href":19,"label":20},"\u002Fabout","Về tôi",{"items":22,"total":495,"page":48,"pageSize":282},[23,54,98,134,183,216,254,290,322,355,380,416,459],{"id":24,"wordpressId":25,"title":26,"slug":27,"excerpt":28,"contentHtml":29,"status":30,"authorName":31,"seoTitle":26,"seoDescription":28,"featuredMediaId":32,"featuredMedia":33,"categories":45,"tags":51,"publishedAt":52,"createdAt":52,"updatedAt":53},"9179a429-6f33-48a2-aa3b-94b94f143583",16377,"Sau năm 35: Kinh nghiệm có còn là thứ làm bạn hãnh diện?","sau-nam-35-kinh-nghiem-co-con-la-thu-lam-ban-hanh-dien","Dành cho những bạn đã, đang, và sẽ bước trên con đường của một lập trình viên, và sau đó có thể bạn sẽ thành một người quản lý, người lãnh đạo. Năm 18, bạn tự hào thi đậu vào một trường đại học, ba mẹ tự hào vì bạn. Năm 22, bạn tự hào […]","\n\u003Cp class=\"wp-block-paragraph\">Dành cho những bạn đã, đang, và sẽ bước trên con đường của một lập trình viên, và sau đó có thể bạn sẽ thành một người quản lý, người lãnh đạo.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Năm 18, bạn tự hào thi đậu vào một trường đại học, ba mẹ tự hào vì bạn.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Năm 22, bạn tự hào cầm tấm bằng đại học trên tay, thiên hạ đang chờ đợi bạn.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Năm 25, sau vài năm bôn tẩu giang hồ, bạn tự hào đã trãi qua nhiều cạm bẫy, xử lý được nhiều vụ án khó khăn, tiêu diệt được kha khá kẻ địch. Thiên hạ trong tay ta.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Những năm sau nữa…\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Bạn lội qua bao ngọn núi, trèo qua bao con sông cùng với tổ đội của mình. Bạn đã chiến đấu hết mình vì dự án, vì đồng đội, vì công ty. Bạn thấy mình thật là đặc biệt, mình tự hào vì đã làm được nhiều thứ.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Bùm chíu…… Công ty tuyển thêm vài cô cậu 2k vào, như những năm trước thôi, có người đến thì có người đi. Nhưng mà là năm 35, câu chuyện mới bắt đầu.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Bạn hãy sợ nó, thật sự sợ. Vì sao? Để tôi nói cho bạn biết.\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Em trai 22 tuổi: nó trẻ, nó khỏe, ngày nó cày 14 tiếng, nó nói tiếng anh như tiếng mẹ đẻ, nó cập nhật công nghệ mới mỗi giờ, nó học mỗi phút, cái gì nó cũng làm, nó không vướng bận vợ con. Lương nó đòi 15 triệu.\u003C\u002Fli>\n\n\n\n\u003Cli>Bạn 35 tuổi: 13 năm kinh nghiệm, có thể 10 năm làm 1 việc lặp lại, thoái hóa cột sống, đau mỏi vai gáy, có khi là Gout man, bập bẹ vài từ tiếng anh, cập nhật công nghệ thông qua báo đài, đọc tiêu đề là chính, tự tin rằng mình biết, mình hiểu. Chiều 5h gập máy chạy về đón con, mệt lã sau 8h tối, nằm lướt tiktok giật giật. Lương đòi 40 triệu.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cblockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n\u003Cp class=\"wp-block-paragraph\">Em trai 22 chạy nhanh vì chưa biết sợ, bạn chạy chậm vì đã từng té đau. Nhưng nếu \u003Cstrong>bạn 35 vẫn sợ đến mức đứng yên\u003C\u002Fstrong>, thì bạn thua nó thật\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Kinh nghiệm của bạn là bất biến?\u003C\u002Fh2>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>AI bây giờ đã gần như có thể code được những gì mà bạn đã code hơn 10 năm qua. \u003C\u002Fli>\n\n\n\n\u003Cli>Bạn hãnh diện về trang web thương mại điện tử mình đã dành 5 năm phát triển, AI nó làm trong vài ngày, vài tuần. \u003C\u002Fli>\n\n\n\n\u003Cli>Bạn hãnh diện với những thuật toán hay logic mà cả đội mất vài ngày thậm chí 1 tuần để chửi nhau, AI nó làm trong vài phút.\u003C\u002Fli>\n\n\n\n\u003Cli>Bạn hãnh diện về UX\u002FUI mình chăm chút từng pixel, test từng chiếc điện thoại, AI nó sẽ chỉ bạn như thế nào là nghệ thuật trãi nghiệm người dùng.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Thời đại bùng nổ AI, cứ cho là cách đây 5 năm. Bùm…. kinh nghiệm bạn về 0. Bỏ cái niềm tự hào 13 năm kinh nghiệm của bạn đi, mà vốn dĩ có phải là 13 năm đâu, bạn đã làm 1 việc lặp đi lặp lại trong 8 đến 10 năm rồi.\u003C\u002Fp>\n\n\n\n\u003Cblockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>AI không giết bạn.\u003Cbr \u002F>Chính sự tự mãn của bạn mới giết bạn.\u003C\u002Fstrong>\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">AI chỉ làm lộ ra bạn đã lặp lại một công việc quá lâu mà không chịu mở rộng tư duy.\u003C\u002Fp>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Công ty có dựa vào kinh nghiệm của bạn mãi?\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Công ty là một cỗ máy in tiền, không phải viện dưỡng lão. 35, 40, 45 đừng ảo tưởng sức mạnh.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Công ty trả lương cho giá trị hôm nay, sự nỗ lực cho ngày mai, chứ không phải ký ức huy hoàng của bạn 10 năm trước.\u003C\u002Fp>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Làm cách nào để bạn không bị nó đá đít?\u003C\u002Fh2>\n\n\n\n\u003Cblockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n\u003Cp class=\"wp-block-paragraph\">Phải làm sao cho thằng em 22 tuổi nó \u003Cstrong>NỂ\u003C\u002Fstrong>.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Với tuổi đời gần 60, cụ thể là 34, tôi thì suy nghĩ như thế này.\u003C\u002Fp>\n\n\n\n\u003Ch4 class=\"wp-block-heading\">1. Đẩy thuyền theo gió\u003C\u002Fh4>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Em trai 22 tuổi: \u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Nó đang bị chôn trong một đống kiến thức, công nghệ, thông tin và loay hoay vì thử cái này chưa xong đã phải coi cái khác.\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Bạn hãy là người đồng hành, cùng nhau tìm hiểu, học tập. Với kinh nghiệm hơn 10 năm, bạn sẽ cần học sâu hơn, hãy là tảng băng chìm. Bổ sung những phần mà thằng ku chưa tìm tới.\u003C\u002Fli>\n\n\n\n\u003Cli>Nó cày 14 tiếng vì nó chưa biết chỗ nào quan trọng, bạn xử lý những việc quan trọng trong 8 tiếng.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\n\n\n\u003Cli>Nó chạy theo công nghệ, nhanh đó, nhưng chưa chắc đã đúng hướng.\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Bạn cần vạch ra con đường, nói thẳng ra là yêu cầu dự án và khách hàng mong muốn. Hãy cùng thảo luận, phân tích, lựa chọn những gì cần học ngay bây giờ, những gì cần chuẩn bị cho dự án sắp tới (nếu có dự án).\u003C\u002Fli>\n\n\n\n\u003Cli>Nếu bạn đã đi chậm mà còn đi sai thì vấn đề là do bạn, không ai cứu được đâu.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\n\n\n\u003Cli>Nó chưa vợ chưa con, nên nó chưa biết cách quán xuyến, chăm sóc, lo lắng.\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Hãy hướng dẫn nó cách quản lý scope, quản lý rủi ro, lắng nghe đồng đội.\u003C\u002Fli>\n\n\n\n\u003Cli>Hãy cho nó biết ta bình tĩnh, nhẹ nhàng, dứt khoát trong trao đổi với khách hàng như thế nào.\u003C\u002Fli>\n\n\n\n\u003Cli>Học tiếng nước ngoài, nước nào cũng được, đừng để mình nằm ngoài cuộc hội thoại.\u003C\u002Fli>\n\n\n\n\u003Cli>Sau 35, bạn sống sót được là nhờ \u003Cem>não\u003C\u002Fem>, trải nghiệm xã hội, và phán đoán — thứ mà AI cũng chỉ đang bắt chước.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cblockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n\u003Cp class=\"wp-block-paragraph\">Sau năm 35, bạn không còn thắng bằng tốc độ.\u003Cbr \u002F>Bạn thắng bằng tầm nhìn.\u003Cbr \u002F>Và tầm nhìn thì không AI nào copy được — trừ khi bạn không có gì để nó copy.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\n\n\n\u003Ch4 class=\"wp-block-heading\">2. Bão tố tàn phá.\u003C\u002Fh4>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Em trai 22 tuổi:\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Luôn muốn áp dụng những gì mà nó mới tìm hiểu được, muốn thử công nghệ mới.\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Dẹp đi, dự án đang hoạt động, cần gì phải thay đổi.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\n\n\n\u003Cli>Thằng ku không biết phải bắt đầu từ đâu\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Tự bạn xây mới, giấu kỹ những phần quan trọng đi, chỉ cho nó làm những việc râu ria thôi. Nó không thể làm được việc giống như bạn.\u003C\u002Fli>\n\n\n\n\u003Cli>Dùng những kiến thức bạn học trong hơn 10  năm qua, gạt bỏ những cái mới, cố tâng bốc những điểm mạnh của công nghệ lõi 10 năm, nó sẽ hoang mang không biết đâu là thực đâu là hư vô.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\n\n\n\u003Cli>Thằng ku có chí tiến thủ\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Dập tắt nó ngay, đánh giá thấp hoặc vừa đủ để nó chỉ hoàn thành công việc được bạn giao cho (nếu bạn có đủ thẩm quyền)\u003C\u002Fli>\n\n\n\n\u003Cli>Cho nó thấy cái ghế của bạn là của bạn, đừng dòm ngó. Cố gắng giữ ghế đến khi về hưu là được.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cblockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n\u003Cp class=\"wp-block-paragraph\">\u003Cem>\u003Cstrong>Thà ta phụ người chứ không để người phụ ta\u003C\u002Fstrong>\u003C\u002Fem>\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Túm cái váy lại, bạn lựa chọn dùng kinh nghiệm của mình để làm mái chèo, làm chân vịt để đẩy con thuyền chở tụi nhỏ tiến về phía trước. Hoặc dùng kinh nghiệm đó biến nó thành bão, nhấn chìm những con thuyền nào đi ngang qua, kéo tụi nhỏ xuống đại dương sâu thẳm. Tùy bạn.\u003C\u002Fp>\n","published","vdhoangson@gmail.com","c6d2d34f-8917-42d8-890e-8bd74796b720",{"id":32,"wordpressId":34,"filename":35,"storageKey":36,"sourceUrl":37,"mimeType":38,"altText":9,"caption":39,"width":40,"height":41,"createdAt":42,"updatedAt":43,"url":44},16399,"sau-nam-35.png","wordpress\u002F2025\u002F11\u002Fsau-nam-35.png","https:\u002F\u002Fvdhoangson.com\u002Fwp-content\u002Fuploads\u002F2025\u002F11\u002Fsau-nam-35.png","image\u002Fpng",null,1536,1024,"2025-11-24T05:58:39.000Z","2026-10-15T04:59:31.204Z","\u002Fuploads\u002Fwordpress\u002F2025\u002F11\u002Fsau-nam-35.png",[46],{"id":47,"wordpressId":48,"name":49,"slug":50,"parentId":39},"dee3d699-7f78-418f-b360-ba42fccf3ddc",1,"Uncategorized","uncategorized",[],"2025-11-24T06:01:26.000Z","2025-12-02T17:45:07.000Z",{"id":55,"wordpressId":56,"title":57,"slug":58,"excerpt":59,"contentHtml":60,"status":30,"authorName":31,"seoTitle":57,"seoDescription":59,"featuredMediaId":61,"featuredMedia":62,"categories":69,"tags":80,"publishedAt":96,"createdAt":96,"updatedAt":97},"dc2b66ed-ac04-4c59-be48-d87417fd8242",16379,"Laravel Model: create() và insert() có giống nhau?","laravel-model-create-va-insert-co-giong-nhau","Trong môn phái Laravel, có hai tuyệt kỹ khiến bao lập trình giả tranh luận không ngừng: create và insert. Nghe thì tưởng đồng môn, nhưng thực ra hai chiêu này đi hai con đường nội công khác biệt, dùng sai hoàn cảnh là tự đâm vào chân mình như chơi. Hôm nay, để tránh […]","\n\u003Cp class=\"wp-block-paragraph\">Trong môn phái Laravel, có hai tuyệt kỹ khiến bao lập trình giả tranh luận không ngừng: \u003Cstrong>create\u003C\u002Fstrong> và \u003Cstrong>insert\u003C\u002Fstrong>. Nghe thì tưởng đồng môn, nhưng thực ra hai chiêu này đi hai con đường nội công khác biệt, dùng sai hoàn cảnh là tự đâm vào chân mình như chơi.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Hôm nay, để tránh huynh đệ tẩu hỏa nhập ma, ta sẽ mở cuộn tàn thư và giải thích cho rõ ràng.\u003C\u002Fp>\n\n\n\n\u003Ch1 class=\"wp-block-heading\">\u003Cstrong>1. Giang hồ đồn rằng create và insert giống nhau?\u003C\u002Fstrong>\u003C\u002Fh1>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Câu trả lời là \u003Cmark class=\"has-inline-color\">\u003Cstrong>KHÔNG, KHÔNG, KHÔNG\u003C\u002Fstrong>\u003C\u002Fmark> có nhưng.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Cả hai đều có thể \u003Cstrong>thêm dữ liệu vào database\u003C\u002Fstrong>, nhưng bản chất nội công hoàn toàn khác nhau.\u003C\u002Fp>\n\n\n\n\u003Ch1 class=\"wp-block-heading\">\u003Cstrong>2. Tuyệt kỹ “create”: Một chiêu nội công thâm sâu của Eloquent\u003C\u002Fstrong>\u003C\u002Fh1>\n\n\n\n\u003Cblockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n\u003Cp class=\"wp-block-paragraph\">\u003Cem>“Một chiêu xuất ra, mang theo linh khí đất trời, tự động vận hành đủ thứ bí thuật.”\u003C\u002Fem>\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">✔ Đặc điểm:\u003C\u002Fh3>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Tạo \u003Cstrong>một Eloquent Model instance\u003C\u002Fstrong>.\u003C\u002Fli>\n\n\n\n\u003Cli>Tự động chạy:\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Mass Assignment check (fillable\u002Fguarded)\u003C\u002Fli>\n\n\n\n\u003Cli>Mutators (setXxxAttribute)\u003C\u002Fli>\n\n\n\n\u003Cli>Accessors khi load lại\u003C\u002Fli>\n\n\n\n\u003Cli>Casting\u003C\u002Fli>\n\n\n\n\u003Cli>Events: creating → created\u003C\u002Fli>\n\n\n\n\u003Cli>Timestamps: created_at \u002F updated_at\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\n\n\n\u003Cli>Trả về \u003Cstrong>model đầy đủ\u003C\u002Fstrong>, dùng tiếp mượt như lụa.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Ví dụ:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>User::create([\n   'name' =&gt; 'Lệnh Hồ Xung',\n   'email' =&gt; 'xung.lenh@vdhoangson.com',\n]);\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">📌 Khi nên dùng:\u003C\u002Fh3>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Khi cần logic của model được kích hoạt.\u003C\u002Fli>\n\n\n\n\u003Cli>Khi muốn dùng tiếp model (ví dụ gửi event, xử lý quan hệ, truy cập property).\u003C\u002Fli>\n\n\n\n\u003Cli>Khi muốn code sạch, “chuẩn Eloquent”.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">🧨 Nhược điểm:\u003C\u002Fh3>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Chậm hơn \u003Cstrong>insert\u003C\u002Fstrong> vì chạy nhiều tầng nhiều lớp để thi triển nội công.\u003C\u002Fli>\n\n\n\n\u003Cli>Không phù hợp với \u003Cstrong>bulk insert số lượng lớn\u003C\u002Fstrong>.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Ch1 class=\"wp-block-heading\">\u003Cstrong>3. Tuyệt kỹ “insert”: Đao pháp nhanh, mạnh, gọn… nhưng vô tình vô nghĩa\u003C\u002Fstrong>\u003C\u002Fh1>\n\n\n\n\u003Cblockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n\u003Cp class=\"wp-block-paragraph\">\u003Cem>“Nhanh như gió, mạnh như bão, nhưng chẳng để lại chút linh lực nào.”\u003C\u002Fem>\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">✔ Đặc điểm:\u003C\u002Fh3>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Gửi SQL \u003Cstrong>trực tiếp\u003C\u002Fstrong> xuống database.\u003C\u002Fli>\n\n\n\n\u003Cli>Không tạo model instance.\u003C\u002Fli>\n\n\n\n\u003Cli>Không chạy:\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Events\u003C\u002Fli>\n\n\n\n\u003Cli>Mutators\u003C\u002Fli>\n\n\n\n\u003Cli>Casting\u003C\u002Fli>\n\n\n\n\u003Cli>Fillable\u003C\u002Fli>\n\n\n\n\u003Cli>Timestamps (nếu muốn phải tự thêm)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\n\n\n\u003Cli>Trả về \u003Cstrong>bool\u003C\u002Fstrong>, không phải model.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Ví dụ:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>DB::table('users')-&gt;insert([\n   'name' =&gt; 'Đông Phương Bất Bại',\n   'email' =&gt; 'dong.phuong@vdhoangson.com',\n   'created_at' =&gt; now(),\n]);\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">📌 Khi nên dùng:\u003C\u002Fh3>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Insert \u003Cstrong>nhiều dòng\u003C\u002Fstrong> cùng lúc (bulk insert).\u003C\u002Fli>\n\n\n\n\u003Cli>Không cần events, timestamps, mutators.\u003C\u002Fli>\n\n\n\n\u003Cli>Tối ưu tốc độ cho các tác vụ nặng.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">⚡ Ưu điểm:\u003C\u002Fh3>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Rất nhanh, nhanh hơn NYC lật mặt.\u003C\u002Fli>\n\n\n\n\u003Cli>Thích hợp cho queue, sync, seed dữ liệu lớn.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">🧨 Nhược điểm:\u003C\u002Fh3>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Không nhận model trả về.\u003C\u002Fli>\n\n\n\n\u003Cli>Không hưởng quyền lợi của Eloquent.\u003C\u002Fli>\n\n\n\n\u003Cli>Không có gì, không có gì cả.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Ch1 class=\"wp-block-heading\">🥋 \u003Cstrong>4. So găng: Create vs Insert\u003C\u002Fstrong>\u003C\u002Fh1>\n\n\n\n\u003Cfigure class=\"wp-block-table\">\u003Ctable class=\"has-fixed-layout\">\u003Cthead>\u003Ctr>\u003Cth>Tính năng\u003C\u002Fth>\u003Cth>create\u003C\u002Fth>\u003Cth>insert\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>Tạo model instance\u003C\u002Ftd>\u003Ctd>✔\u003C\u002Ftd>\u003Ctd>❌\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>Chạy events\u003C\u002Ftd>\u003Ctd>✔\u003C\u002Ftd>\u003Ctd>❌\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>Chạy mutator\u002Faccessor\u003C\u002Ftd>\u003Ctd>✔\u003C\u002Ftd>\u003Ctd>❌\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>Tự động timestamps\u003C\u002Ftd>\u003Ctd>✔\u003C\u002Ftd>\u003Ctd>❌\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>Trả về model\u003C\u002Ftd>\u003Ctd>✔\u003C\u002Ftd>\u003Ctd>❌\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>Tốc độ\u003C\u002Ftd>\u003Ctd>Chậm hơn\u003C\u002Ftd>\u003Ctd>Nhanh hơn\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>Insert hàng loạt\u003C\u002Ftd>\u003Ctd>Không tối ưu\u003C\u002Ftd>\u003Ctd>Rất mạnh\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Ffigure>\n\n\n\n\u003Ch1 class=\"wp-block-heading\">\u003Cstrong>5. Kết luận bí pháp\u003C\u002Fstrong>\u003C\u002Fh1>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Muốn “đúng chuẩn Eloquent”, cần sự tinh tế → \u003Cstrong>dùng create\u003C\u002Fstrong>.\u003C\u002Fli>\n\n\n\n\u003Cli>Muốn “xuất chiêu sấm sét”, tốc độ thần sầu → \u003Cstrong>dùng insert\u003C\u002Fstrong>.\u003C\u002Fli>\n\n\n\n\u003Cli>Mỗi tuyệt kỹ có chỗ phát huy riêng; cao thủ giang hồ là người biết dùng đúng lúc, đúng chỗ, đừng nên cố chấp.\u003C\u002Fli>\n\u003C\u002Ful>\n","863c9fac-4c46-43f3-8f3b-a93d3c919f05",{"id":61,"wordpressId":63,"filename":64,"storageKey":65,"sourceUrl":66,"mimeType":38,"altText":9,"caption":39,"width":40,"height":41,"createdAt":67,"updatedAt":43,"url":68},16381,"laravel-create-vs-insert.png","wordpress\u002F2025\u002F11\u002Flaravel-create-vs-insert.png","https:\u002F\u002Fvdhoangson.com\u002Fwp-content\u002Fuploads\u002F2025\u002F11\u002Flaravel-create-vs-insert.png","2025-11-20T08:18:01.000Z","\u002Fuploads\u002Fwordpress\u002F2025\u002F11\u002Flaravel-create-vs-insert.png",[70,76],{"id":71,"wordpressId":72,"name":73,"slug":74,"parentId":75},"5f89b685-533f-4c09-85fa-d018f8fd71a4",3,"Laravel","laravel","f6aff5ed-b85e-45e6-bbdb-08788be09d67",{"id":75,"wordpressId":77,"name":78,"slug":79,"parentId":39},2,"Lập Trình","lap-trinh",[81,85,88,92],{"id":82,"wordpressId":83,"name":84,"slug":84},"c2708aab-589e-4b2b-8285-9562fe7c806c",333,"insert",{"id":86,"wordpressId":87,"name":74,"slug":74},"35b4e0f9-6caf-49f1-a08e-c5830e6d6f6d",11,{"id":89,"wordpressId":90,"name":91,"slug":91},"7ff182e7-9bb4-481e-bdde-419643e3d6a7",332,"create",{"id":93,"wordpressId":94,"name":95,"slug":95},"060701e9-02eb-4710-b81b-60265c4203fe",331,"eloquent","2025-11-20T08:19:52.000Z","2025-11-20T08:19:54.000Z",{"id":99,"wordpressId":100,"title":101,"slug":102,"excerpt":103,"contentHtml":104,"status":30,"authorName":31,"seoTitle":101,"seoDescription":103,"featuredMediaId":105,"featuredMedia":106,"categories":113,"tags":119,"publishedAt":132,"createdAt":132,"updatedAt":133},"8655cf37-cde3-4457-967a-e88bf179cad1",16374,"Làm Chủ Terminal Với Oh My Zsh – Bí kíp dành cho Developer hiện đại","lam-chu-terminal-voi-oh-my-zsh-bi-kip-danh-cho-developer-hien-dai","Nếu bạn đã từng gõ cd ..\u002F..\u002F và thấy cuộc đời vô nghĩa, hoặc nhìn terminal của mình mà tưởng như đang nói chuyện với DOS 1998 – thì Oh My Zsh chính là phép màu bạn đang tìm kiếm. 🎩 Oh My Zsh là gì? Oh My Zsh là một framework mở rộng cho […]","\n\u003Cp class=\"wp-block-paragraph\">Nếu bạn đã từng gõ \u003Ccode>cd ..\u002F..\u002F\u003C\u002Fcode> và thấy cuộc đời vô nghĩa, hoặc nhìn terminal của mình mà tưởng như đang nói chuyện với DOS 1998 – thì \u003Cstrong>Oh My Zsh\u003C\u002Fstrong> chính là phép màu bạn đang tìm kiếm.\u003C\u002Fp>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">🎩 Oh My Zsh là gì?\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>Oh My Zsh\u003C\u002Fstrong> là một \u003Cstrong>framework mở rộng cho Zsh shell\u003C\u002Fstrong>, được viết bằng bash script. Nó giúp terminal của bạn:\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>\u003Cstrong>Đẹp\u003C\u002Fstrong> hơn (vì ai lại muốn nhìn terminal xấu xí mỗi ngày 😭)\u003C\u002Fli>\n\n\n\n\u003Cli>\u003Cstrong>Thông minh\u003C\u002Fstrong> hơn (tự gợi ý, tự hoàn thành lệnh, highlight lỗi cú pháp)\u003C\u002Fli>\n\n\n\n\u003Cli>\u003Cstrong>Nhanh hơn\u003C\u002Fstrong> trong thao tác (nhờ các alias và plugin mạnh mẽ)\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Nói ngắn gọn:\u003C\u002Fp>\n\n\n\n\u003Cblockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n\u003Cp class=\"wp-block-paragraph\">“Nếu Bash là nông dân, thì Zsh là hiệp sĩ. Còn Oh My Zsh là áo giáp vàng của hiệp sĩ đó.” ⚔️\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">🧩 Vì sao nên dùng Oh My Zsh?\u003C\u002Fh2>\n\n\n\n\u003Cfigure class=\"wp-block-table\">\u003Ctable class=\"has-fixed-layout\">\u003Cthead>\u003Ctr>\u003Cth>Tính năng\u003C\u002Fth>\u003Cth>Bash\u003C\u002Fth>\u003Cth>Zsh + Oh My Zsh\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>Tự động gợi ý lệnh\u003C\u002Ftd>\u003Ctd>❌ Không\u003C\u002Ftd>\u003Ctd>✅ Có\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>Highlight lỗi cú pháp\u003C\u002Ftd>\u003Ctd>❌ Không\u003C\u002Ftd>\u003Ctd>✅ Có\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>Hỗ trợ theme và plugin\u003C\u002Ftd>\u003Ctd>❌ Cực hạn chế\u003C\u002Ftd>\u003Ctd>✅ Hơn 300 plugin, 100+ theme\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>Tốc độ thao tác (alias, shortcut)\u003C\u002Ftd>\u003Ctd>⚙️ Bình thường\u003C\u002Ftd>\u003Ctd>⚡ Siêu nhanh\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>Giao diện\u003C\u002Ftd>\u003Ctd>💤 Đơn sắc\u003C\u002Ftd>\u003Ctd>🌈 Màu mè xịn sò\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Ffigure>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">⚙️ Cài đặt Oh My Zsh\u003C\u002Fh2>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">🪄 Bước 1: Cài Zsh\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Trên \u003Cstrong>Ubuntu \u002F Debian\u003C\u002Fstrong>:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>sudo apt update\nsudo apt install zsh -y\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Trên \u003Cstrong>Fedora \u002F CentOS\u003C\u002Fstrong>:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>sudo dnf install zsh -y\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Trên \u003Cstrong>macOS\u003C\u002Fstrong> (đã có sẵn Zsh từ Catalina, nhưng bạn có thể update):\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>\u003Ccode>brew install zsh\u003C\u002Fcode>\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">🧙 Bước 2: Cài Oh My Zsh\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Bạn chỉ cần chạy một dòng lệnh duy nhất (chính là “phép thuật”):\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>\u003Ccode>sh -c \"$(curl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002Fohmyzsh\u002Fohmyzsh\u002Fmaster\u002Ftools\u002Finstall.sh)\"\u003C\u002Fcode>\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Hoặc nếu thích \u003Ccode>wget\u003C\u002Fcode> hơn:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>sh -c \"$(wget https:\u002F\u002Fraw.githubusercontent.com\u002Fohmyzsh\u002Fohmyzsh\u002Fmaster\u002Ftools\u002Finstall.sh -O -)\"\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Sau khi cài xong, terminal của bạn sẽ đổi giao diện – chúc mừng, bạn vừa nâng cấp từ “nông dân shell” lên “hiệp sĩ terminal”\u003C\u002Fp>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">💅 Bước 3: Chọn Theme đẹp\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Mở file cấu hình: \u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>\u003Ccode>nano ~\u002F.zshrc\u003C\u002Fcode>\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Tìm dòng:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>ZSH_THEME=\"robbyrussell\"\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Thay bằng một theme khác, ví dụ:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>ZSH_THEME=\"agnoster\"\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Rồi reload lại:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>source ~\u002F.zshrc\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Gợi ý: Bạn có thể xem danh sách theme tại\u003Cbr \u002F>🔗 \u003Ca rel=\"noopener noreferrer\">https:\u002F\u002Fgithub.com\u002Fohmyzsh\u002Fohmyzsh\u002Fwiki\u002FThemes\u003C\u002Fa>\u003C\u002Fp>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">⚡ Bước 4: Kích hoạt plugin\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Mở lại \u003Ccode>~\u002F.zshrc\u003C\u002Fcode>, tìm dòng:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>plugins=(git)\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Thêm các plugin bạn muốn:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>plugins=(git docker vscode laravel)\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Sau đó reload:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>source ~\u002F.zshrc\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Các plugin này giúp:\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>\u003Cstrong>docker\u003C\u002Fstrong> → gợi ý lệnh docker\u003C\u002Fli>\n\n\n\n\u003Cli>\u003Cstrong>vscode\u003C\u002Fstrong> → gợi ý lệnh vscode\u003C\u002Fli>\n\n\n\n\u003Cli>\u003Cstrong>laravel\u003C\u002Fstrong> → gợi ý lệnh laravel\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Bạn có thể tìm thêm plugins ở đây: \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fohmyzsh\u002Fohmyzsh\u002Fwiki\u002FPlugins\" target=\"_blank\" rel=\"noopener noreferrer\">https:\u002F\u002Fgithub.com\u002Fohmyzsh\u002Fohmyzsh\u002Fwiki\u002FPlugins\u003C\u002Fa>\u003C\u002Fp>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">🧠 Mẹo nhỏ của cao thủ\u003C\u002Fh2>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Đặt alias riêng trong \u003Ccode>~\u002F.zshrc\u003C\u002Fcode>, ví dụ:\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>alias art=\"php artisan\"\u003Cbr \u002F>alias gs=\"git status\"\u003Cbr \u002F>alias gl=\"git log --oneline --graph --decorate\"\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Dùng \u003Cstrong>Powerlevel10k\u003C\u002Fstrong> theme để có giao diện “pro” như hacker trong phim:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>git clone --depth=1 https:\u002F\u002Fgithub.com\u002Fromkatv\u002Fpowerlevel10k.git ${ZSH_CUSTOM:-$HOME\u002F.oh-my-zsh\u002Fcustom}\u002Fthemes\u002Fpowerlevel10k\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Sau đó chỉnh:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>ZSH_THEME=\"powerlevel10k\u002Fpowerlevel10k\"\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Sau đó reload:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>source ~\u002F.zshrc\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">🎯 Kết luận\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>Oh My Zsh\u003C\u002Fstrong> không chỉ là “một công cụ làm đẹp terminal” — mà là \u003Cstrong>một bước tiến trong tư duy của developer\u003C\u002Fstrong>: tối ưu hoá từng phút bạn gõ lệnh, giúp bạn làm việc nhanh hơn, gọn hơn, và vui hơn.\u003C\u002Fp>\n\n\n\n\u003Cblockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n\u003Cp class=\"wp-block-paragraph\">“Vì terminal đẹp khiến code bug cũng thấy nhẹ nhàng hơn.” 😎\u003C\u002Fp>\n\u003C\u002Fblockquote>\n","59154d1a-2a06-4512-a0d1-7ca6aa0e37ab",{"id":105,"wordpressId":107,"filename":108,"storageKey":109,"sourceUrl":110,"mimeType":38,"altText":9,"caption":39,"width":40,"height":41,"createdAt":111,"updatedAt":43,"url":112},16375,"oh-my-zsh.png","wordpress\u002F2025\u002F11\u002Foh-my-zsh.png","https:\u002F\u002Fvdhoangson.com\u002Fwp-content\u002Fuploads\u002F2025\u002F11\u002Foh-my-zsh.png","2025-11-10T02:24:10.000Z","\u002Fuploads\u002Fwordpress\u002F2025\u002F11\u002Foh-my-zsh.png",[114],{"id":115,"wordpressId":116,"name":117,"slug":118,"parentId":39},"858b8023-72fd-4b6e-b610-6d319a21ede1",326,"Linux","linux",[120,124,128],{"id":121,"wordpressId":122,"name":123,"slug":123},"893c6a9a-823e-4e5c-b18b-1a185bbbab0e",330,"bash",{"id":125,"wordpressId":126,"name":127,"slug":127},"ccdbe082-426e-4d37-b642-a1e1d5320548",328,"oh-my-zsh",{"id":129,"wordpressId":130,"name":131,"slug":131},"a7955853-178f-4219-bdcf-d1e035eeab5d",327,"zsh","2025-11-10T02:24:25.000Z","2025-11-10T02:24:28.000Z",{"id":135,"wordpressId":136,"title":137,"slug":138,"excerpt":139,"contentHtml":140,"status":30,"authorName":31,"seoTitle":137,"seoDescription":139,"featuredMediaId":141,"featuredMedia":142,"categories":150,"tags":157,"publishedAt":181,"createdAt":181,"updatedAt":182},"5c54b58d-b689-47c3-bcce-51cc1b7983f2",16363,"Cuộc đại chiến giữa hai môn phái: Session Auth vs JWT Auth","cuoc-dai-chien-giua-hai-mon-phai-session-auth-vs-jwt-auth","I. Bôn tẩu giang hồ Từ thuở giang hồ còn sơ khai, các ứng dụng web cổ điển sử dụng Session Auth — một môn phái lâu đời, đơn giản, hiệu quả.Nhưng rồi, khi thế giới SPA (Single Page Application) và API trỗi dậy, một môn phái mới xuất hiện: JWT Auth — gọn gàng, […]","\n\u003Ch2 class=\"wp-block-heading\">I. Bôn tẩu giang hồ\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Từ thuở giang hồ còn sơ khai, các ứng dụng web cổ điển sử dụng \u003Cstrong>Session Auth\u003C\u002Fstrong> — một môn phái lâu đời, đơn giản, hiệu quả.\u003Cbr \u002F>Nhưng rồi, khi thế giới SPA (Single Page Application) và API trỗi dậy, một môn phái mới xuất hiện: \u003Cstrong>JWT Auth\u003C\u002Fstrong> — gọn gàng, tự do, hành tẩu khắp thiên hạ không cần server nhớ mặt.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Hai phái tuy khác đường, nhưng đều hướng tới một mục tiêu: \u003Cstrong>xác thực danh tính người dùng\u003C\u002Fstrong>.\u003Cbr \u002F>Vậy ai là cao thủ đệ nhất thiên hạ? Hãy cùng ta luận một hồi!\u003C\u002Fp>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">II. \u003Cstrong>Tuyệt kỷ của từng môn phái\u003C\u002Fstrong>\u003C\u002Fh2>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">Phái Session Auth – “Truyền thống chính tông”\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>Nguyên lý:\u003C\u002Fstrong>\u003Cbr \u002F>Khi người dùng đăng nhập, server tạo một “session” lưu trong bộ nhớ hoặc database.\u003Cbr \u002F>Một “token bí mật” (session ID) được gửi về trình duyệt, lưu trong \u003Cstrong>cookie\u003C\u002Fstrong>.\u003Cbr \u002F>Từ đó, mỗi lần người dùng gửi request, cookie ấy giúp server nhận ra họ.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>Vũ khí bí truyền:\u003C\u002Fstrong>\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>\u003Ccode>php artisan make:auth\u003C\u002Fcode> – thần công tự động hoá.\u003C\u002Fli>\n\n\n\n\u003Cli>\u003Ccode>Illuminate\\Session\u003C\u002Fcode> – nội công thâm hậu.\u003C\u002Fli>\n\n\n\n\u003Cli>\u003Ccode>csrf_token()\u003C\u002Fcode> – hộ thân pháp tránh bị tấn công CSRF.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">Phái JWT Auth – “Hiệp khách giang hồ tự do”\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>Nguyên lý:\u003C\u002Fstrong>\u003Cbr \u002F>Khi người dùng đăng nhập, server trả về một \u003Cstrong>JWT (JSON Web Token)\u003C\u002Fstrong> – chứa thông tin mã hoá (payload).\u003Cbr \u002F>Token này đi theo mọi request (thường nằm trong header \u003Ccode>Authorization: Bearer &lt;token&gt;\u003C\u002Fcode>).\u003Cbr \u002F>Server không cần lưu gì cả – chỉ cần \u003Cstrong>xác minh chữ ký\u003C\u002Fstrong> là biết thật giả.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>Vũ khí bí truyền:\u003C\u002Fstrong>\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>\u003Ccode>tymon\u002Fjwt-auth\u003C\u002Fcode> – bí kíp phổ biến trong Laravel.\u003C\u002Fli>\n\n\n\n\u003Cli>\u003Ccode>firebase\u002Fphp-jwt\u003C\u002Fcode> – bảo vật do tiền nhân Google để lại.\u003C\u002Fli>\n\n\n\n\u003Cli>Header \u003Ccode>Authorization\u003C\u002Fcode> – như lệnh bài của triều đình, đi đến đâu cũng có hiệu lực.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">III. \u003Cstrong>So sánh chiêu thức\u003C\u002Fstrong>\u003C\u002Fh2>\n\n\n\n\u003Cfigure class=\"wp-block-table\">\u003Ctable class=\"has-fixed-layout\">\u003Cthead>\u003Ctr>\u003Cth>Đặc điểm\u003C\u002Fth>\u003Cth>\u003Cstrong>Session Auth\u003C\u002Fstrong>\u003C\u002Fth>\u003Cth>\u003Cstrong>JWT Auth\u003C\u002Fstrong>\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>\u003Cstrong>Lưu trữ\u003C\u002Fstrong>\u003C\u002Ftd>\u003Ctd>Trên server (session store, Redis, DB…)\u003C\u002Ftd>\u003Ctd>Trên client (localStorage, cookie, memory…)\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cstrong>Trạng thái (state)\u003C\u002Fstrong>\u003C\u002Ftd>\u003Ctd>Có trạng thái (stateful)\u003C\u002Ftd>\u003Ctd>Không trạng thái (stateless)\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cstrong>Phù hợp cho\u003C\u002Fstrong>\u003C\u002Ftd>\u003Ctd>Web truyền thống (Blade, Livewire…)\u003C\u002Ftd>\u003Ctd>SPA, Mobile app, API đa nền tảng\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cstrong>Tốc độ\u003C\u002Fstrong>\u003C\u002Ftd>\u003Ctd>Cần truy xuất session mỗi lần\u003C\u002Ftd>\u003Ctd>Nhanh hơn vì không truy DB\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cstrong>Bảo mật\u003C\u002Fstrong>\u003C\u002Ftd>\u003Ctd>Tốt với cookie + HTTPS\u003C\u002Ftd>\u003Ctd>Dễ lộ token nếu không cẩn thận\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cstrong>Gia hạn phiên (refresh)\u003C\u002Fstrong>\u003C\u002Ftd>\u003Ctd>Tự động qua cookie\u003C\u002Ftd>\u003Ctd>Cần cơ chế refresh token thủ công\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cstrong>Logout\u003C\u002Fstrong>\u003C\u002Ftd>\u003Ctd>Dễ – chỉ xoá session\u003C\u002Ftd>\u003Ctd>Phức tạp – phải vô hiệu hóa token\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cstrong>Triển khai\u003C\u002Fstrong>\u003C\u002Ftd>\u003Ctd>Dễ, Laravel hỗ trợ sẵn\u003C\u002Ftd>\u003Ctd>Cần setup thêm package và cấu hình\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cstrong>Kiểm soát người dùng online\u003C\u002Fstrong>\u003C\u002Ftd>\u003Ctd>Dễ (dựa vào session table)\u003C\u002Ftd>\u003Ctd>Khó hơn – token không lưu trạng thái\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Ffigure>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">IV. \u003Cstrong>Khi nào nên dùng?\u003C\u002Fstrong>\u003C\u002Fh2>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">\u003Cstrong>Session Auth – Dành cho đệ tử nội môn\u003C\u002Fstrong>\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Dùng khi:\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Ứng dụng chủ yếu là \u003Cstrong>web truyền thống\u003C\u002Fstrong> (Laravel Blade, Inertia, Livewire).\u003C\u002Fli>\n\n\n\n\u003Cli>Hệ thống cần quản lý phiên đăng nhập chặt chẽ, ví dụ \u003Cstrong>admin panel, cổng nội bộ\u003C\u002Fstrong>.\u003C\u002Fli>\n\n\n\n\u003Cli>Muốn tận dụng bảo mật cookie và CSRF protection sẵn có của Laravel.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cblockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n\u003Cp class=\"wp-block-paragraph\">🧙 “Muốn an định giang sơn, cứ trung thành với Session Auth.”\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">\u003Cstrong>JWT Auth – Dành cho hiệp khách phiêu bạt\u003C\u002Fstrong>\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Dùng khi:\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Xây dựng \u003Cstrong>API\u003C\u002Fstrong> cho mobile, SPA, microservices.\u003C\u002Fli>\n\n\n\n\u003Cli>Cần xác thực \u003Cstrong>không phụ thuộc server\u003C\u002Fstrong>.\u003C\u002Fli>\n\n\n\n\u003Cli>Muốn người dùng đăng nhập 1 lần – dùng mọi nơi (SSO, đa nền tảng).\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cblockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n\u003Cp class=\"wp-block-paragraph\">🥷 “Đi khắp thiên hạ, mang theo JWT là đủ — chỉ cần chữ ký hợp lệ.”\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">V. \u003Cstrong>Tổng kết giang hồ\u003C\u002Fstrong>\u003C\u002Fh2>\n\n\n\n\u003Cfigure class=\"wp-block-table\">\u003Ctable class=\"has-fixed-layout\">\u003Cthead>\u003Ctr>\u003Cth>Tình huống\u003C\u002Fth>\u003Cth>Môn phái khuyên dùng\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>Web nội bộ, quản lý user, admin\u003C\u002Ftd>\u003Ctd>Session Auth\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>Ứng dụng mobile, React\u002FVue SPA\u003C\u002Ftd>\u003Ctd>JWT Auth\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>API kết nối nhiều dịch vụ\u003C\u002Ftd>\u003Ctd>JWT Auth\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>Muốn bảo mật cookie và CSRF sẵn có\u003C\u002Ftd>\u003Ctd>Session Auth\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Ffigure>\n","2e00d396-6843-4625-87a1-560bb59ede80",{"id":141,"wordpressId":143,"filename":144,"storageKey":145,"sourceUrl":146,"mimeType":38,"altText":147,"caption":39,"width":40,"height":41,"createdAt":148,"updatedAt":43,"url":149},16368,"session-auth-vs-jwt-auth.png","wordpress\u002F2025\u002F11\u002Fsession-auth-vs-jwt-auth.png","https:\u002F\u002Fvdhoangson.com\u002Fwp-content\u002Fuploads\u002F2025\u002F11\u002Fsession-auth-vs-jwt-auth.png","session-auth-vs-jwt-auth","2025-11-08T08:34:10.000Z","\u002Fuploads\u002Fwordpress\u002F2025\u002F11\u002Fsession-auth-vs-jwt-auth.png",[151,152],{"id":75,"wordpressId":77,"name":78,"slug":79,"parentId":39},{"id":153,"wordpressId":154,"name":155,"slug":156,"parentId":75},"56268c91-7b68-4ce5-9576-25ed0595bbac",20,"PHP","php",[158,162,166,171,176],{"id":159,"wordpressId":160,"name":161,"slug":161},"8b36a009-aacd-4d34-8bec-9aab90d3593a",324,"session",{"id":163,"wordpressId":164,"name":165,"slug":165},"fd1e9a51-9b19-4f4b-9ce9-11c160986ba3",325,"cookie",{"id":167,"wordpressId":168,"name":169,"slug":170},"236197c7-fa55-4d64-ba54-add3201ffcbb",322,"jwt auth","jwt-auth",{"id":172,"wordpressId":173,"name":174,"slug":175},"f5078e23-3620-49f8-9a73-9d1581ff52a9",323,"xác thực","xac-thuc",{"id":177,"wordpressId":178,"name":179,"slug":180},"2c66d2ac-1302-420b-b539-9650f8c32355",321,"session auth","session-auth","2025-11-08T08:37:12.000Z","2025-11-08T08:37:14.000Z",{"id":184,"wordpressId":185,"title":186,"slug":187,"excerpt":188,"contentHtml":189,"status":30,"authorName":31,"seoTitle":186,"seoDescription":188,"featuredMediaId":190,"featuredMedia":191,"categories":200,"tags":202,"publishedAt":214,"createdAt":214,"updatedAt":215},"93c528ab-2904-4a2f-83e6-ba71263d9b16",16348,"Laravel Lottery – Đem hên xui vào trong code","laravel-lottery-cong-cu-tao-xac-suat-ngau-nhien-trong-ung-dung","1. Mở đầu giang hồ? Laravel Lottery là một class nhỏ nhưng cực kỳ tiện lợi được thêm vào từ Laravel 10. Nó giúp bạn thực hiện các hành động theo xác suất, tức là cho phép một đoạn code chỉ chạy với tỉ lệ phần trăm nhất định — trước đây phải dùng mt_rand() […]","\n\u003Ch2 class=\"wp-block-heading\">1. Mở đầu giang hồ?\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>Laravel Lottery\u003C\u002Fstrong> là một class nhỏ nhưng cực kỳ tiện lợi được thêm vào từ \u003Cstrong>Laravel 10\u003C\u002Fstrong>. Nó giúp bạn thực hiện các hành động \u003Cem>theo xác suất\u003C\u002Fem>, tức là cho phép một đoạn code chỉ chạy \u003Cstrong>với tỉ lệ phần trăm nhất định\u003C\u002Fstrong> — trước đây phải dùng \u003Ccode>mt_rand()\u003C\u002Fcode> hay \u003Ccode>random_int()\u003C\u002Fcode> khá rườm rà, không có chút tuyệt kỹ nào.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Ví dụ, các hạ có thể muốn:\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Thỉnh thoảng log thêm thông tin debug.\u003C\u002Fli>\n\n\n\n\u003Cli>Chỉ gửi email thông báo cho \u003Cstrong>5% người dùng may mắn\u003C\u002Fstrong>.\u003C\u002Fli>\n\n\n\n\u003Cli>Giảm tải một job tốn tài nguyên bằng cách chỉ chạy ngẫu nhiên.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Nếu tại hạ viết:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>if (rand(1, 100) &lt;= 5) {\n\u002F\u002F Do something 5% of the time\n}\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Ờ thì cũng được, nhưng trông \u003Cstrong>thiếu đạo hạnh\u003C\u002Fstrong>, khó test, khó đọc, và không “Laravel” chút nào\u003C\u002Fp>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">2. \u003Cstrong>Bí kíp cơ bản\u003C\u002Fstrong>\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Bộ pháp rất đơn giản:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>Lottery::odds($successes, $total)\n    -&gt;winner(function () {\n        \u002F\u002F Khi trúng \"xổ số\" 🎯\n    })\n    -&gt;loser(function () {\n        \u002F\u002F Khi trượt \"xổ số\" 😭\n    })\n    -&gt;choose();\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Ví dụ:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>use Illuminate\\Support\\Lottery;\n\nLottery::odds(1, 10)\n    -&gt;winner(fn () =&gt; logger('Trúng 10% nè!'))\n    -&gt;loser(fn () =&gt; logger('Thua rồi...'))\n    -&gt;choose();\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Câu trên nghĩa là: \u003Cstrong>có 10% cơ hội thực thi callback “winner”\u003C\u002Fstrong>.\u003Cbr \u002F>Laravel sẽ tự sinh “số phận” cho mỗi lần chạy.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Nếu bạn muốn làm gì đó khi \u003Cem>không trúng\u003C\u002Fem>, có thể thêm \u003Ccode>loser()\u003C\u002Fcode>:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>Lottery::odds(1, 10)\n    -&gt;winner(fn () =&gt; info('🎉 Trúng rồi!'))\n    -&gt;loser(fn () =&gt; info('😅 Không trúng lần này.'));\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">3. \u003Cstrong>Vũ khí nâng cao\u003C\u002Fstrong>\u003C\u002Fh2>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">1. Sử dụng \u003Ccode>Lottery::odds()\u003C\u002Fcode> với cú pháp tinh gọn\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Nếu chỉ cần biết có “trúng” hay không:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>\nif (Lottery::odds(1, 50)-&gt;choose()) {\n    \u002F\u002F 1\u002F50 cơ hội\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Rất hợp cho các tác vụ kiểu “thỉnh thoảng làm”:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>if (Lottery::odds(1, 100)-&gt;choose()) {\n    Cache::flush(); \u002F\u002F Lâu lâu dọn cache cho vui\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">2. Tùy chỉnh seed\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Để đảm bảo kết quả “giống nhau” trong một phiên test, có thể thiết lập seed:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>Lottery::odds(1, 10)-&gt;seed('example')-&gt;choose();\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Cùng seed → cùng kết quả.\u003Cbr \u002F>Khác seed → vận mệnh đổi thay.\u003C\u002Fp>\n\n\n\n\u003Cblockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n\u003Cp class=\"wp-block-paragraph\">“Giang hồ có thể loạn, nhưng test phải ổn định.” 😆\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">3. Dùng trong ứng dụng thực chiến\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Ví dụ trong \u003Cstrong>middleware\u003C\u002Fstrong>:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>public function handle($request, Closure $next)\n{\n   if (Lottery::odds(1, 1000)-&gt;choose()) {\n      logger('Sample request log');\n\n      return $next($request);\n   }\n}\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Hoặc trong \u003Cstrong>job queue\u003C\u002Fstrong>:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>if (Lottery::odds(1, 20)-&gt;choose()) {\n   $this-&gt;sendReport();\n}\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Hoặc \u003Cstrong>trong sự kiện marketing\u003C\u002Fstrong>:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>if (Lottery::odds(1, 100)-&gt;choose()) {\n        event(new LuckyUserRewarded($user));\n}\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">4. \u003Cstrong>Điểm mạnh và yếu của tuyệt học này\u003C\u002Fstrong>\u003C\u002Fh2>\n\n\n\n\u003Cfigure class=\"wp-block-table\">\u003Ctable class=\"has-fixed-layout\">\u003Cthead>\u003Ctr>\u003Cth>Thuộc tính\u003C\u002Fth>\u003Cth>Ưu điểm\u003C\u002Fth>\u003Cth>Nhược điểm\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>\u003Cstrong>Cú pháp\u003C\u002Fstrong>\u003C\u002Ftd>\u003Ctd>Dễ đọc, rõ nghĩa, “chuẩn Laravel”\u003C\u002Ftd>\u003Ctd>Hơi dư nếu chỉ cần random đơn giản\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cstrong>Ứng dụng\u003C\u002Fstrong>\u003C\u002Ftd>\u003Ctd>Tuyệt vời cho logging, sampling, thử nghiệm A\u002FB\u003C\u002Ftd>\u003Ctd>Không phù hợp cho game hoặc xác suất chính xác tuyệt đối\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cstrong>Test &amp; debug\u003C\u002Fstrong>\u003C\u002Ftd>\u003Ctd>Có thể seed để tái tạo kết quả\u003C\u002Ftd>\u003Ctd>Nếu quên seed, test có thể không ổn định\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cstrong>Tích hợp\u003C\u002Fstrong>\u003C\u002Ftd>\u003Ctd>Dễ dùng trong middleware, jobs, events\u003C\u002Ftd>\u003Ctd>Không lưu trạng thái – hoàn toàn ngẫu nhiên mỗi lần gọi\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Ffigure>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">\u003Cstrong>Tổng kết giang hồ\u003C\u002Fstrong>\u003C\u002Fh2>\n\n\n\n\u003Cblockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n\u003Cp class=\"wp-block-paragraph\">“Code mà không có random thì như trà mà không có đá – nhạt lắm!”\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Laravel Lottery tuy nhỏ, nhưng cực kỳ hữu ích khi ta biết cách đặt nó đúng chỗ.\u003Cbr \u002F>Nó giúp code vừa tinh gọn, vừa dễ đọc, vừa có linh hồn “may rủi” rất tự nhiên.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Còn nếu anh em đang viết hệ thống có tỷ lệ, sampling, logging —\u003Cbr \u002F>hãy thử vận nội công với câu thần chú:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>Lottery::alwaysWin();\nLottery::alwaysLose();\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Điều này rất hữu ích trong unit test, giúp bạn kiểm soát logic mà không phải dựa vào may rủi.\u003C\u002Fp>\n","c172673a-2be1-41d6-9d58-b5ed756676f0",{"id":190,"wordpressId":192,"filename":193,"storageKey":194,"sourceUrl":195,"mimeType":38,"altText":9,"caption":39,"width":196,"height":197,"createdAt":198,"updatedAt":43,"url":199},16349,"laravel-lottery.png","wordpress\u002F2025\u002F10\u002Flaravel-lottery.png","https:\u002F\u002Fvdhoangson.com\u002Fwp-content\u002Fuploads\u002F2025\u002F10\u002Flaravel-lottery.png",1050,700,"2025-10-23T08:35:18.000Z","\u002Fuploads\u002Fwordpress\u002F2025\u002F10\u002Flaravel-lottery.png",[201],{"id":71,"wordpressId":72,"name":73,"slug":74,"parentId":75},[203,208,213],{"id":204,"wordpressId":205,"name":206,"slug":207},"3afa3d60-69b1-49fc-80ac-b59edb9ace73",314,"xác suất","xac-suat",{"id":209,"wordpressId":210,"name":211,"slug":212},"e89601cc-949d-4afd-aec4-58dc58dc315e",313,"laravel lottery","laravel-lottery",{"id":86,"wordpressId":87,"name":74,"slug":74},"2025-10-23T08:36:26.000Z","2025-11-09T12:59:12.000Z",{"id":217,"wordpressId":218,"title":219,"slug":220,"excerpt":221,"contentHtml":222,"status":30,"authorName":31,"seoTitle":219,"seoDescription":221,"featuredMediaId":223,"featuredMedia":224,"categories":233,"tags":239,"publishedAt":252,"createdAt":252,"updatedAt":253},"6c5175ec-1fac-4df1-bee2-1b28940d1272",679,"Top 10 Công Cụ Tạo Tài Liệu Đẹp Trong Năm 2025 (Dành Cho Developer & Team)","top-10-cong-cu-tao-tai-lieu-dep-trong-nam-2025-danh-cho-developer-team","Năm 2025, tài liệu không chỉ là “việc phải làm sau cùng” — mà bản thân nó đã là một sản phẩm. Dù bạn đang phát hành API, onboarding dev mới hay xây dựng kho tri thức nội bộ, thì một bộ tài liệu đẹp chính là yếu tố nâng tầm sản phẩm từ “dùng […]","\n\u003Cp class=\"wp-block-paragraph\">Năm 2025, tài liệu không chỉ là “việc phải làm sau cùng” — mà bản thân nó đã là một sản phẩm. Dù bạn đang phát hành API, onboarding dev mới hay xây dựng kho tri thức nội bộ, thì một bộ tài liệu đẹp chính là yếu tố nâng tầm sản phẩm từ “dùng được” thành “thích thú khi dùng”.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Tài liệu tuyệt vời không chỉ nằm ở cấu trúc hay độ rõ ràng — mà còn ở trải nghiệm hình ảnh. Nghĩ đến typography gọn gàng, điều hướng trực quan, layout responsive, ví dụ tương tác và chút điểm nhấn tinh tế.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Nếu bạn đang tìm một công cụ để tạo tài liệu đẹp trong năm 2025, thì danh sách này là dành cho bạn. Đây là 10 công cụ hàng đầu cân bằng giữa hình thức và chức năng cho dev team, startup, và cả sản phẩm enterprise.\u003C\u002Fp>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">1. Apidog\u003C\u002Fh2>\n\n\n\n\u003Cfigure class=\"wp-block-image size-large\">\u003Cimg alt=\"Https%3A%2F%2Fdev To Uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb1rfapkoctt9rx50dzvy\" title=\"Top 10 Công Cụ Tạo Tài Liệu Đẹp Trong Năm 2025 (Dành Cho Developer &amp; Team)\" class=\"lazyload\" \u002F>\u003C\u002Ffigure>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Nếu bạn đang xây dựng API, Apidog là một bước ngoặt. Nó không chỉ là công cụ tài liệu — mà là nền tảng “tất cả trong một” để thiết kế, test, mock và viết tài liệu API vừa chuẩn vừa đẹp.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Apidog tự động tạo docs sạch sẽ, tương tác, phản ánh cấu trúc API của bạn theo thời gian thực. Điểm hay nhất? Không cần nhảy giữa nhiều tool — tài liệu của bạn luôn đồng bộ với vòng đời API từ đầu đến cuối.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>Điểm đẹp:\u003C\u002Fstrong>\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Giao diện hiện đại, trực quan\u003C\u002Fli>\n\n\n\n\u003Cli>Có sẵn dark\u002Flight theme\u003C\u002Fli>\n\n\n\n\u003Cli>Console test API real-time cho dev\u003C\u002Fli>\n\n\n\n\u003Cli>Tài liệu responsive, có tính tương tác\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>Phù hợp cho:\u003C\u002Fstrong> Team API-first muốn một workflow đẹp, trọn gói từ mock tới production.\u003C\u002Fp>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">2. Docusaurus\u003C\u002Fh2>\n\n\n\n\u003Cfigure class=\"wp-block-image size-large\">\u003Cimg alt=\"Https%3A%2F%2Fdev To Uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg1qs9ynwa1unqcmizb26\" title=\"Top 10 Công Cụ Tạo Tài Liệu Đẹp Trong Năm 2025 (Dành Cho Developer &amp; Team)\" class=\"lazyload\" \u002F>\u003C\u002Ffigure>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Được Meta phát triển, Docusaurus là “con cưng” của cộng đồng dev để làm site tài liệu. Dùng React và hỗ trợ Markdown, giúp bạn vừa viết dễ dàng, vừa tùy biến frontend bằng React components.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Có sẵn versioning, search, localization và layout đẹp ngay từ đầu. Hơn nữa lại open-source, có cộng đồng mạnh.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>Điểm đẹp:\u003C\u002Fstrong>\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Thân thiện với dev (React + MDX)\u003C\u002Fli>\n\n\n\n\u003Cli>Theming dễ với default tuyệt vời\u003C\u002Fli>\n\n\n\n\u003Cli>UI điều hướng và search có sẵn\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>Phù hợp cho:\u003C\u002Fstrong> Dự án open-source, tài liệu dev, knowledge base.\u003C\u002Fp>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">3. ReadMe\u003C\u002Fh2>\n\n\n\n\u003Cfigure class=\"wp-block-image size-large\">\u003Cimg alt=\"Https%3A%2F%2Fdev To Uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsqgg1qmctmlps68abv2p\" title=\"Top 10 Công Cụ Tạo Tài Liệu Đẹp Trong Năm 2025 (Dành Cho Developer &amp; Team)\" class=\"lazyload\" \u002F>\u003C\u002Ffigure>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">ReadMe biến API docs thành trải nghiệm như ứng dụng. Nó đặc biệt mạnh ở phần onboarding API, với docs auto-gen, API key, và gọi API ngay trong browser.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Nó kết hợp UX đẹp + tính năng mạnh: changelog, analytics, …\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>Điểm đẹp:\u003C\u002Fstrong>\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>API playground trực tiếp\u003C\u002Fli>\n\n\n\n\u003Cli>Branding và theme tùy chỉnh\u003C\u002Fli>\n\n\n\n\u003Cli>Code snippet tương tác\u003C\u002Fli>\n\n\n\n\u003Cli>Analytics tích hợp trong docs\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>Phù hợp cho:\u003C\u002Fstrong> SaaS platform &amp; API provider muốn dev portal bóng bẩy.\u003C\u002Fp>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">4. Stoplight\u003C\u002Fh2>\n\n\n\n\u003Cfigure class=\"wp-block-image aligncenter size-large\">\u003Cimg alt=\"Https%3A%2F%2Fdev To Uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fal7uoy687wrpfk2b2xl1\" title=\"Top 10 Công Cụ Tạo Tài Liệu Đẹp Trong Năm 2025 (Dành Cho Developer &amp; Team)\" class=\"lazyload\" \u002F>\u003C\u002Ffigure>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Stoplight giúp phát triển API theo hướng design-first dễ như chơi. Hỗ trợ OpenAPI, editor trực quan, xuất tài liệu rõ ràng và hữu ích ngay.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Kết hợp kỹ thuật + thẩm mỹ — combo hiếm.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>Điểm đẹp:\u003C\u002Fstrong>\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Visual API designer\u003C\u002Fli>\n\n\n\n\u003Cli>Docs chuyên nghiệp, có theme\u003C\u002Fli>\n\n\n\n\u003Cli>Hỗ trợ Markdown &amp; OAS\u003C\u002Fli>\n\n\n\n\u003Cli>Tích hợp Git sâu\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>Phù hợp cho:\u003C\u002Fstrong> Team theo hướng OpenAPI-first.\u003C\u002Fp>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">5. GitBook\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Ban đầu tập trung cho dev, giờ GitBook trở thành nền tảng tri thức gọn gàng, dùng cho cả dev lẫn enterprise team.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Hợp cho docs public lẫn private, với quy trình edit, comment, publish dễ dàng.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>Điểm đẹp:\u003C\u002Fstrong>\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Layout sạch, tối giản\u003C\u002Fli>\n\n\n\n\u003Cli>Hợp tác real-time\u003C\u002Fli>\n\n\n\n\u003Cli>Hỗ trợ embed &amp; media\u003C\u002Fli>\n\n\n\n\u003Cli>Publish\u002Fshare nhanh chóng\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>Phù hợp cho:\u003C\u002Fstrong> Wiki nội bộ, hướng dẫn dev, tài liệu team.\u003C\u002Fp>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">6. Swagger UI\u003C\u002Fh2>\n\n\n\n\u003Cfigure class=\"wp-block-image aligncenter size-large\">\u003Cimg alt=\"Https%3A%2F%2Fdev To Uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9qqm9q325hwrtsuuoyb0\" title=\"Top 10 Công Cụ Tạo Tài Liệu Đẹp Trong Năm 2025 (Dành Cho Developer &amp; Team)\" class=\"lazyload\" \u002F>\u003C\u002Ffigure>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Swagger UI là “huyền thoại” cho REST API docs bằng OpenAPI. Nó biến JSON\u002FYAML thành docs đẹp, có tính tương tác “try-it-out”.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Open-source, tùy biến mạnh, cực hợp cho team muốn auto-gen docs thân thiện dev.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>Điểm đẹp:\u003C\u002Fstrong>\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Hoàn toàn tương tác\u003C\u002Fli>\n\n\n\n\u003Cli>Có dark\u002Flight theme\u003C\u002Fli>\n\n\n\n\u003Cli>Layout tối giản, gọn gàng\u003C\u002Fli>\n\n\n\n\u003Cli>Nhúng vào app dễ dàng\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>Phù hợp cho:\u003C\u002Fstrong> Bất cứ ai dùng Swagger\u002FOpenAPI.\u003C\u002Fp>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">7. Slate\u003C\u002Fh2>\n\n\n\n\u003Cfigure class=\"wp-block-image aligncenter size-large\">\u003Cimg alt=\"Https%3A%2F%2Fdev To Uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fztd235s3wkr9hfncax52\" title=\"Top 10 Công Cụ Tạo Tài Liệu Đẹp Trong Năm 2025 (Dành Cho Developer &amp; Team)\" class=\"lazyload\" \u002F>\u003C\u002Ffigure>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Nếu từng dùng docs của Stripe hay Twilio, chắc bạn đã thấy Slate. Công cụ open-source nổi tiếng với layout trái-phải: Markdown bên trái, code example bên phải.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Hoàn hảo cho REST API, vừa đẹp vừa đơn giản.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>Điểm đẹp:\u003C\u002Fstrong>\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Thiết kế 2 cột đặc trưng\u003C\u002Fli>\n\n\n\n\u003Cli>Cuộn mượt + TOC gọn\u003C\u002Fli>\n\n\n\n\u003Cli>Markdown-driven\u003C\u002Fli>\n\n\n\n\u003Cli>Theming tùy chỉnh dễ dàng\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>Phù hợp cho:\u003C\u002Fstrong> REST API docs tối giản, tinh tế.\u003C\u002Fp>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">8. Redocly\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Redocly biến OpenAPI thành docs responsive đẹp mắt, dễ đọc. Hỗ trợ API phức tạp và scale tốt cho enterprise.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Có branding, search, navigation đầy đủ.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>Điểm đẹp:\u003C\u002Fstrong>\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Hiệu năng cực nhanh\u003C\u002Fli>\n\n\n\n\u003Cli>Theming nâng cao + branding\u003C\u002Fli>\n\n\n\n\u003Cli>Responsive, mobile-friendly\u003C\u002Fli>\n\n\n\n\u003Cli>Panel điều hướng cho API lớn\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>Phù hợp cho:\u003C\u002Fstrong> Nhu cầu enterprise-grade OpenAPI docs.\u003C\u002Fp>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">9. Notion\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Không sinh ra để làm docs, nhưng Notion lại cực phổ biến để viết docs nội bộ. Drag-and-drop, typography đẹp, cộng tác dễ dàng.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>Điểm đẹp:\u003C\u002Fstrong>\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Drag-and-drop với block tùy biến\u003C\u002Fli>\n\n\n\n\u003Cli>Typography hiện đại\u003C\u002Fli>\n\n\n\n\u003Cli>Cộng tác, comment dễ dàng\u003C\u002Fli>\n\n\n\n\u003Cli>Rất hợp cho docs nhanh, ngắn\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>Phù hợp cho:\u003C\u002Fstrong> Docs nội bộ, knowledge base, quick-start guide.\u003C\u002Fp>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">10. MkDocs + Material Theme\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">MkDocs là static site generator chuyên cho docs. Khi kết hợp với Material theme, nó trở thành một trong những công cụ docs tĩnh đẹp nhất.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Nhanh, dễ host, viết bằng Markdown.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>Điểm đẹp:\u003C\u002Fstrong>\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Dựa trên Material Design\u003C\u002Fli>\n\n\n\n\u003Cli>Có search, code highlight, tab, …\u003C\u002Fli>\n\n\n\n\u003Cli>Build &amp; deploy cực nhanh\u003C\u002Fli>\n\n\n\n\u003Cli>Layout sạch, nhẹ\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>Phù hợp cho:\u003C\u002Fstrong> Dev Python &amp; dự án cần docs gọn, đẹp.\u003C\u002Fp>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Bảng So Sánh Nhanh\u003C\u002Fh2>\n\n\n\n\u003Cfigure class=\"wp-block-table\">\u003Ctable class=\"has-fixed-layout\">\u003Cthead>\u003Ctr>\u003Cth>Công cụ\u003C\u002Fth>\u003Cth>Phù hợp cho\u003C\u002Fth>\u003Cth>Open Source\u003C\u002Fth>\u003Cth>Docs Tương Tác\u003C\u002Fth>\u003Cth>Theming\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>\u003Cstrong>Apidog\u003C\u002Fstrong>\u003C\u002Ftd>\u003Ctd>API workflow all-in-one\u003C\u002Ftd>\u003Ctd>❌\u003C\u002Ftd>\u003Ctd>✅\u003C\u002Ftd>\u003Ctd>✅\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cstrong>Docusaurus\u003C\u002Fstrong>\u003C\u002Ftd>\u003Ctd>Dev docs + open source site\u003C\u002Ftd>\u003Ctd>✅\u003C\u002Ftd>\u003Ctd>❌\u003C\u002Ftd>\u003Ctd>✅\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cstrong>ReadMe\u003C\u002Fstrong>\u003C\u002Ftd>\u003Ctd>API portal + analytics\u003C\u002Ftd>\u003Ctd>❌\u003C\u002Ftd>\u003Ctd>✅\u003C\u002Ftd>\u003Ctd>✅\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cstrong>Stoplight\u003C\u002Fstrong>\u003C\u002Ftd>\u003Ctd>OpenAPI-first workflow\u003C\u002Ftd>\u003Ctd>Một phần\u003C\u002Ftd>\u003Ctd>✅\u003C\u002Ftd>\u003Ctd>✅\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cstrong>GitBook\u003C\u002Fstrong>\u003C\u002Ftd>\u003Ctd>Docs nội bộ + bên ngoài\u003C\u002Ftd>\u003Ctd>❌\u003C\u002Ftd>\u003Ctd>❌\u003C\u002Ftd>\u003Ctd>✅\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cstrong>Swagger UI\u003C\u002Fstrong>\u003C\u002Ftd>\u003Ctd>OpenAPI docs auto-gen\u003C\u002Ftd>\u003Ctd>✅\u003C\u002Ftd>\u003Ctd>✅\u003C\u002Ftd>\u003Ctd>Một phần\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cstrong>Slate\u003C\u002Fstrong>\u003C\u002Ftd>\u003Ctd>REST API + code example\u003C\u002Ftd>\u003Ctd>✅\u003C\u002Ftd>\u003Ctd>❌\u003C\u002Ftd>\u003Ctd>Một phần\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cstrong>Redocly\u003C\u002Fstrong>\u003C\u002Ftd>\u003Ctd>Enterprise API docs\u003C\u002Ftd>\u003Ctd>Một phần\u003C\u002Ftd>\u003Ctd>✅\u003C\u002Ftd>\u003Ctd>✅\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cstrong>Notion\u003C\u002Fstrong>\u003C\u002Ftd>\u003Ctd>Wiki nội bộ\u003C\u002Ftd>\u003Ctd>❌\u003C\u002Ftd>\u003Ctd>❌\u003C\u002Ftd>\u003Ctd>✅\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cstrong>MkDocs + Material\u003C\u002Fstrong>\u003C\u002Ftd>\u003Ctd>Dev docs + Python projects\u003C\u002Ftd>\u003Ctd>✅\u003C\u002Ftd>\u003Ctd>❌\u003C\u002Ftd>\u003Ctd>✅\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Ffigure>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Kết luận\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Dù bạn đang phát hành API, onboarding người dùng hay xây dựng knowledge base cho team — thì tài liệu đẹp trong năm 2025 là \u003Cstrong>không thể thiếu\u003C\u002Fstrong>.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Từ UI bóng bẩy đến code example tương tác, những công cụ trên chứng minh rằng tài liệu có thể vừa \u003Cstrong>chức năng\u003C\u002Fstrong> vừa \u003Cstrong>ấn tượng\u003C\u002Fstrong>.\u003Cbr \u002F>Dù bạn là dev solo hay team full-stack, chọn đúng công cụ sẽ giúp nội dung hấp dẫn hơn, dễ điều hướng hơn và thú vị hơn để sử dụng.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003C\u002Fp>\n","62a90592-cb3f-4c11-8ae9-227485b3efe5",{"id":223,"wordpressId":225,"filename":226,"storageKey":227,"sourceUrl":228,"mimeType":38,"altText":9,"caption":39,"width":229,"height":230,"createdAt":231,"updatedAt":43,"url":232},16248,"top-10-tools-to-create-beautiful-docs.png","wordpress\u002F2025\u002F07\u002Ftop-10-tools-to-create-beautiful-docs.png","https:\u002F\u002Fvdhoangson.com\u002Fwp-content\u002Fuploads\u002F2025\u002F07\u002Ftop-10-tools-to-create-beautiful-docs.png",1252,525,"2025-09-16T03:17:11.000Z","\u002Fuploads\u002Fwordpress\u002F2025\u002F07\u002Ftop-10-tools-to-create-beautiful-docs.png",[234],{"id":235,"wordpressId":236,"name":237,"slug":238,"parentId":39},"70748910-199c-48c1-988c-9a84b0c29bee",10,"Tài nguyên","tai-nguyen",[240,244,248],{"id":241,"wordpressId":242,"name":243,"slug":243},"6dbb6528-5970-48a5-add6-9b5c3ef607c0",302,"tools",{"id":245,"wordpressId":246,"name":247,"slug":247},"cd1ac437-c3ac-4b75-8ef5-148bbd8cd068",303,"document",{"id":249,"wordpressId":250,"name":251,"slug":251},"6a1d7947-2684-4a0c-b6ad-1d101634efe0",304,"programming","2025-07-07T02:57:05.000Z","2025-09-16T03:19:49.000Z",{"id":255,"wordpressId":256,"title":257,"slug":258,"excerpt":259,"contentHtml":260,"status":30,"authorName":31,"seoTitle":257,"seoDescription":259,"featuredMediaId":261,"featuredMedia":262,"categories":272,"tags":274,"publishedAt":288,"createdAt":288,"updatedAt":289},"412a547f-adb6-4abe-a967-46bd3cff4e59",166,"Laravel Cache – Phân biệt put, set, remember, forever, và add","laravel-cache-phan-biet-put-set-remember-forever-va-add","Caching trong Laravel là một trong những tính năng mạnh mẽ nhất giúp tăng hiệu suất ứng dụng, giảm tải database và tăng tốc độ phản hồi. Tuy nhiên, nhiều dev hay bị nhầm lẫn giữa các method như put, set, remember, forever, hay add. Bài này sẽ phân tích chi tiết sự khác nhau […]","\n\u003Cp class=\"wp-block-paragraph\">Caching trong Laravel là một trong những tính năng mạnh mẽ nhất giúp tăng hiệu suất ứng dụng, giảm tải database và tăng tốc độ phản hồi. Tuy nhiên, nhiều dev hay bị nhầm lẫn giữa các method như \u003Ccode>put\u003C\u002Fcode>, \u003Ccode>set\u003C\u002Fcode>, \u003Ccode>remember\u003C\u002Fcode>, \u003Ccode>forever\u003C\u002Fcode>, hay \u003Ccode>add\u003C\u002Fcode>. Bài này sẽ phân tích chi tiết sự khác nhau và khi nào nên dùng từng cái.\u003C\u002Fp>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">1. \u003Ccode>put()\u003C\u002Fcode> và \u003Ccode>set()\u003C\u002Fcode>\u003C\u002Fh2>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">\u003Ccode>put()\u003C\u002Fcode>\u003C\u002Fh3>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>Cache::put('username', 'sonvo', 3600);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Lưu giá trị vào cache với key \u003Ccode>username\u003C\u002Fcode>.\u003C\u002Fli>\n\n\n\n\u003Cli>Thời gian sống (TTL) là 3600 giây (1 giờ).\u003C\u002Fli>\n\n\n\n\u003Cli>Nếu key đã tồn tại → ghi đè.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">\u003Ccode>set()\u003C\u002Fcode>\u003C\u002Fh3>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>Cache::set('username', 'sonvo', 3600);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Thực chất giống \u003Cstrong>hệt\u003C\u002Fstrong> \u003Ccode>put()\u003C\u002Fcode>.\u003C\u002Fli>\n\n\n\n\u003Cli>Được thêm vào để tuân thủ \u003Cstrong>PSR-16 (Simple Cache Standard)\u003C\u002Fstrong>.\u003C\u002Fli>\n\n\n\n\u003Cli>Nếu bạn muốn code mang tính chuẩn, portable giữa các framework\u002Flib khác → dùng \u003Ccode>set()\u003C\u002Fcode>.\u003C\u002Fli>\n\n\n\n\u003Cli>Nếu code thuần Laravel → \u003Ccode>put()\u003C\u002Fcode> và \u003Ccode>set()\u003C\u002Fcode> như nhau.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">✅ \u003Cstrong>Khi dùng:\u003C\u002Fstrong> muốn lưu cache có thời gian hết hạn.\u003C\u002Fp>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">2. \u003Ccode>remember()\u003C\u002Fcode>\u003C\u002Fh2>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>Cache::remember('user:1', 3600, function () {\n    return User::find(1);\n});\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Nếu key \u003Ccode>user:1\u003C\u002Fcode> \u003Cstrong>chưa có trong cache\u003C\u002Fstrong> → chạy callback (query DB), lưu vào cache trong 3600 giây, rồi trả về.\u003C\u002Fli>\n\n\n\n\u003Cli>Nếu key đã có → lấy luôn từ cache.\u003C\u002Fli>\n\n\n\n\u003Cli>Giúp tránh code lặp kiểu: \u003Ccode>if (Cache::has('user:1')) { return Cache::get('user:1'); } else { $user = User::find(1); Cache::put('user:1', $user, 3600); return $user; }\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">✅ \u003Cstrong>Khi dùng:\u003C\u002Fstrong> muốn cache dữ liệu tốn chi phí lấy (DB query, API call) và tự động lấy lại nếu chưa có.\u003C\u002Fp>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">3. \u003Ccode>forever()\u003C\u002Fcode>\u003C\u002Fh2>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>Cache::forever('site_name', 'MiniApp');\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Lưu cache \u003Cstrong>vĩnh viễn\u003C\u002Fstrong> (cho đến khi bị xoá bằng \u003Ccode>forget()\u003C\u002Fcode> hoặc \u003Ccode>flush()\u003C\u002Fcode>).\u003C\u002Fli>\n\n\n\n\u003Cli>Không có TTL (time-to-live).\u003C\u002Fli>\n\n\n\n\u003Cli>Lưu ý: “vĩnh viễn” ở đây phụ thuộc vào driver. Ví dụ:\n\u003Cul class=\"wp-block-list\">\n\u003Cli>File \u002F Redis \u002F Database → giữ mãi cho đến khi xóa.\u003C\u002Fli>\n\n\n\n\u003Cli>APCu \u002F Memcached → vẫn có thể mất nếu server restart.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">✅ \u003Cstrong>Khi dùng:\u003C\u002Fstrong> dữ liệu ít thay đổi, quan trọng, và muốn giữ lâu dài (ví dụ: config tĩnh).\u003C\u002Fp>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">4. \u003Ccode>add()\u003C\u002Fcode>\u003C\u002Fh2>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>Cache::add('token', 'ABC123', 600);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Chỉ thêm vào cache nếu key \u003Cstrong>chưa tồn tại\u003C\u002Fstrong>.\u003C\u002Fli>\n\n\n\n\u003Cli>Nếu key đã tồn tại → \u003Cstrong>bỏ qua\u003C\u002Fstrong> (không ghi đè).\u003C\u002Fli>\n\n\n\n\u003Cli>Trả về \u003Ccode>true\u003C\u002Fcode> nếu thêm thành công, \u003Ccode>false\u003C\u002Fcode> nếu thất bại.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">✅ \u003Cstrong>Khi dùng:\u003C\u002Fstrong> lưu token, session, hoặc dữ liệu chỉ nên được set một lần và không được ghi đè.\u003C\u002Fp>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">🔍 So sánh nhanh\u003C\u002Fh2>\n\n\n\n\u003Cfigure class=\"wp-block-table\">\u003Ctable class=\"has-fixed-layout\">\u003Cthead>\u003Ctr>\u003Cth>Method\u003C\u002Fth>\u003Cth>Ghi đè key cũ?\u003C\u002Fth>\u003Cth>Có TTL không?\u003C\u002Fth>\u003Cth>Callback hỗ trợ?\u003C\u002Fth>\u003Cth>Ghi chú\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>\u003Ccode>put\u003C\u002Fcode>\u003C\u002Ftd>\u003Ctd>✅ Có\u003C\u002Ftd>\u003Ctd>✅ Có\u003C\u002Ftd>\u003Ctd>❌ Không\u003C\u002Ftd>\u003Ctd>Chuẩn Laravel\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Ccode>set\u003C\u002Fcode>\u003C\u002Ftd>\u003Ctd>✅ Có\u003C\u002Ftd>\u003Ctd>✅ Có\u003C\u002Ftd>\u003Ctd>❌ Không\u003C\u002Ftd>\u003Ctd>Alias theo PSR-16\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Ccode>remember\u003C\u002Fcode>\u003C\u002Ftd>\u003Ctd>✅ Có\u003C\u002Ftd>\u003Ctd>✅ Có\u003C\u002Ftd>\u003Ctd>✅ Có\u003C\u002Ftd>\u003Ctd>Tự động query\u002Fcache\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Ccode>forever\u003C\u002Fcode>\u003C\u002Ftd>\u003Ctd>✅ Có\u003C\u002Ftd>\u003Ctd>❌ Không\u003C\u002Ftd>\u003Ctd>❌ Không\u003C\u002Ftd>\u003Ctd>Cache vĩnh viễn\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Ccode>add\u003C\u002Fcode>\u003C\u002Ftd>\u003Ctd>❌ Không\u003C\u002Ftd>\u003Ctd>✅ Có\u003C\u002Ftd>\u003Ctd>❌ Không\u003C\u002Ftd>\u003Ctd>Chỉ set nếu chưa có\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Ffigure>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">🚀 Kết luận\u003C\u002Fh2>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>\u003Cstrong>\u003Ccode>put\u003C\u002Fcode> \u002F \u003Ccode>set\u003C\u002Fcode>\u003C\u002Fstrong>: lưu cache tạm thời (có TTL).\u003C\u002Fli>\n\n\n\n\u003Cli>\u003Cstrong>\u003Ccode>remember\u003C\u002Fcode>\u003C\u002Fstrong>: thông minh hơn, chỉ query khi cần.\u003C\u002Fli>\n\n\n\n\u003Cli>\u003Cstrong>\u003Ccode>forever\u003C\u002Fcode>\u003C\u002Fstrong>: dữ liệu vĩnh viễn.\u003C\u002Fli>\n\n\n\n\u003Cli>\u003Cstrong>\u003Ccode>add\u003C\u002Fcode>\u003C\u002Fstrong>: chỉ lưu khi chưa tồn tại.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">👉 Khi code thực tế:\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Dữ liệu thay đổi thường xuyên → \u003Ccode>put\u003C\u002Fcode> hoặc \u003Ccode>set\u003C\u002Fcode>.\u003C\u002Fli>\n\n\n\n\u003Cli>Dữ liệu cần tránh query nhiều lần → \u003Ccode>remember\u003C\u002Fcode>.\u003C\u002Fli>\n\n\n\n\u003Cli>Dữ liệu config\u002Ftĩnh → \u003Ccode>forever\u003C\u002Fcode>.\u003C\u002Fli>\n\n\n\n\u003Cli>Trường hợp tránh ghi đè → \u003Ccode>add\u003C\u002Fcode>.\u003C\u002Fli>\n\u003C\u002Ful>\n","a306442c-6e50-4776-83a2-c5127e5e933e",{"id":261,"wordpressId":263,"filename":264,"storageKey":265,"sourceUrl":266,"mimeType":267,"altText":9,"caption":39,"width":268,"height":269,"createdAt":270,"updatedAt":43,"url":271},16253,"laravel-cache.jpg","wordpress\u002F2025\u002F07\u002Flaravel-cache.jpg","https:\u002F\u002Fvdhoangson.com\u002Fwp-content\u002Fuploads\u002F2025\u002F07\u002Flaravel-cache.jpg","image\u002Fjpeg",1600,900,"2025-09-18T14:17:45.000Z","\u002Fuploads\u002Fwordpress\u002F2025\u002F07\u002Flaravel-cache.jpg",[273],{"id":71,"wordpressId":72,"name":73,"slug":74,"parentId":75},[275,279,280,283,284],{"id":276,"wordpressId":277,"name":278,"slug":79},"067b0179-56f1-41d5-886f-022093990ca8",306,"lập trình",{"id":249,"wordpressId":250,"name":251,"slug":251},{"id":281,"wordpressId":282,"name":156,"slug":156},"370739a0-0789-4ab8-83d6-6e3e8138a710",13,{"id":86,"wordpressId":87,"name":74,"slug":74},{"id":285,"wordpressId":286,"name":287,"slug":287},"7858171b-c456-40cc-a578-aaee380a5e8e",305,"cache","2025-07-07T02:57:04.000Z","2025-09-18T14:52:51.000Z",{"id":291,"wordpressId":292,"title":293,"slug":294,"excerpt":295,"contentHtml":296,"status":30,"authorName":31,"seoTitle":293,"seoDescription":295,"featuredMediaId":297,"featuredMedia":298,"categories":307,"tags":310,"publishedAt":320,"createdAt":320,"updatedAt":321},"0e29fb3a-dd03-4693-8283-0ab68e483c2e",164,"Laravel: Chạy Job bất đồng bộ hay đồng bộ?","laravel-chay-job-bat-dong-bo-hay-dong-bo","Khi làm việc với Laravel Queue, chắc hẳn bạn đã từng gặp hai phương thức quen thuộc: Nghe thì na ná nhau, nhưng thực ra cách hoạt động lại khác biệt hoàn toàn. Hiểu đúng sự khác nhau sẽ giúp bạn tối ưu hiệu năng và tránh bug ngớ ngẩn khi xử lý job. 1. […]","\n\u003Cp class=\"wp-block-paragraph\">Khi làm việc với \u003Cstrong>Laravel Queue\u003C\u002Fstrong>, chắc hẳn bạn đã từng gặp hai phương thức quen thuộc:\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>\u003Ccode>dispatch()\u003C\u002Fcode>\u003C\u002Fli>\n\n\n\n\u003Cli>\u003Ccode>dispatch_sync()\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Nghe thì na ná nhau, nhưng thực ra cách hoạt động lại khác biệt hoàn toàn. Hiểu đúng sự khác nhau sẽ giúp bạn \u003Cstrong>tối ưu hiệu năng\u003C\u002Fstrong> và \u003Cstrong>tránh bug ngớ ngẩn\u003C\u002Fstrong> khi xử lý job.\u003C\u002Fp>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">1. \u003Ccode>dispatch()\u003C\u002Fcode>: Gửi Job vào hàng đợi\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Ccode>dispatch()\u003C\u002Fcode> dùng để đưa Job vào hàng đợi (queue). Worker sẽ xử lý nó sau, theo cơ chế bất đồng bộ.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Ví dụ:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>SendWelcomeEmail::dispatch($user);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Khi chạy code trên:\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Job \u003Ccode>SendWelcomeEmail\u003C\u002Fcode> \u003Cstrong>không chạy ngay\u003C\u002Fstrong>.\u003C\u002Fli>\n\n\n\n\u003Cli>Nó sẽ được lưu vào queue (Redis, Database, SQS, RabbitMQ…).\u003C\u002Fli>\n\n\n\n\u003Cli>Worker (chạy bằng lệnh \u003Ccode>php artisan queue:work\u003C\u002Fcode>) sẽ pick nó lên và xử lý.\u003C\u002Fli>\n\n\n\n\u003Cli>Request hiện tại \u003Cstrong>không bị chặn\u003C\u002Fstrong>, trả về ngay cho user → nhanh và mượt.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">👉 Thích hợp cho:\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Gửi email, SMS.\u003C\u002Fli>\n\n\n\n\u003Cli>Xử lý file, video, ảnh.\u003C\u002Fli>\n\n\n\n\u003Cli>Đồng bộ dữ liệu với service khác.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">2. \u003Ccode>dispatch_sync()\u003C\u002Fcode>: Chạy ngay lập tức\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Ngược lại, \u003Ccode>dispatch_sync()\u003C\u002Fcode> sẽ bỏ qua queue và chạy Job \u003Cstrong>ngay trong tiến trình hiện tại\u003C\u002Fstrong>.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Ví dụ:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>WriteAuditLog::dispatchSync($user);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Khi chạy code trên:\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Job \u003Ccode>WriteAuditLog\u003C\u002Fcode> \u003Cstrong>thực thi ngay\u003C\u002Fstrong>.\u003C\u002Fli>\n\n\n\n\u003Cli>Không cần worker, không cần queue.\u003C\u002Fli>\n\n\n\n\u003Cli>Request sẽ \u003Cstrong>chờ job chạy xong\u003C\u002Fstrong> mới tiếp tục.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">👉 Thích hợp cho:\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Ghi log quan trọng.\u003C\u002Fli>\n\n\n\n\u003Cli>Tính toán cần kết quả ngay.\u003C\u002Fli>\n\n\n\n\u003Cli>Các tác vụ nhỏ, không tốn nhiều thời gian.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">3. Khi nào dùng cái nào?\u003C\u002Fh2>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>\u003Cstrong>Dùng \u003Ccode>dispatch()\u003C\u002Fcode>\u003C\u002Fstrong> khi:\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Tác vụ nặng.\u003C\u002Fli>\n\n\n\n\u003Cli>Không cần kết quả ngay.\u003C\u002Fli>\n\n\n\n\u003Cli>Bạn muốn tăng tốc request trả về cho user.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\n\n\n\u003Cli>\u003Cstrong>Dùng \u003Ccode>dispatch_sync()\u003C\u002Fcode>\u003C\u002Fstrong> khi:\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Tác vụ nhỏ, cần chạy ngay.\u003C\u002Fli>\n\n\n\n\u003Cli>Muốn đảm bảo chạy xong trước khi qua bước tiếp theo.\u003C\u002Fli>\n\n\n\n\u003Cli>Không muốn phụ thuộc vào queue worker.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">4. Lưu ý\u003C\u002Fh2>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Trước Laravel 8 có \u003Ccode>dispatchNow()\u003C\u002Fcode>, nhưng đã bị thay thế bởi \u003Ccode>dispatchSync()\u003C\u002Fcode>.\u003C\u002Fli>\n\n\n\n\u003Cli>Nếu bạn dùng \u003Ccode>dispatch()\u003C\u002Fcode> mà không bật queue worker, job sẽ \u003Cstrong>không bao giờ chạy\u003C\u002Fstrong> → bug silent rất khó chịu.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">5. Kết luận\u003C\u002Fh2>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>\u003Ccode>dispatch()\u003C\u002Fcode> = chạy bất đồng bộ (qua queue).\u003C\u002Fli>\n\n\n\n\u003Cli>\u003Ccode>dispatch_sync()\u003C\u002Fcode> = chạy đồng bộ, ngay lập tức.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">👉 Hãy nhớ:\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>\u003Cstrong>Nặng → dispatch.\u003C\u002Fstrong>\u003C\u002Fli>\n\n\n\n\u003Cli>\u003Cstrong>Nhẹ &amp; cần ngay → dispatch_sync.\u003C\u002Fstrong>\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Đơn giản vậy thôi, nhưng áp dụng đúng thì hệ thống Laravel của bạn vừa \u003Cstrong>nhanh hơn\u003C\u002Fstrong>, vừa \u003Cstrong>ổn định hơn\u003C\u002Fstrong>.\u003C\u002Fp>\n","f19724a6-8553-4d5c-930e-58b1fcf1b2ab",{"id":297,"wordpressId":299,"filename":300,"storageKey":301,"sourceUrl":302,"mimeType":38,"altText":9,"caption":39,"width":303,"height":304,"createdAt":305,"updatedAt":43,"url":306},16256,"laravel.png","wordpress\u002F2025\u002F07\u002Flaravel.png","https:\u002F\u002Fvdhoangson.com\u002Fwp-content\u002Fuploads\u002F2025\u002F07\u002Flaravel.png",1930,1090,"2025-09-26T08:50:47.000Z","\u002Fuploads\u002Fwordpress\u002F2025\u002F07\u002Flaravel.png",[308,309],{"id":71,"wordpressId":72,"name":73,"slug":74,"parentId":75},{"id":75,"wordpressId":77,"name":78,"slug":79,"parentId":39},[311,315,316],{"id":312,"wordpressId":313,"name":314,"slug":314},"92d3cf4d-2362-4b7d-a6d2-3aa29dca8ad0",308,"dispatch",{"id":86,"wordpressId":87,"name":74,"slug":74},{"id":317,"wordpressId":318,"name":319,"slug":319},"68c0949f-f079-493b-9f66-9bbdbf0168af",307,"queue","2025-07-07T02:57:03.000Z","2025-09-26T08:52:03.000Z",{"id":323,"wordpressId":324,"title":325,"slug":326,"excerpt":327,"contentHtml":328,"status":30,"authorName":31,"seoTitle":325,"seoDescription":327,"featuredMediaId":329,"featuredMedia":330,"categories":339,"tags":345,"publishedAt":353,"createdAt":353,"updatedAt":354},"d4c335c4-f50d-4245-aee5-dd8377fc9517",55,"Hostinger – Lựa chọn Hosting giá rẻ, chất lượng cao cho website của bạn","hostinger-lua-chon-hosting-gia-re-chat-luong-cao-cho-website-cua-ban","Hostinger là gì? Hostinger là một trong những nhà cung cấp dịch vụ hosting lớn nhất thế giới, nổi bật nhờ giá cả phải chăng, tốc độ nhanh và hỗ trợ khách hàng chuyên nghiệp. Với hơn 29 triệu người dùng tại 178 quốc gia, Hostinger đang là lựa chọn số 1 cho cá nhân, […]","\n\u003Ch2 class=\"wp-block-heading\">Hostinger là gì?\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Ca href=\"https:\u002F\u002Fhostinger.vn?REFERRALCODE=IZBVDHOANYOJ\" target=\"_blank\" rel=\"noopener noreferrer\">Hostinger\u003C\u002Fa> là một trong những nhà cung cấp dịch vụ hosting lớn nhất thế giới, nổi bật nhờ \u003Cstrong>giá cả phải chăng\u003C\u002Fstrong>, \u003Cstrong>tốc độ nhanh\u003C\u002Fstrong> và \u003Cstrong>hỗ trợ khách hàng chuyên nghiệp\u003C\u002Fstrong>. Với hơn 29 triệu người dùng tại 178 quốc gia, Hostinger đang là lựa chọn số 1 cho cá nhân, blogger, startup và doanh nghiệp nhỏ.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Ngoài các giải pháp web hosting chất lượng, \u003Ca href=\"https:\u002F\u002Fhostinger.vn?REFERRALCODE=IZBVDHOANYOJ\" target=\"_blank\" rel=\"noopener noreferrer\">Hostinger\u003C\u002Fa> còn cung cấp dịch vụ đăng ký tên miền, VPS, Email,… mang đến cho người dùng nhiều lựa chọn linh hoạt trong việc phát triển và quản lý website của mình.\u003C\u002Fp>\n\n\n\n\u003Cfigure class=\"wp-block-image size-large\">\u003Cimg alt=\"Hostinger 1024x481\" class=\"wp-image-16343 lazyload\" title=\"Hostinger – Lựa chọn Hosting giá rẻ, chất lượng cao cho website của bạn\" \u002F>\u003C\u002Ffigure>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Ưu điểm nổi bật của Hostinger\u003C\u002Fh2>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">1. Giá cả cực kỳ cạnh tranh\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Hostinger nổi tiếng với gói hosting chỉ từ \u003Cstrong>\u003Cstrong>26.900\u003C\u002Fstrong>đ\u002Ftháng\u003C\u002Fstrong>, giúp bạn tiết kiệm chi phí nhưng vẫn có chất lượng tốt.\u003C\u002Fp>\n\n\n\n\u003Cfigure class=\"wp-block-image size-large\">\u003Cimg alt=\"Hostinger Price 1024x380\" class=\"wp-image-16344 lazyload\" title=\"Hostinger – Lựa chọn Hosting giá rẻ, chất lượng cao cho website của bạn\" \u002F>\u003C\u002Ffigure>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">2. Tốc độ và hiệu năng mạnh mẽ\u003C\u002Fh3>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Sử dụng \u003Cstrong>LiteSpeed Web Server\u003C\u002Fstrong> và \u003Cstrong>cache tối ưu\u003C\u002Fstrong>\u003C\u002Fli>\n\n\n\n\u003Cli>Có trung tâm dữ liệu toàn cầu, trong đó có Singapore (phù hợp với thị trường Việt Nam)\u003C\u002Fli>\n\n\n\n\u003Cli>Uptime cam kết 99.9%\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">👉 \u003Cem>Hình ảnh gợi ý:\u003C\u002Fem> Biểu đồ tốc độ tải trang hoặc ảnh minh họa server.\u003C\u002Fp>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">3. Giao diện quản lý dễ dùng (hPanel)\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Khác với cPanel truyền thống, Hostinger có \u003Cstrong>hPanel\u003C\u002Fstrong> – giao diện trực quan, thân thiện với người mới, dễ thao tác cài đặt WordPress, tạo email, quản lý tên miền.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">hPanel của Hostinger hPanel, bảng điều khiển tùy chỉnh của \u003Ca href=\"https:\u002F\u002Fhostinger.vn?REFERRALCODE=IZBVDHOANYOJ\" target=\"_blank\" rel=\"noopener noreferrer\">Hostinger\u003C\u002Fa>, được thiết kế với giao diện gọn gàng, dễ sử dụng và rất trực quan. Các tính năng được phân loại rõ ràng theo từng mục, với biểu tượng tối giản, mang lại cảm giác quen thuộc và dễ dàng tiếp cận. Người dùng có thể dễ dàng tìm thấy mọi thứ mình cần, giúp cho việc thao tác trở nên nhanh chóng và hiệu quả.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Đặc biệt, giao diện \u003Ca href=\"https:\u002F\u002Fhostinger.vn?REFERRALCODE=IZBVDHOANYOJ\" target=\"_blank\" rel=\"noopener noreferrer\">hPanel\u003C\u002Fa> trực quan đến mức ngay cả những người chưa có kinh nghiệm vẫn có thể sử dụng một cách hiệu quả, mang lại trải nghiệm dễ chịu cho cả người mới bắt đầu và người dùng chuyên nghiệp.\u003C\u002Fp>\n\n\n\n\u003Cfigure class=\"wp-block-image size-large\">\u003Cimg alt=\"Hostinger 1 1024x532\" class=\"wp-image-16345 lazyload\" title=\"Hostinger – Lựa chọn Hosting giá rẻ, chất lượng cao cho website của bạn\" \u002F>\u003C\u002Ffigure>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Các dịch vụ chính của Hostinger\u003C\u002Fh2>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Shared Hosting (giá rẻ, phù hợp cá nhân\u002Fblogger)\u003C\u002Fli>\n\n\n\n\u003Cli>WordPress Hosting (tối ưu cho website WordPress)\u003C\u002Fli>\n\n\n\n\u003Cli>VPS Hosting (dành cho dự án cần cấu hình cao)\u003C\u002Fli>\n\n\n\n\u003Cli>Cloud Hosting (linh hoạt, hiệu suất mạnh)\u003C\u002Fli>\n\n\n\n\u003Cli>Tên miền &amp; Email doanh nghiệp\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Tại sao nên chọn Hostinger cho website của bạn?\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">✔ Chi phí hợp lý cho người mới bắt đầu\u003Cbr \u002F>✔ Tốc độ và hiệu năng ổn định\u003Cbr \u002F>✔ Dịch vụ hỗ trợ thân thiện, chuyên nghiệp\u003Cbr \u002F>✔ Có nhiều gói linh hoạt, dễ nâng cấp khi cần\u003C\u002Fp>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Kết luận\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Nếu bạn đang tìm kiếm một dịch vụ hosting \u003Cstrong>giá rẻ, tốc độ cao, dễ sử dụng\u003C\u002Fstrong> thì \u003Cstrong>Hostinger là lựa chọn hoàn hảo\u003C\u002Fstrong>. Bất kể bạn là blogger, startup hay doanh nghiệp nhỏ – \u003Ca href=\"https:\u002F\u002Fhostinger.vn?REFERRALCODE=IZBVDHOANYOJ\" target=\"_blank\" rel=\"noopener noreferrer\">Hostinger\u003C\u002Fa> đều có gói dịch vụ phù hợp.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">👉 Đăng ký ngay tại \u003Ca href=\"https:\u002F\u002Fhostinger.vn?REFERRALCODE=IZBVDHOANYOJ\" target=\"_blank\" rel=\"noopener noreferrer\">Hostinger.vn\u003C\u002Fa> để nhận ưu đãi giảm giá đặc biệt!\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003C\u002Fp>\n","a0258bc2-f98f-4d06-bd25-433d8826520b",{"id":329,"wordpressId":331,"filename":332,"storageKey":333,"sourceUrl":334,"mimeType":38,"altText":9,"caption":39,"width":335,"height":336,"createdAt":337,"updatedAt":43,"url":338},16345,"hostinger-1.png","wordpress\u002F2025\u002F07\u002Fhostinger-1.png","https:\u002F\u002Fvdhoangson.com\u002Fwp-content\u002Fuploads\u002F2025\u002F07\u002Fhostinger-1.png",1899,986,"2025-09-30T03:16:48.000Z","\u002Fuploads\u002Fwordpress\u002F2025\u002F07\u002Fhostinger-1.png",[340],{"id":341,"wordpressId":342,"name":343,"slug":344,"parentId":39},"c58caaed-3eb1-49e4-81e3-93e57f173069",282,"Hosting","hosting",[346,350],{"id":347,"wordpressId":348,"name":349,"slug":349},"5130d829-b607-42df-9c6e-4edb47f6566d",311,"hosinger",{"id":351,"wordpressId":352,"name":344,"slug":344},"4a39173d-8c97-4976-a21c-868702d0db45",312,"2025-07-07T02:56:38.000Z","2025-09-30T03:20:46.000Z",{"id":356,"wordpressId":357,"title":358,"slug":359,"excerpt":360,"contentHtml":361,"status":30,"authorName":31,"seoTitle":358,"seoDescription":360,"featuredMediaId":39,"featuredMedia":39,"categories":362,"tags":368,"publishedAt":378,"createdAt":378,"updatedAt":379},"dc2a8416-4ba0-494e-82b3-c077e7307835",19,"WSL2: Xóa Zone.Identifier files","wsl2-xoa-zone-identifier-files","1. Zone.Identifier là gì? Zone.Identifier là một Alternate Data Stream (ADS) trong hệ thống file NTFS của Windows. Khi bạn tải một file từ Internet, Windows sẽ tự động gắn thêm một luồng dữ liệu ẩn tên là Zone.Identifier vào file đó để đánh dấu “nguồn gốc không đáng tin cậy”. Thông tin này được […]","\n\u003Ch2 class=\"wp-block-heading\">1. Zone.Identifier là gì?\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Ccode>Zone.Identifier\u003C\u002Fcode> là một \u003Cstrong>Alternate Data Stream (ADS)\u003C\u002Fstrong> trong hệ thống file NTFS của Windows. Khi bạn tải một file từ Internet, Windows sẽ tự động gắn thêm một luồng dữ liệu ẩn tên là \u003Ccode>Zone.Identifier\u003C\u002Fcode> vào file đó để đánh dấu “nguồn gốc không đáng tin cậy”.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Thông tin này được dùng bởi SmartScreen, Windows Defender, hoặc trình duyệt như Edge để hiển thị cảnh báo khi bạn mở các file tải về từ Internet.\u003C\u002Fp>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">Nội dung ví dụ trong file Zone.Identifier:\u003C\u002Fh3>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>\u003Ccode>[ZoneTransfer]\nZoneId=3\n\u003C\u002Fcode>\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>\u003Ccode>ZoneId=3\u003C\u002Fcode> nghĩa là file đến từ Internet.\u003C\u002Fli>\n\n\n\n\u003Cli>\u003Ccode>ZoneId=2\u003C\u002Fcode> là từ Intranet.\u003C\u002Fli>\n\n\n\n\u003Cli>\u003Ccode>ZoneId=0\u003C\u002Fcode> là từ máy nội bộ (Local Machine).\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">2. Zone.Identifier trên WSL2\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Mặc dù WSL2 chạy trên Linux kernel và sử dụng hệ thống file Linux (ext4), nhưng khi bạn \u003Cstrong>gắn volume Windows\u003C\u002Fstrong> vào WSL2 (thường là \u003Ccode>\u002Fmnt\u002Fc\u003C\u002Fcode>, \u003Ccode>\u002Fmnt\u002Fd\u003C\u002Fcode>,…), bạn đang thao tác trên hệ thống NTFS. Vì vậy, các file được tải về từ Internet và lưu ở \u003Ccode>C:\u003C\u002Fcode> vẫn có thể chứa \u003Ccode>Zone.Identifier\u003C\u002Fcode>.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Ví dụ, nếu bạn mở một file \u003Ccode>.ps1\u003C\u002Fcode>, \u003Ccode>.exe\u003C\u002Fcode>, hoặc \u003Ccode>.zip\u003C\u002Fcode> trên WSL2 và bị lỗi như:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>\u003Ccode>PowerShell script cannot be loaded because it is from an untrusted source\n\u003C\u002Fcode>\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">hoặc\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>\u003Ccode>Operation not permitted (Permission denied)\n\u003C\u002Fcode>\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">thì có thể nguyên nhân là do luồng Zone.Identifier.\u003C\u002Fp>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">3. Cách xem Zone.Identifier\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Bạn có thể kiểm tra xem một file có luồng \u003Ccode>Zone.Identifier\u003C\u002Fcode> không bằng lệnh trong CMD:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>\u003Ccode>more &lt; file.txt:Zone.Identifier\n\u003C\u002Fcode>\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Hoặc dùng PowerShell:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>\u003Ccode>Get-Content -Path .\\file.txt -Stream Zone.Identifier\n\u003C\u002Fcode>\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">4. Cách xóa Zone.Identifier hàng loạt trên WSL2\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Vì WSL2 không hỗ trợ trực tiếp Alternate Data Streams, bạn cần thực hiện việc này thông qua \u003Cstrong>PowerShell\u003C\u002Fstrong> bên ngoài WSL (trên Windows host). Dưới đây là các cách xóa hàng loạt.\u003C\u002Fp>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">\u003Cstrong>Cách 1: Dùng PowerShell để xóa Zone.Identifier hàng loạt\u003C\u002Fstrong>\u003C\u002Fh3>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>\u003Ccode>Get-ChildItem -Path \"D:\\MyFolder\" -Recurse -Stream Zone.Identifier | ForEach-Object {\n    Remove-Item -Path $_.Filename -Stream Zone.Identifier -Force\n}\n\u003C\u002Fcode>\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cblockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n\u003Cp class=\"wp-block-paragraph\">💡 Giải thích:\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>\u003Ccode>-Stream Zone.Identifier\u003C\u002Fcode>: chỉ định luồng cần xóa.\u003C\u002Fli>\n\n\n\n\u003Cli>\u003Ccode>-Recurse\u003C\u002Fcode>: tìm trong thư mục con.\u003C\u002Fli>\n\n\n\n\u003Cli>\u003Ccode>-Force\u003C\u002Fcode>: tránh lỗi nếu không có quyền.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fblockquote>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">\u003Cstrong>Cách 2: Bỏ chặn file thay vì xóa trực tiếp\u003C\u002Fstrong>\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Nếu bạn chỉ muốn “gỡ chặn” file mà không đụng đến stream:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>\u003Ccode>Get-ChildItem -Path \"D:\\MyFolder\" -Recurse | Unblock-File\n\u003C\u002Fcode>\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Lệnh này tương đương với việc bạn click chuột phải vào file → Properties → và bỏ chọn \u003Cstrong>“Unblock”\u003C\u002Fstrong>.\u003C\u002Fp>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">\u003Cstrong>Cách 3: Chạy từ WSL2 bằng cách gọi PowerShell\u003C\u002Fstrong>\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Nếu bạn đang trong WSL2, bạn có thể gọi lệnh PowerShell từ shell như sau:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>\u003Ccode>powershell.exe -Command \"Get-ChildItem -Path 'D:\\MyFolder' -Recurse | Unblock-File\"\n\u003C\u002Fcode>\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cblockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n\u003Cp class=\"wp-block-paragraph\">📌 Lưu ý:\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Thư mục \u003Ccode>D:\\MyFolder\u003C\u002Fcode> phải dùng path theo Windows.\u003C\u002Fli>\n\n\n\n\u003Cli>Đảm bảo bạn có quyền admin nếu xóa trong thư mục hệ thống.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fblockquote>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>Cách 4: Chạy từ WSL2 xóa hàng loạt\u003C\u002Fstrong>\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Truy cập vào WSL và chạy câu lệnh\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>find . -name \"*:Zone.Identifier\" -type f -delete\u003C\u002Fcode>\u003C\u002Fpre>\n",[363],{"id":364,"wordpressId":365,"name":366,"slug":367,"parentId":39},"3a713269-b696-4ecf-b8f1-9b1762050b19",252,"Snippets","snippets",[369,373],{"id":370,"wordpressId":371,"name":372,"slug":372},"795493bf-409b-4990-b1ac-ce0bb24564bc",253,"wsl2",{"id":374,"wordpressId":375,"name":376,"slug":377},"4e155b44-83be-448e-b211-a01704365125",254,"Zone.Identifier","zone-identifier","2025-07-07T02:56:24.000Z","2025-08-01T03:10:26.000Z",{"id":381,"wordpressId":382,"title":383,"slug":384,"excerpt":385,"contentHtml":386,"status":30,"authorName":31,"seoTitle":383,"seoDescription":385,"featuredMediaId":387,"featuredMedia":388,"categories":395,"tags":401,"publishedAt":414,"createdAt":414,"updatedAt":415},"510941a5-5b19-4186-aa78-878bd4f0b809",1995,"WordPress – Nền Tảng Xây Dựng Website Mạnh Mẽ và Dễ Dùng","wordpress-nen-tang-xay-dung-website-manh-me-va-de-dung","1. WordPress là gì? WordPress là một hệ quản trị nội dung (CMS – Content Management System) mã nguồn mở, được phát hành lần đầu vào năm 2003. Nó cho phép người dùng dễ dàng tạo và quản lý các website, blog, trang tin tức, cửa hàng trực tuyến, portfolio, và nhiều loại hình trang […]","\n\u003Ch2 class=\"wp-block-heading\">1. WordPress là gì?\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>WordPress\u003C\u002Fstrong> là một hệ quản trị nội dung (CMS – Content Management System) mã nguồn mở, được phát hành lần đầu vào năm 2003. Nó cho phép người dùng dễ dàng tạo và quản lý các website, blog, trang tin tức, cửa hàng trực tuyến, portfolio, và nhiều loại hình trang web khác mà không cần phải giỏi lập trình.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Hiện nay, hơn \u003Cstrong>43% các website trên toàn thế giới\u003C\u002Fstrong> đang sử dụng WordPress – điều đó cho thấy sự phổ biến và sức mạnh của nền tảng này.\u003C\u002Fp>\n\n\n\n\u003Cfigure class=\"wp-block-image aligncenter size-large\">\u003Cimg width=\"800\" height=\"490\" alt=\"Wordpress La Gi Uu Nhuoc Diem Tai Sao Nen Dung De Thiet Ke\" class=\"wp-image-1997 lazyload\" title=\"WordPress – Nền Tảng Xây Dựng Website Mạnh Mẽ và Dễ Dùng\" \u002F>\u003C\u002Ffigure>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">2. Ưu điểm nổi bật của WordPress\u003C\u002Fh2>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">✅ Dễ sử dụng\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Giao diện quản trị trực quan, thân thiện với người dùng. Người không chuyên kỹ thuật vẫn có thể tạo website chỉ sau vài cú click chuột.\u003C\u002Fp>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">✅ Mã nguồn mở và miễn phí\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Bạn có thể tải về, sử dụng và tùy chỉnh WordPress hoàn toàn miễn phí. Cộng đồng phát triển đông đảo liên tục cập nhật và hỗ trợ.\u003C\u002Fp>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">✅ Kho plugin &amp; theme phong phú\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">WordPress có hàng \u003Cstrong>nghìn giao diện (theme)\u003C\u002Fstrong> và \u003Cstrong>plugin (tiện ích mở rộng)\u003C\u002Fstrong> miễn phí và trả phí, giúp bạn dễ dàng tùy biến và mở rộng tính năng website mà không cần viết code.\u003C\u002Fp>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">✅ SEO tốt\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">WordPress được xây dựng tối ưu cho SEO, hỗ trợ nhiều plugin mạnh mẽ như \u003Cstrong>Yoast SEO\u003C\u002Fstrong>, \u003Cstrong>Rank Math\u003C\u002Fstrong>, giúp website của bạn thân thiện với công cụ tìm kiếm.\u003C\u002Fp>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">✅ Hỗ trợ thương mại điện tử\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Với plugin \u003Cstrong>WooCommerce\u003C\u002Fstrong>, bạn có thể biến website WordPress thành một \u003Cstrong>cửa hàng online\u003C\u002Fstrong> mạnh mẽ, đầy đủ chức năng giỏ hàng, thanh toán, vận chuyển,…\u003C\u002Fp>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">3. WordPress.org và WordPress.com khác nhau gì?\u003C\u002Fh2>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>\u003Cstrong>WordPress.org\u003C\u002Fstrong>: Bạn tự tải mã nguồn về và cài đặt lên hosting riêng. Tự do tùy chỉnh và kiểm soát mọi thứ.\u003C\u002Fli>\n\n\n\n\u003Cli>\u003Cstrong>WordPress.com\u003C\u002Fstrong>: Nền tảng dạng dịch vụ, bạn tạo website nhanh chóng nhưng bị giới hạn quyền kiểm soát và cần trả phí nếu muốn mở rộng tính năng.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">4. Ai nên dùng WordPress?\u003C\u002Fh2>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Người muốn \u003Cstrong>viết blog cá nhân\u003C\u002Fstrong> hoặc chia sẻ kiến thức.\u003C\u002Fli>\n\n\n\n\u003Cli>Doanh nghiệp nhỏ cần \u003Cstrong>website giới thiệu công ty\u003C\u002Fstrong>.\u003C\u002Fli>\n\n\n\n\u003Cli>Cá nhân hoặc tổ chức cần \u003Cstrong>bán hàng online\u003C\u002Fstrong>.\u003C\u002Fli>\n\n\n\n\u003Cli>Freelancer muốn xây dựng \u003Cstrong>portfolio cá nhân\u003C\u002Fstrong>.\u003C\u002Fli>\n\n\n\n\u003Cli>Các cơ quan báo chí cần \u003Cstrong>hệ thống tin tức\u003C\u002Fstrong> linh hoạt.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">5. Kết luận\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">WordPress là lựa chọn tuyệt vời cho bất kỳ ai muốn xây dựng website nhanh chóng, hiệu quả và tiết kiệm chi phí. Với cộng đồng người dùng lớn mạnh và tài liệu phong phú, WordPress luôn là nền tảng đáng tin cậy cho cả người mới bắt đầu lẫn chuyên gia.\u003C\u002Fp>\n","2a62fb4c-e907-4e9e-9a2d-0327d06ca293",{"id":387,"wordpressId":389,"filename":390,"storageKey":391,"sourceUrl":392,"mimeType":38,"altText":9,"caption":39,"width":40,"height":41,"createdAt":393,"updatedAt":43,"url":394},1996,"ChatGPT-Image-20_12_29-6-thg-7-2025.png","wordpress\u002F2025\u002F07\u002FChatGPT-Image-20_12_29-6-thg-7-2025.png","https:\u002F\u002Fvdhoangson.com\u002Fwp-content\u002Fuploads\u002F2025\u002F07\u002FChatGPT-Image-20_12_29-6-thg-7-2025.png","2025-07-06T13:12:36.000Z","\u002Fuploads\u002Fwordpress\u002F2025\u002F07\u002FChatGPT-Image-20_12_29-6-thg-7-2025.png",[396],{"id":397,"wordpressId":398,"name":399,"slug":400,"parentId":39},"fd05ba23-027a-427a-a899-5170af2644cc",24,"Wordpress","wordpress",[402,405,409],{"id":403,"wordpressId":404,"name":400,"slug":400},"b234f4c8-9dba-4a6d-a36f-0a3a981c523d",31,{"id":406,"wordpressId":407,"name":408,"slug":408},"8b46f0a8-5194-421d-ad1f-9cdcf4850de8",32,"website",{"id":410,"wordpressId":411,"name":412,"slug":413},"6f0972e2-24f0-4be2-b6dc-1b5ddfa95a7e",33,"mã nguồn mở","ma-nguon-mo","2025-07-06T13:20:56.000Z","2025-07-07T02:02:39.000Z",{"id":417,"wordpressId":418,"title":419,"slug":420,"excerpt":421,"contentHtml":422,"status":30,"authorName":31,"seoTitle":419,"seoDescription":421,"featuredMediaId":423,"featuredMedia":424,"categories":433,"tags":436,"publishedAt":457,"createdAt":457,"updatedAt":458},"18a01359-e7c1-493e-8874-395c9f637ef4",1991,"Filament đã chạy “native” trên Android!","filament-da-chay-native-tren-android","Filament – bộ admin panel bóng bẩy, mạnh mẽ mà bạn từng dùng trong trình duyệt – giờ đã chạy ngon lành trong app Android thật sự, offline không cần mạng, và tất nhiên là powered by… Laravel + PHP! 👊 Cộng đồng Laravel quá bá đạo Từ khi ra mắt NativePHP for Mobile, hàng […]","\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>Filament\u003C\u002Fstrong> – bộ admin panel bóng bẩy, mạnh mẽ mà bạn từng dùng trong trình duyệt – giờ \u003Cstrong>đã chạy ngon lành trong app Android thật sự\u003C\u002Fstrong>, offline không cần mạng, và tất nhiên là powered by… Laravel + PHP!\u003C\u002Fp>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">👊 Cộng đồng Laravel quá bá đạo\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Từ khi ra mắt \u003Cstrong>NativePHP for Mobile\u003C\u002Fstrong>, hàng ngàn dev Laravel đã đứng lên nói:\u003C\u002Fp>\n\n\n\n\u003Cblockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n\u003Cp class=\"wp-block-paragraph\">“Tôi muốn làm app native bằng chính ngôn ngữ lập trình tôi đã biết!”\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Và nhờ đó:\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>✅ Hỗ trợ Android (sau iOS)\u003C\u002Fli>\n\n\n\n\u003Cli>✅ Có hot reload (khỏi rebuild mỗi lần sửa)\u003C\u002Fli>\n\n\n\n\u003Cli>✅ Đang làm OTA update, phân phối build, Zephpyr v.v.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Đặc biệt: đã xử lý xong cục xương khó nhất – \u003Cstrong>hỗ trợ intl extension\u003C\u002Fstrong> (mấu chốt để format số, tiền, ngày… đúng chuẩn quốc tế).\u003C\u002Fp>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">🧠 Thách thức intl trên Android\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Bình thường \u003Ccode>intl\u003C\u002Fcode> chạy phía server. Nhưng đưa nó vào Android? Hơi bị khoai!\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Phải:\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Build lại ICU (bộ xử lý định dạng quốc tế)\u003C\u002Fli>\n\n\n\n\u003Cli>Tùy chỉnh để tương thích với Android\u003C\u002Fli>\n\n\n\n\u003Cli>Test, fail, debug liên tục\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Nhưng giờ… \u003Cstrong>nó hoạt động mượt như mơ\u003C\u002Fstrong>.\u003C\u002Fp>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">🎁 Đổi lại 30MB là trải nghiệm xịn xò\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Chấp nhận tăng ~30MB app size, bạn có được:\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>🌍 Format số, tiền, ngày đúng locale\u003C\u002Fli>\n\n\n\n\u003Cli>⚙️ Dùng mọi component phức tạp của Filament\u003C\u002Fli>\n\n\n\n\u003Cli>📦 Tương thích nhiều package Laravel hơn\u003C\u002Fli>\n\n\n\n\u003Cli>🚫 Và không cần server! Offline 100%\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">🔮 Tiếp theo: iOS &amp; nhiều điều thú vị\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Team đang:\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Xây \u003Cstrong>Zephpyr\u003C\u002Fstrong> – hệ thống build và phân phối\u003C\u002Fli>\n\n\n\n\u003Cli>Tối ưu app nhẹ hơn nếu không cần intl\u003C\u002Fli>\n\n\n\n\u003Cli>Mở rộng hỗ trợ package Laravel\u003C\u002Fli>\n\n\n\n\u003Cli>Tăng cường CLI cho quản lý thiết bị\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">🧡 Laravel không chỉ là web nữa!\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Filament chạy native là cột mốc lịch sử.\u003Cbr \u002F>Laravel dev giờ không chỉ là web dev.\u003Cbr \u002F>Bạn có thể làm app mobile “xịn” mà không rời PHP!\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Cộng đồng chính là điều làm nên kỳ tích này.\u003Cbr \u002F>Giờ thì… \u003Cstrong>hãy đi tạo nên điều tuyệt vời tiếp theo!\u003C\u002Fstrong> 💪\u003C\u002Fp>\n","2c992a70-8162-4353-89e6-31b44bdb3053",{"id":423,"wordpressId":425,"filename":426,"storageKey":427,"sourceUrl":428,"mimeType":38,"altText":9,"caption":39,"width":429,"height":430,"createdAt":431,"updatedAt":43,"url":432},1992,"nativephp-filament2.png","wordpress\u002F2025\u002F06\u002Fnativephp-filament2.png","https:\u002F\u002Fvdhoangson.com\u002Fwp-content\u002Fuploads\u002F2025\u002F06\u002Fnativephp-filament2.png",2200,1100,"2025-06-24T08:25:13.000Z","\u002Fuploads\u002Fwordpress\u002F2025\u002F06\u002Fnativephp-filament2.png",[434,435],{"id":71,"wordpressId":72,"name":73,"slug":74,"parentId":75},{"id":153,"wordpressId":154,"name":155,"slug":156,"parentId":75},[437,441,446,451,452],{"id":438,"wordpressId":439,"name":440,"slug":440},"585133be-eb4e-4805-81e9-edda1bd562c1",27,"android",{"id":442,"wordpressId":443,"name":444,"slug":445},"ff9083f3-ab51-42d0-b566-fd848819ee05",28,"NativePHP","nativephp",{"id":447,"wordpressId":448,"name":449,"slug":450},"6b3222d8-768d-42ba-bceb-01ce9089a659",26,"native app","native-app",{"id":86,"wordpressId":87,"name":74,"slug":74},{"id":453,"wordpressId":454,"name":455,"slug":456},"643e8211-d57f-481e-ad4e-1aa939a3fc04",25,"Filament","filament","2025-06-24T08:27:38.000Z","2025-06-24T08:27:40.000Z",{"id":460,"wordpressId":461,"title":462,"slug":463,"excerpt":464,"contentHtml":465,"status":30,"authorName":31,"seoTitle":462,"seoDescription":464,"featuredMediaId":466,"featuredMedia":467,"categories":474,"tags":479,"publishedAt":493,"createdAt":493,"updatedAt":494},"901a6faa-8ffd-48c1-be0e-f6b8eec1c610",1980,"🐳 Giới thiệu Docker: Tại sao lập trình viên hiện đại nên sử dụng?","gioi-thieu-docker-tai-sao-lap-trinh-vien-hien-dai-nen-su-dung","Trong thời đại công nghệ phát triển nhanh chóng, việc xây dựng, triển khai và vận hành ứng dụng một cách nhất quán và hiệu quả là một thách thức lớn. Đó là lý do tại sao Docker – một công cụ “ảo hóa nhẹ” – đã trở thành lựa chọn hàng đầu của các lập trình viên, DevOps và kỹ sư hệ thống trên toàn thế giới.","\n\u003Cp class=\"wp-block-paragraph\">Trong thời đại công nghệ phát triển nhanh chóng, việc xây dựng, triển khai và vận hành ứng dụng một cách nhất quán và hiệu quả là một thách thức lớn. Đó là lý do tại sao \u003Cstrong>Docker\u003C\u002Fstrong> – một công cụ “ảo hóa nhẹ” – đã trở thành lựa chọn hàng đầu của các lập trình viên, DevOps và kỹ sư hệ thống trên toàn thế giới.\u003C\u002Fp>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Docker là gì?\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Docker là một nền tảng mã nguồn mở giúp bạn đóng gói (package), phân phối (ship) và chạy (run) ứng dụng trong các \u003Cstrong>container\u003C\u002Fstrong>. Mỗi container là một môi trường độc lập, nhẹ, và có thể chạy ở bất kỳ đâu – từ máy local, server, đến cloud – mà không gặp vấn đề tương thích hệ điều hành hoặc phần mềm.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Hiểu đơn giản, Docker giúp bạn đóng gói toàn bộ ứng dụng và các phụ thuộc (dependencies) thành một đơn vị duy nhất, gọi là container, để dễ dàng triển khai ở bất kỳ môi trường nào.\u003C\u002Fp>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Ưu điểm của Docker\u003C\u002Fh2>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">✅ 1. Tính nhất quán môi trường\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Một trong những lỗi phổ biến nhất khi làm việc nhóm là: “Chạy trên máy anh A thì được, qua máy B lại lỗi!”. Docker giải quyết vấn đề này bằng cách \u003Cstrong>đóng gói môi trường\u003C\u002Fstrong> chạy ứng dụng – từ hệ điều hành, phần mềm cho đến thư viện – giúp đảm bảo ứng dụng chạy như nhau ở mọi nơi.\u003C\u002Fp>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">✅ 2. Nhẹ và nhanh hơn so với VM\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Container nhẹ hơn máy ảo truyền thống (VM) vì nó không cần hệ điều hành riêng, giúp \u003Cstrong>khởi động nhanh\u003C\u002Fstrong>, \u003Cstrong>tiêu tốn ít tài nguyên hơn\u003C\u002Fstrong> và chạy nhiều container trên cùng một máy chủ hiệu quả hơn.\u003C\u002Fp>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">✅ 3. Dễ triển khai và mở rộng\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Với Docker, bạn có thể triển khai ứng dụng chỉ bằng một câu lệnh, dễ dàng tích hợp vào CI\u002FCD pipelines, và triển khai ở nhiều môi trường như development, staging, production.\u003C\u002Fp>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">✅ 4. Quản lý phụ thuộc dễ dàng\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Bạn không cần lo lắng về việc cài đặt đúng phiên bản Node, Python, hoặc Redis. Docker giúp bạn \u003Cstrong>định nghĩa chính xác môi trường\u003C\u002Fstrong> trong \u003Ccode>Dockerfile\u003C\u002Fcode> và \u003Ccode>docker-compose.yml\u003C\u002Fcode>.\u003C\u002Fp>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">✅ 5. Dễ rollback và version control\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Vì mỗi container hoặc image đều có thể gắn tag theo phiên bản, bạn dễ dàng quay lại phiên bản ổn định bất cứ lúc nào.\u003C\u002Fp>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Nhược điểm của Docker\u003C\u002Fh2>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">❌ 1. Độ phức tạp ban đầu\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Việc làm quen với Docker có thể hơi khó khăn với người mới, đặc biệt là khi làm việc với Dockerfile, volume, network hoặc compose.\u003C\u002Fp>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">❌ 2. Hiệu năng không bằng chạy trực tiếp (native)\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Dù nhẹ hơn VM, nhưng container vẫn có thể chậm hơn một chút so với chạy trực tiếp trên máy host, đặc biệt là khi xử lý IO nhiều hoặc ứng dụng nặng.\u003C\u002Fp>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">❌ 3. Vấn đề bảo mật\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Container chia sẻ kernel với host OS, nên nếu không cấu hình đúng, có thể tạo ra rủi ro bảo mật. Tuy nhiên, vấn đề này có thể kiểm soát được với best practices.\u003C\u002Fp>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Tại sao nên sử dụng Docker?\u003C\u002Fh2>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>🔁 \u003Cstrong>Tự động hóa và nhất quán\u003C\u002Fstrong>: Dễ dàng tái tạo môi trường phát triển, staging, production.\u003C\u002Fli>\n\n\n\n\u003Cli>🧪 \u003Cstrong>Hỗ trợ kiểm thử tốt hơn\u003C\u002Fstrong>: Mỗi lần chạy test có thể spin up một container riêng biệt.\u003C\u002Fli>\n\n\n\n\u003Cli>📦 \u003Cstrong>Dễ chia sẻ ứng dụng\u003C\u002Fstrong>: Chỉ cần gửi Dockerfile hoặc image, đồng đội có thể chạy ngay.\u003C\u002Fli>\n\n\n\n\u003Cli>🌍 \u003Cstrong>Triển khai đa nền tảng\u003C\u002Fstrong>: Chạy được trên máy cá nhân, cloud, server Linux, Windows đều ổn.\u003C\u002Fli>\n\n\n\n\u003Cli>🧱 \u003Cstrong>Cơ sở cho kiến trúc Microservices\u003C\u002Fstrong>: Mỗi service chạy trong một container, dễ quản lý và scale.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Kết luận\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Docker không chỉ là công cụ cho DevOps, mà còn là \u003Cstrong>vũ khí mạnh mẽ cho bất kỳ lập trình viên nào\u003C\u002Fstrong> muốn tối ưu hóa quy trình phát triển, đảm bảo chất lượng, và tăng tốc triển khai sản phẩm.\u003C\u002Fp>\n\n\n\n\u003Cblockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n\u003Cp class=\"wp-block-paragraph\">👉 Nếu bạn chưa từng thử Docker, hãy bắt đầu bằng việc cài đặt Docker Desktop và thử viết một \u003Ccode>Dockerfile\u003C\u002Fcode> đơn giản cho ứng dụng NodeJS hoặc Laravel của bạn. Bạn sẽ thấy “ảo hóa nhẹ” thực sự mang lại hiệu quả thế nào!\u003C\u002Fp>\n\u003C\u002Fblockquote>\n","350493f3-b89d-410a-9640-d100afa1b982",{"id":466,"wordpressId":468,"filename":469,"storageKey":470,"sourceUrl":471,"mimeType":38,"altText":9,"caption":39,"width":41,"height":41,"createdAt":472,"updatedAt":43,"url":473},1981,"gioi-thieu-docker.png","wordpress\u002F2025\u002F06\u002Fgioi-thieu-docker.png","https:\u002F\u002Fvdhoangson.com\u002Fwp-content\u002Fuploads\u002F2025\u002F06\u002Fgioi-thieu-docker.png","2025-06-20T03:51:48.000Z","\u002Fuploads\u002Fwordpress\u002F2025\u002F06\u002Fgioi-thieu-docker.png",[475],{"id":476,"wordpressId":357,"name":477,"slug":478,"parentId":75},"776fb391-fbfb-41d1-82a3-02923b7d7639","Docker","docker",[480,485,488],{"id":481,"wordpressId":482,"name":483,"slug":484},"f8abeea5-7909-455b-82b3-61f5ee2d26db",22,"lập trình viên","lap-trinh-vien",{"id":486,"wordpressId":487,"name":478,"slug":478},"334bf268-44d7-4e38-ba4d-a290ca7d8eff",21,{"id":489,"wordpressId":490,"name":491,"slug":492},"ef968864-4fa9-43aa-9815-6de2442dd7cc",23,"DevOps","devops","2025-06-20T03:53:36.000Z","2025-06-20T03:53:38.000Z",15,[497,502,507,511,516,518,523,524,529,530,532,533,538,540,546,547,548,554,555],{"id":498,"wordpressId":499,"name":500,"slug":501,"parentId":39,"parent":39},"201e14f3-41c0-4637-bef4-139535419d48",355,"Advertising","advertising",{"id":503,"wordpressId":504,"name":505,"slug":506,"parentId":39,"parent":39},"42a0d65a-3fb4-4df8-8ebb-213ab7f78beb",356,"Design","design",{"id":508,"wordpressId":509,"name":17,"slug":510,"parentId":39,"parent":39},"5d3bfe43-a6a2-426a-9131-4f23001a7e19",280,"dich-vu",{"id":512,"wordpressId":513,"name":514,"slug":515,"parentId":39,"parent":39},"9f149810-3bd1-4ba9-81ee-8396e1f459ca",357,"Digital","digital",{"id":476,"wordpressId":357,"name":477,"slug":478,"parentId":75,"parent":517},{"id":75,"wordpressId":77,"name":78,"slug":79,"parentId":39},{"id":519,"wordpressId":520,"name":521,"slug":522,"parentId":39,"parent":39},"93fe454a-7958-4fc2-af2c-42d38658e42e",358,"Film","film",{"id":341,"wordpressId":342,"name":343,"slug":344,"parentId":39,"parent":39},{"id":525,"wordpressId":526,"name":527,"slug":528,"parentId":39,"parent":39},"b6fcdd9b-91cc-494a-bde1-bb43f27b9504",281,"Javascript","javascript",{"id":75,"wordpressId":77,"name":78,"slug":79,"parentId":39,"parent":39},{"id":71,"wordpressId":72,"name":73,"slug":74,"parentId":75,"parent":531},{"id":75,"wordpressId":77,"name":78,"slug":79,"parentId":39},{"id":115,"wordpressId":116,"name":117,"slug":118,"parentId":39,"parent":39},{"id":534,"wordpressId":535,"name":536,"slug":537,"parentId":39,"parent":39},"2a8acadf-db00-40e3-8693-6715373ac3b9",359,"Photography","photography",{"id":153,"wordpressId":154,"name":155,"slug":156,"parentId":75,"parent":539},{"id":75,"wordpressId":77,"name":78,"slug":79,"parentId":39},{"id":541,"wordpressId":542,"name":543,"slug":544,"parentId":397,"parent":545},"6493e3cd-52bd-4b85-9959-dded705a28ae",29,"Plugins","plugins",{"id":397,"wordpressId":398,"name":399,"slug":400,"parentId":39},{"id":364,"wordpressId":365,"name":366,"slug":367,"parentId":39,"parent":39},{"id":235,"wordpressId":236,"name":237,"slug":238,"parentId":39,"parent":39},{"id":549,"wordpressId":550,"name":551,"slug":552,"parentId":397,"parent":553},"27624bcc-810f-42dc-b488-7e2bf333f897",30,"Themes","themes",{"id":397,"wordpressId":398,"name":399,"slug":400,"parentId":39},{"id":47,"wordpressId":48,"name":49,"slug":50,"parentId":39,"parent":39},{"id":397,"wordpressId":398,"name":399,"slug":400,"parentId":39,"parent":39}]