React: Tạo project Hello World

Trong bài viết này, mình sẽ hướng dẫn bạn cách tạo 1 project React đơn giản và giới thiệu 1 số thành phần code để bạn bắt đầu 1 cách đơn giản hơn.

Tạo project ASP.NET Core 3 với SQLite

Trong bài viết này, mình sẽ hướng dẫn các bạn cách cài đặt SQLite và tạo project ASP.NET Core 3, sử dụng SQLite thay vì SQL Server.

Cài đặt SQLite

Download SQLite: https://www.sqlite.org/download.html
SQLite cung cấp các công cụ khác nhau để làm việc trên các nền tảng, ví dụ: Windows, Linux và Mac. Bạn cần chọn một phiên bản phù hợp để tải về.

Identity Server 4: Một số update configuration cho .NET Core 3.x

Trong bài viết này, mình sẽ update lại một số config cho Identity Server khi sử dụng .NET Core 3 dựa trên grant type Resource Owner Password Credentials.
Các bạn có thể tham khảo cách thiết lập Identity Server ở các bài viết trước của mình:
https://nhatkyhoctap.blogspot.com/2017/08/tim-hieu-ve-identityserver-4.html
https://nhatkyhoctap.blogspot.com/2017/08/identity-server-4-bao-ve-web-api-bang.html

Đăng ký Self-sign certificate trong môi trường dev

Authorization Server sẽ mã hóa token bằng key. Resource Server xác minh rằng tính toàn vẹn của mã thông báo bằng một khóa. Chúng cùng nhau tạo thành một cặp khóa bất đối xứng (ví dụ: public/private). Theo mặc định, IdentityServer sẽ xuất bản public key để xác minh mã thông báo trên điểm cuối /.well- Unknown / openid-configuration.

Automated UI tests với Selenium trong .NET Core

Trong bài viết này, mình sẽ hướng dẫn bạn tạo Project .NET Core với Selenium.

Tạo project .NET Core

Đầu tiên, bạn tạo mới 1 project MSTest Test Project (.NET Core) và đặt tên là SeleniumTutorial.AutomatedUiTest

Resource Owner Password Credentials

Trong bài viết này, mình chủ yếu collect lại thông tin về grant type Resource Owner Password Credentials

Các loại grant type

OAuth2 có 4 loại grant type:
  • Resource Owner Password Credentials
  • Authorization Code
  • Implicit
  • Client Credentials

Resource Owner Password Credentials là gì?

The Password grant type is a way to exchange a user's credentials for an access token.

Khi nào thì sử dụng grant này?

  • Chỉ nên sử dụng cho những ứng dụng thực sự được tin tưởng vì nó trực tiếp xử lý thông tin đăng nhập của người dùng.
The flow includes the following steps:
  • Ứng dụng đưa ra một form cho phép người dùng nhập thông tin đăng nhập (ví dụ: username/password).
  • Ứng dụng gửi thông tin đăng nhập cùng thông tin định danh của mình lên authorization server. Authorization server xác thực thông tin, trả lại access token và refresh token (nếu có).
  • Ứng dụng sử dụng access token truy cập tài nguyên trên resource server.

Làm quen với SpecFlow+

Trong bài viết này, mình chỉ tổng hợp các bước để hiểu sơ lược về SpecFlow, và các bước để tạo 1 project .NET Core để thực thi SpecFlow. Với góc độ của 1 .NET programmer, mình chỉ mong muốn đây là bài tổng hợp thật rõ ràng và đơn giản.

Đầu tiên bạn cần nắm các khái niệm về TDD, BDD, và đây là nền tảng cơ sở để bắt đầu làm việc với SpecFlow, 1 .NET framework thực thi BDD, dựa trên ngôn ngữ C# và Gherkin.

TDD là gì

TDD (Test Driven Development) là một phương thức làm việc, hay một quy trình viết mã hiện đại. Lập trình viên sẽ thực hiện thông qua các bước nhỏ (BabyStep) và tiến độ được đảm bảo liên tục bằng cách viết và chạy các bài test tự động (automated tests). Quá trình lập trình trong TDD cực kỳ chú trọng vào các bước liên tục sau:
  1. Viết 1 test cho hàm mới. Đảm bảo rằng test sẽ fail.
  2. Chuyển qua viết code sơ khai nhất cho hàm đó để test có thể pass.
  3. Tối ưu hóa đoạn code của hàm vừa viết sao cho đảm bảo test vẫn pass và tối ưu nhất cho việc lập trình kế tiếp
  4. Lặp lại cho các hàm khác từ bước 1

