Các bài viết ngắn phần 10

Giải bài toán đồ thị (graph problem) với python

Graph là gì? 

Graph là một cấu trúc dữ liệu gồm các nút (nodes) hay N và các nhánh (edges) hay E. Loại cấu trúc dữ liệu này thường sử dụng để mô tả khoảng cách giữa các địa điểm hay trong những loại liên kết phức tạp khác.

Node là điểm, thường thể hiện bằng hình tròn, có giá trị (hoặc không). Edge là nhánh, thường thể hiện bằng đường nối giữa hai điểm với nhau, có giá trị (hoặc không)

Giải quyết vấn đề graph

– Duyệt qua graph với Breadth First Search (BFS) hay thuật toán tìm kiếm theo chiều rộng

– Duyệt qua graph với Depth First Search (DFS) hay thuật toán tìm kiếm theo chiều sâu

– Tạo graph với một Adjacency List

– Directed Graph (có một chiều nhất định giữa hai node) và Undirected Graph (giữa hai nút có hai chiều)

Ngoài ra còn có các bài tập cụ thể và được giải với python ở link bên dưới

https://www.giulianopertile.com/blog/the-definitive-guide-to-graph-problems/

Authentication là gì?

Là quá trình kiểm tra liệu người dùng có đúng danh tính mà hệ thống có về người ấy hay không. Nếu đúng thì sẽ cho phép người dùng truy cập vào hệ thống. Nếu không đúng thì từ chối truy cập vào hệ thống.

Vậy kiểm tra bằng cách nào?

single factor authentication – cách này hay sử dụng mật khẩu để đăng nhập, và sẽ có rủi ro là nếu bạn sử dụng cùng mật khẩu cho nhiều hệ thống thì nếu hacker hack được mật khẩu của một cái thì tất cả những tài khoản còn lại đều bị rủi ro về bảo mật.

2-factor authentication – cách này an toàn hơn và được sử dụng phổ biến hiện nay vì bên cạnh thông tin đăng nhập (username, password), bạn cần thêm một bên nữa như mã bảo mật gửi về email hay SMS.

multi-factor authentication – cách này còn xịn hơn cách ở trên với sự kết hợp giữa nhiều bên liên quan như thông tin đăng nhập, câu hỏi bảo mật, mã bảo mật (SMS, authenticator app) hay nhận dạng vân tay, khuôn mặt.

Tuỳ vào loại ứng dụng mà chọn cách kiểm tra phù hợp vì không lý gì một ứng dụng giải trí lại yêu cầu quá nhiều thứ từ người dùng như tài khoản ngân hàng.

Authorization là gì ?

Authorization là quá trình kiểm tra xem người dùng có quyền truy cập vào những phần nhất định nào của ứng dụng hay được thực hiện các thao tác cụ thể nào trên ứng dụng.

Bạn cũng có thể nghe về nó với tên “access control” hay “privilege control”. Lưu ý authorization diễn ra sau quá trình authentication, và bao gồm cả cho phép (grant) và từ chối (deny) các quyền. Ví dụ như blog, người dùng sẽ được quyền comment, nhưng chỉ có người dùng đồng thời là tác giả mới có quyền đăng bài.

vậy kiểm tra bằng cách nào?

“role-based access control” – kiểm soát quyền truy cập dựa trên vai trò người dùng trong ứng dụng (viewer, editor, manager, admin, …)

Mỗi role này sẽ có các quyền truy cập nhất định được định nghĩa tuỳ theo cách những loại kỹ thuật bạn dùng.

Ví dụ như trong Django sẽ có sẵn các quyền read, write, edit, view cho từng loại model và bạn có thể kiểm soát quyền truy cập của từng role dựa vào từng loại quyền của model đó.

“claims-based access control” – kiểm soát quyền truy cập dựa trên việc kiểm tra các quyền mà người dùng có.

Ví dụ bạn có một trường owner cho phép xác định chủ sở hữu của đối tượng cụ thể nào đó. Hoặc bạn có một trường account_type cho phép xác định phân loại người dùng.

Bạn đọc thêm ở bài viết này có thêm ví dụ và sơ đồ minh hoạ nhé.

https://www.freecodecamp.org/news/whats-the-difference-between-authentication-and-authorisation/

"Don't Repeat Yourself" hay DRY

Nói cho dễ hiểu hơn, thì khi bạn bắt gặp mình lặp lại một thao tác giống nhau, như việc copy / paste một đoạn code thì đã đến lúc bạn nên tạo cho nó một hàm để sử dụng lại.

