Hẳn là nhiều người ở đây đã nghe đến kiểu tấn công bảo mật Clickjacking rồi nhỉ. Kẻ tấn công thường nhúng một website (thường là mục tiêu) vào trong một iframe trên website của chúng, sau đó làm mờ hoặc ẩn nó đi rồi đặt vào vị trí các nút bấm trên web, ví dụ "Bấm vào để nhận quà". Đâu ai ngờ rằng phía trên nút bấm đó là một nút bấm khác trong iframe. Khá nguy hiểm!
Nhưng trình duyệt đã có cách ngăn chặn kiểu tấn công này bằng các quy tắc như tiêu đề X-Frame-Options, frame-ancestors của CSP và SameSite: Lax/Strict của Cookies...
Mới đây, đã xuất hiện thêm kiểu tấn công mới - "DoubleClickjacking" 😨. Đại ý là "hắn" lợi dụng hành động double click để lừa người dùng bấm vào một nút mà hắn muốn. Chi tiết hơn trong bài viết này: DoubleClickjacking: A New Era of UI Redressing.
Mọi người đã nghe nói đến Jujutsu - jj
- một dạng quản lý phiên bản cho mã nguồn (version control system) chưa? Có vẻ như nó đang nhận được nhiều sự quan tâm.
Chờ xíu! Chẳng phải git đã quá tốt rồi sao? Thế thì chế ra thằng jj
để làm gì nữa? Cũng hơi khó trả lời nhỉ? Mỗi công cụ sinh ra chắc chắn phải cải thiện hoặc khắc phục được nhược điểm của cái trước. Cho nên jj
ắt hẳn phải làm được điều gì đó mà git
chưa làm được nên mới nổi lên như vậy.
Thật ra mình đã nghe nói đến jj
từ vài tháng trước rồi, nhưng vào đọc thì toàn kiến thức cao siêu. Hoặc là đang mang nặng cái lối suy nghĩ của git
vào trong đầu rồi nên chưa lĩnh hội ra được điều gì cả.
Mình hay có kiểu cái gì đọc lần 1 mà không hiểu thì đọc tiếp lần 2, lần 2 không hiểu thì đọc tiếp lần 3... đến lần thứ n mà vẫn không hiểu thì bỏ. Cơ mà không phải là từ bỏ mà một thời gian sau đó quay lại đọc tiếp. Đến một lúc nào đó khả năng mình sẽ hiểu ra một ít vấn đề, thế mới tài 😆.
Thì cái jj
này có vẻ như nó đang mở ra được tính linh hoạt trong việc "cam kết" mã. Tưởng tượng bạn đang làm việc trên một dự án, đang ở nhánh này, muốn sang nhánh khác để sửa, nhưng mà lại đang viết dở ở nhánh này, thế là phải stash
, rồi checkout
, rồi commit, rồi merge
hoặc rebase
lại vào nhánh cũ... nhìn chung quá trình làm việc với git
nghiêm ngặt đến mức cứng nhắc, cần nhiều thao tác để giải quyết một vấn đề, chưa kể cái cây commit (commit-tree) nữa thì ôi thôi, khỏi xem cho đỡ nhức mắt. Thế nên ông jj
này đang làm cách nào đó để bạn khỏi cần phải quan tâm đến các nhánh luôn, sửa trực tiếp vào commit. Nghe ảo nhỉ 😂.
Đấy mới lĩnh hội được đến đấy, hy vọng sau n lần đọc lại nữa mình sẽ viết được một bài chi tiết hơn về công cụ này.
Không biết blog được dẫn nguồn từ trang cà phê nào hay sao mà vài ba hôm trở lại đây thấy nhiều người tìm kiếm cà phê thế không biết 🤔.
Tìm cả cách pha với tìm cả loại hạt, khổ nỗi họ tìm lại không ra bài viết nào vì mình chưa có viết đến mấy trường hợp đó. Phải chăng là ý trời 😀🙏
Nhiều lần cũng đắn đo suy nghĩ về cái tên miền này lắm chứ bộ, chả hiểu sao lại 2coffee xong viết về lập trình 🫣
À cũng có giải thích về cái tên rồi á chứ, cơ mà ấn tượng ban đầu thì cũng không thể liên tưởng ra được nội dung nói về lập trình phải không!?
anh cũng không hiểu sao lại lạc vào blog của em, nhưng từ đó thì tên miền của blog này luôn nằm trên 1 tab của trình duyệt & không bao giờ đóng luôn :))
Hic, a là kẻ ẩn danh hôm bữa đấy á, sao a lạc được vào đây vậy ạ? A nghiện cà phê đúng không 🤣
Đúng rồi em, anh là ông nặc danh hôm trước đây! Anh nhớ ra đc tại sao lại lạc vào blog của em rồi, là do có lần tìm về Event Loop chứ ko phải tìm cafe :)))
Cùng dân IT & là fan của blog của em, đừng bảo tại sao ko thấy anh subscribe nhé, vì anh mở blog của em còn nhiều & nhanh hơn là đợi hệ thống gửi thông báo cho á 🤣
P/s: cái bình luận này nó kì kì nhỉ, cứ quote vào status đầu tiên làm cứ tưởng post nhầm
À vầng, lâu chưa vậy a. Mấy bài về event loop e cũng viết từ lâu lắm rồi, từ đợt tập tành viết. Mãi mà chưa có thời gian để cập nhật. Kể ra nhiều người biết đến blog qua loạt bài viết này phết đấy chứ.
Vừa làm vừa viết kể ra cũng mệt phết, thế nên có thời gian rảnh cứ phải phân vân xem là nên viết, fix hay thêm tính năng 😅
Cái comment threads này cũng bất tiện thật, để cho vào hàng đợi fix a ạ 😆
Cũng mấy tháng rồi em, hình như có cả lần tìm thấy qua từ khoá liên quan đến Deno nữa, đợt đó đang ngó nghiêng Bun với Deno, cuối cùng vẫn chưa vọc thằng nào cả 🤣
😄 Thế ạ. Mong a sớm đạt được mục tiêu
Sáng nay hơi giật mình vì Mac cảnh báo Docker là phần mềm độc hại. Kiểu: "com.docker.socket" was not opened because it contains malware. This action did not harm your Mac"
Có vẻ đây là sự cố ngoài ý muốn và Docker đã lên tiếng, nếu còn chưa mở ứng dụng lên được thì bạn thử làm theo các cách ở đây nhé Incident Update: Docker Desktop for Mac
Từ đầu tháng 1 đến giờ, nếu thường xuyên ghé blog thì bạn có thể đã thấy nội dung quảng cáo trên trang web đã thay đổi. Đúng vậy, vì mình không gắn quảng cáo của Adsense nữa, thay vào đó là quảng cáo của indieboosting.com. Tại sao?
Vào giữa năm ngoái, mình tham gia vào nhóm Build in public VN trên Facebook. Đây như là một sân chơi dành cho anh em Indies Hacker - những người đam mê làm sản phẩm và sẵn sàng chia sẻ cho nhau kiến thức, kinh nghiệm trong quá trình học và làm. Nhìn chung, mình đã học được rất nhiều điều mới mẻ trong giới Indies.
indieboosting.com là một sản phẩm của anh Duy - cũng là Admin của nhóm - ý tưởng của indieboosting là cầu nối giữa người làm sản phẩm với người có nhu cầu sử dụng sản phẩm thông qua những người sỡ hữu website. Nếu bạn có web, có traffic và sẵn sàng làm cầu nối thì indieboosting là công cụ. Đổi lại, bạn sẽ nhận được một khoản hoa hồng tương ứng.
Khoản hoa hồng này tương đối "kếch xù", ăn đứt Adsense ở thời điểm hiện tại. Cho dễ hình dung, trung bình một tháng quảng cáo của mình đặt ở Adsense chưa được nổi 2$ thì với indieboosting, nửa tháng vừa rồi đã thu về hơn 10$ 🫣
Mình mới tìm thấy một công cụ trích xuất nội dung từ image, pdf, docx, xlsx, pptx... sang dạng text, markdown, hay là json... Nói chung là nó hỗ trợ kha khá đầu vào và đầu ra. Lấy được nội dung ra rồi thì muốn làm gì thì làm, đặc biệt là bỏ vào trong các mô hình ngôn ngữ lớn để làm nguồn dữ liệu gì còn gì bằng 😁
Công cụ tên là Docling, viết bằng python. Có thể nhúng vào trong mã hoặc dùng CLI đều được. Mình đã thử với dạng ảnh và pdf. Nhìn chung thì pdf vẫn cho kết quả tốt hơn. Ảnh thì hên xui 😅. Nó còn cho lựa chọn cả thư viện OCR á. Cái nào phù hợp hơn thì chọn.
Quá trình cài thì phát sinh mấy lỗi. Mọi người nhớ dùng python 3.9 -> 3.12. Nếu bị lỗi ModuleNotFoundError: No module named '_lzma'
thì thử làm theo hướng dẫn này xem giải quyết được không nhé ModuleNotFoundError: No module named '_lzma'
Giá như mình biết đến kho lưu trữ này sớm hơn. github/opensource.guide là nơi hướng dẫn mọi người tất tần tật về Open Source. Từ làm thế nào để đóng góp mã, làm thế nào để bắt đầu một dự án mã nguồn mở của riêng, cho đến những kiến thức mà bất kỳ ai cũng nên biết khi mới bước chân vào 🤓
Đặc biệt hàng này chính chủ từ Github luôn á.
Hôm trước mới nhắc đến dokploy.com thì hôm nay lại có tiếp coolify.io - cũng là một dự án mã nguồn mở có khả năng thay thế Heroku/Netlify/Vercel. Theo như mình đọc thì Coolify hoạt động dựa trên triển khai Docker, nhờ đó mà nó có thể chạy được hầu hết các ứng dụng. Coolify cung cấp giao diện và tính năng để việc triển khai ứng dụng trở nên đơn giản và dễ dàng hơn.
Có khi nào đây sẽ là xu hướng triển khai ứng dụng trong tương lai không? 🤔
Một trong những điều mình rất thích đối với những dòng lệnh là tính "đường ống nước" (pipe) của nó. Bạn có thể hình dung mỗi lệnh như là một ống nước, khi ráp chúng lại với nhau thì sẽ tạo ra một dòng chảy dữ liệu. Đầu ra của ống này trở thành đầu vào của ống kia... cứ như thế.
Về tính ứng dụng thì nhiều lắm, bạn đọc có thể tham khảo bài viết Thực hành xử lý dữ liệu bằng cách sử dụng lệnh trên tệp sao kê MTTQVN này. Kết hợp các lệnh lại với nhau, biến chúng thành công cụ phân tích dữ liệu mạnh mẽ.
Hoặc mới đây nhất là kết hợp lệnh wrangler
cùng với jq
để xem logs từ worker dễ hơn. wrangler
là giao diện dòng lệnh (CLI) của Cloudflare tích hợp nhiều tính năng. Một trong số đó là giúp chúng ta xem logs từ Worker bằng lệnh:
$ wrangler tail --config /path/to/wrangler.toml --format json
Nhưng logs từ câu lệnh trên chứa rất nhiều thông tin ngoài lề, tràn hết cả ra màn hình, trong khi chỉ mong muốn nhìn một số trường thông tin quan trọng thì phải làm thế nào?
Hãy kết hợp nó với jq
. jq là một lệnh xử lý JSON rất mạnh mẽ. Nó giúp chúng ta làm việc dễ hơn với dữ liệu dạng JSON trong terminal. Thế nên để chắt lọc thông tin từ logs, hết sức đơn giản:
$ wrangler tail --config /path/to/wrangler.toml --format json | jq '{method: .event.request.method, url: .event.request.url, logs }'
Lệnh trên trả về các dòng logs có cấu trúc JSON chỉ gồm 3 trường method, url và logs 🔥