Hỗ trợ search tiếng Việt trong SQL Server

Hôm nay mình hướng dẫn mọi người thủ thuật tìm kiếm với Sql Server không phân biệt chữ hoa, chữ thường, có dấu, không dấu rất đơn giản.
Mặc định khi tạo 1 column có kiểu dữ liệu nvarchar, thì Collation sẽ có giá trị  SQL_Latin1_General_CP1_CI_AS.
Giải thích:
  • SQL – Tất cả các collation đều có tiền tố là SQL.
  • Latin1_General đại diện cho quy tắc sắp xếp, CI có nghĩa là không phân biệt chữ hoa chữ thường và AS có nghĩa là trọng âm.
Để biết được SQL Server của bạn đang hỗ trợ collation nào, bạn thực hiện câu lệnh:
SELECT SERVERPROPERTY('collation')
Liệt kê collation của các column trong 1 table
sp_help <table-name>

Đối với tiếng Anh, thì bạn sẽ không gặp vấn đề gì. Nhưng với tiếng Việt, thì bạn sẽ gặp vấn đề về dấu.
VD: Bạn tìm kiếm chữ "Châu". Nếu bạn gõ chữ "Châu" hay "Chau" thì sẽ ra 2 kết quả tìm kiếm khác nhau.

Khắc phục

Bạn execute câu lệnh sql sau:
ALTER TABLE <table-name> ALTER COLUMN <column-name> nvarchar(max) COLLATE SQL_Latin1_General_CP1_CI_AI"
Trường hợp bạn sử dụng migration trong EF core: Tạo mới 1 migration rỗng:
dotnet ef migrations add Collation
Sau đó, bạn thêm 2 câu lệnh SQL sau:
public partial class Collation : Migration
{
 protected override void Up(MigrationBuilder migrationBuilder)
 {
  migrationBuilder.Sql("ALTER TABLE <table-name> ALTER COLUMN <colum-name> nvarchar(max) COLLATE SQL_Latin1_General_CP1_CI_AI");
 }

 protected override void Down(MigrationBuilder migrationBuilder)
 {
  migrationBuilder.Sql("ALTER TABLE <table-name> ALTER COLUMN <colum-name> nvarchar(max) COLLATE SQL_Latin1_General_CP1_CI_AS");
 }
}
Chúc các bạn thành công
Nhật ký học tập

Nguyên tắc Demeter trong hướng đối tượng

Mở bài

Là dân lập trình, chắc hẳn các bạn cũng từng ít nhất một lần nghe đến Law of Demeter (LoD), tạm dịch là Nguyên tắc Demeter, còn được gọi là nguyên tắc Một dấu chấm.

Thân bài

Law of Demeter là gì?

Trong thần thoại Hy Lạp, Demeter là vị nữ thần của nông nghiệp, mùa màng và thiên nhiên.
Demeter
Tuy nhiên nữ thần Demeter không định ra và cũng không liên quan lắm đến nguyên tắc Demeter mà chúng ta đang nói ở đây cả.
Chuyện xưa kể rằng vào mùa thu năm 1987, tại Đại học Northeastern Mỹ, trong một cuộc thảo luận của dự án Demeter (một dự án nhằm giúp việc phát triển phần mềm trở nên dễ dàng hơn), nguyên tắc Demeter lần đầu tiên đã được đề ra, nhằm mục đích tối thiểu hóa sự phụ thuộc lẫn nhau (loose coupling) của các thành phần trong ứng dụng. Cái tên Law of Demeter được sinh ra từ đó.
Cơ bản thì Law of Demeter chỉ có một nguyên tắc.
Only talk to your immediate friends, tạm dịch là "Chỉ chơi với những người thân bằng quyến thuộc."
hoặc
Don't talk to strangers, nôm na là "Đừng chơi với người lạ mặt"