This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
:info_neon: Chuyên mục MIL - Monday I learn - 013 | |
Nhân tiện mượn được a Vượng cuốn sách Làm chủ các mẫu thiết kế kinh điển trong lập trình của tác giả Tạ Văn Dũng thì em cũng mang tới chương trình làm chủ các mẫu thiết kế trong 1 ngày. (Just for funs) | |
Singleton pattern - pattern thuộc vào nhóm khởi tạo. | |
Nó được nghĩ ra để giúp đảm bảo một class chỉ có một object instance duy nhất và là nơi truy cập duy nhất trong hệ thống. | |
Ví dụ thực tế: | |
Trong ứng dụng Rails có nhiều loại connection DB, Redis, ... thì chúng ta không thể cứ mỗi lần dùng lại khởi tạo một object DB, Redis để dùng. Việc này sẽ tốn tài nguyên và hiệu suất không cao. Do đó chúng ta có thể nghĩ ngay tới Singleton pattern để giải quyết vấn đề này. | |
Có một số lưu ý khi sử dụng Singleton: Race condition - nói nom na là việc ứng dụng chạy nhiều thread đồng thời và cùng truy cập tới tài nguyên chung. Nếu implement pattern không tốt thì 1 class có thể có nhiều hơn 1 object. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
:info_neon: Chuyên mục MIL - Monday I learn - 012 | |
Một chút tin tức mới về rails 7.1 | |
1. Github vừa mới public một Mysql client đang được sử dụng trong Github và nó đã được thêm vào rails. Bạn có thể sử dựng nó thay thế cho mysql2. | |
"Trilogy is a client library for MySQL-compatible database servers, designed for performance, flexibility, and ease of embedding." | |
Ref: https://github.com/rails/rails/pull/47880 | |
2. Thay đổi cách validate độ dài password với BCrypt. Trước sử dụng count kí tự điều này có thể không thoả mãn validate phía BCrypt là 72 byte. Sau chuyển thành kiểm tra theo byte và thêm một key cho I18n `:password_too_long`. | |
"This Pull Request has been created because we identified a need to improve password length validation for BCrypt compatibility in the ActiveModel::SecurePassword module. The current validation only considers the character count, which may not accurately reflect the byte size limit imposed by BCrypt." | |
Ref: https://github.com/rails/rails/pull/47708 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
:info_neon: Chuyên mục MIL - Monday I learn - 011 | |
Cách sử dụng `with` cùng với `allow` và `allow_any_instance_of`. | |
Dạng allow(A).to receive(:method).and_return some_thing | |
Có ý nghĩa: Khi gọi method với bất kì tham số nào thì sẽ trả về some_thing | |
Dạng allow(A).to receive(:method).with(:some_params).and_return some_thing | |
Có ý nghĩa: Khi gọi method với param cụ thể :some_params thì sẽ trả về some_thing | |
Nếu truyền sai tham số thì sẽ bị raise lỗi. | |
`Please stub a default value first if message might be received with other args as well.` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
:info_neon: Chuyên mục MIL - Monday I learn - 010 | |
Chắc hẳn mọi người không còn lạ lẫm gì với cmd ssh đúng không ạ? Trong số này em xin giới thiệu về một số kinh nghiệm sử dụng trong công việc với ssh. | |
1. Luôn thiết lập tập tin config trong thư mục .ssh | |
Ưu điểm: Truy cập đến remote server một cách nhanh chóng mà không cần nhớ user, ip, port vv... | |
Lưu ý: Mỗi remote server sẽ tạo riêng một cặp key. Không dùng chung 1 cặp key duy nhất cho toàn bộ remote server. | |
Nếu bạn không may mắn để lộ private key và một vài thông tin khác thì có thể người có ý đồ xấu sẽ vào được toàn bộ các server khác. | |
Ví dụ: dev => abc_dev.key, stg => abc_stg | |
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
:info_neon: Chuyên mục MIL - Monday I learn - 008 | |
Nhân dịp đầu năm 2023 em xin chúc mọi người mạnh khỏe, vui vẻ và thành công ạ. | |
Trong số này em xin giới thiệu về một trong những ý tưởng có thể cải thiện tốc độ chạy unitest hay cụ thể rspec. | |
Nếu mọi người để ý thì khi sử dụng rspec thì đều chạy trên 1 process duy nhất. | |
Điều này có lẽ sẽ phù hợp về thời kì đầu năm 2000 vì CPU có 1 đến 2 nhân nhưng bây giờ có lẽ là hơi lạc hậu khi CPU đã có tới 4 nhân, 8 luồng và hơn thế nữa. | |
Việc sử dụng rspec trên 1 process duy nhất khiến thời gian chạy rất lâu và không tối ưu resource chúng ta có. | |
Vậy một câu hỏi đặt ra là chúng ta có thể sử dụng nhiều process hơn của CPU không? | |
Câu trả lời là có và một chiếc gem https://github.com/grosser/parallel_tests sẽ giải quyết giúp ta vấn đề này. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
:info_neon: Chuyên mục MIL - Monday I learn - 007 | |
Số trước em đã giới thiệu về validates_comparison_of method giúp chúng ta thêm validate kiểu so sánh với thời gian, ... | |
Trong tuần này mình xin giới thiệu về method includes trong RoR. | |
Đây là một method dạng tải dữ liệu từ DB ra và lưu trong bộ nhớ tạm để RoR sử dụng tránh vấn đề n+1 query. | |
Trong dự án hiện tại em thấy mọi người dùng cũng khưa khứa nên em cũng muốn chia sẻ những kiến thức và kinh nghiệm của em khi sử dụng | |
includes trong RoR. Bên cạnh includes mọi người có biết đến pre_load và eager_load không? | |
Vì bài cũng khá dài nên em xin phép link tới https://docs.google.com/document/d/1ZfmGmo79gap0H56mZ1TftjdVGNCaZRgqGrGJ7rBkw0k/edit?usp=sharing |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
:info_neon: Chuyên mục MIL - Monday I learn - 006 | |
Số trước em đã giới thiệu về each_with_object method giúp chúng ta giảm bớt được bước khai bái biến trước. | |
Trong tuần này mình xin giới thiệu về comparison validator mới trong rails 7. | |
Trước rails 7: Nếu cần một logic validation kiểu start_time không được lớn hơn end_time hoặc time > now thì chúng ta phải tự define hoặc dùng gem bên ngoài. | |
class Event < ApplicationRecord | |
validates :start_date, presence: true | |
validates :end_date, presence: true |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
:info_neon: Chuyên mục MIL - Monday I learn - 004 | |
Số trước mình đã giới thiệu về các tìm kiếm nhanh route với rails routes -g | |
Trong tuần này mình xin giới thiệu về BigDecimal ruby. | |
Ví dụ: Nếu ở ngoài đời khi được hỏi kết quả của phép toán 0.1 + 0.2 có bằng 0.3 không thì câu trả lời luôn là có quá ez. Nhưng với máy tính thì không. Hãy bật rails c lên và thử phép toán thì kết quả trả về là false | |
``` | |
irb(main):013:0> 0.1 + 0.2 | |
=> 0.30000000000000004 | |
irb(main):014:0> 0.1 + 0.2 == 0.3 | |
=> false | |
irb(main):015:0> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
:info_neon: Chuyên mục MIL - Monday I learn - 003 | |
Số MIL-002 đã giới thiệu về một hàm mới họ *sole | |
Vì thấy mọi người hay dùng VS code nên chắc hẳn việc tìm route trong một dự án lớn là khá vất vả. Số này mình xin giới thiệu một option trong rails routes rất hữu ích đó là -g. Đến bây giờ mới biết vì trước đó mình dùng rails routes | grep ..., cách này vẫn ổn nhưng dài hơn so với các sử dụng option. | |
Trước rails 7: Bạn chỉ có thể tìm kiếm được dạng rails routes -g users/:user_id/posts/:post_id hoặc rails routes -g users | |
Sau rails 7 (> 7.0.3): | |
Bạn có thể sử dụng path dễ hiểu hơn là rails routes -g users/1/posts/1. Chúng ta không phải nhớ chính xác tên symbol trong route. | |
Tham khảo: | |
https://blog.saeloun.com/2022/09/06/extend-routes-grep-functionality |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
HTTP status code symbols for Rails | |
Thanks to Cody Fauser for this list of HTTP responce codes and their Ruby on Rails symbol mappings. | |
Status Code Symbol | |
1xx Informational | |
100 :continue | |
101 :switching_protocols | |
102 :processing |
NewerOlder