Lợi ích dễ thấy của nguyên tắc này là giúp tái sử dụng code, hay “code resuse”.

Nhưng copy / paste code thì code thì có gì sai cơ chứ ?

Thực ra copy / paste code thì cũng không có gì sai trái, nhưng DRY bên cạnh giúp code reuse ra thì còn giúp lập trình viên ẩn đi những đoạn logic quá chi tiết cho từng phần công việc nhỏ giúp giảm tải khối lượng logic lại, nếu cần truy cập thì sẽ tìm đến nơi viết đọc sau.

Vì thế DRY không chỉ là giảm code lặp. Mà bạn đang chia nhỏ một quá trình phức tạp ra thành từng đoạn công việc nhỏ có tên và nhiệm vụ riêng. Từ đó, việc định nghĩa tên hàm, các biến, giá trị trả về, viết document cho hàm cũng trở nên quan trọng, giúp bạn self-document code base của mình.

https://benwilhelm.com/articles/beyond-dry.html

Bộ sưu tập git alias

git alias là gì ?

git alias là các câu lệnh do người dùng tự định nghĩa, hay gọi là alias, các câu lệnh này sẽ đại diện cho một câu lệnh git cụ thể với các lựa chọn tương ứng.

Ví dụ: trong file .gitconfig bạn viết tất cả các câu lệnh alias nằm dưới mục [alias]

[alias]
	a = add .

thì bạn có thể có thể sử dụng git a thay cho git add .

Vì sao nên sử dụng git alias ?

  • tăng hiệu suất làm việc (vì ngắn gọn hơn ^^)
  • có thêm một tài liệu tự tạo về các câu lệnh git và có thể sử dụng và học thêm từ các câu lệnh phức tạp

Bạn có thể vào vài viết sau để xem bộ sưu tập git alias của tác giả nhé.

Một lưu ý nhỏ là nếu bạn dùng zsh (oh-my-zsh) thì bạn đã có sẵn bộ git alias được cung cấp sẵn (bạn có thể tìm “Oh my zsh git alias” nhé.

https://dev.to/imjoseangel/what-are-your-git-aliases-43om

Terminal

Nếu mình ngại làm việc với terminal, thì là mình chưa hiểu về nó đủ.

Vì thế, mình đã tìm hiểu thêm về terminal, về các khái niệm shell, bash, console và bắt gặp một bài viết vô cùng xuất sắc của tác giả, lại là tiếng Việt nữa ^^

Bài viết giúp bạn tìm hiểu kỹ hơn về:

– Shell, các loại shell

Shell tiếng anh là vỏ ^^, là một trình thông dịch dòng lệnh phát triển trên các loại máy có nhân Unix, Linux. Shell cung cấp giao diện để bạn có thể nói chuyện với hệ điều hành.
Bạn có thể gõ trực tiếp lệnh lên terminal hoặc chạy với file .sh

Có nhiều loại shell như bash, zsh, ksh, tcsh, fish, ssh, …
Phổ biến nhất là bash, zsh và mạnh nhất hiện nay là zsh.

– zsh
Tìm hiểu về zsh, cách cài đặt và oh-my-zsh hỗ trợ quản lý plugins và theme của zsh

– phím tắt

Các phím tắt giúp sử dụng terminal hiệu năng hơn
Và một số phím tắt Chrome hay dùng

Bạn ghé đọc hay lưu lại để đọc dần nhé

https://viblo.asia/p/cai-oh-my-zsh-powerlevel10k-toi-uu-va-su-dung-phim-tat-cho-terminal-ORNZqowM50n 

Nội dung này thuộc BeautyOnCode’s short posts là các bài viết ngắn tóm tắt nội dung và ý kiến cá nhân từ các nguồn như các slack channels (công ty, cộng đồng), các new letters, …

Các bài viết này cũng được đăng ở:

👉 BeautyOnCode trên Careerly (lời hứa với Careerly) Trên đây có gần 900 người theo dõi, và là trang tin công nghệ khá hay, bạn có thể tải app rồi theo dõi mình nhé.

👉 Blog BeautyOnCode, chuyên mục “Short Posts”

👉 Fanpage BeautyOnCode

👉Trang notion này tổng kết các bài viết

Nếu bạn thích đọc hàng ngày thì hãy follow các trang trên nhé. Chúc bạn đọc vui ^^