Họ tên có phản ánh nguồn gốc dân tộc không?

Vừa rồi nghỉ dịch, ngoài thông tin về dịch lan tràn khắp mạng XH, đây đó nhiều người vẫn tiếp tục những chủ đề chuyên môn của họ, như là mảng lịch sử. Chỉ trong thời gian ngắn mà mình bắt gặp một ý kiến nổi lên hai lần, ấy là có mấy bạn thấy các tên họ của người Việt đều là "gốc Tàu" xong suy luận là người Việt có gốc Trung Quốc.

Mình thì không có ý kiến gì về gốc gác họ tên, lẫn chẳng có ý kiến gì về nguồn gốc người Việt (việc đó khó quá, nên để nhiều ngành khoa học hợp tác làm). Chỉ muốn nói cách suy luận đó là hệ quả của sự "học lệch". Vì chỉ đọc sử Trung Quốc, theo dõi các chuyện văn hóa nghệ thuật của khối Đông Á nên các bạn ấy không ngờ rằng trên đời, việc một dân tộc này dùng họ tên của tiếng dân tộc khác là chuyện thường tình. Ví dụ trong Đông Nam Á này thôi, người Malay thì lấy tên từ tiếng Ả Rập (chẳng hạn thanh niên trong hình là Syed Saddiq bin Syed Abdul Rahman, còn trẻ thế mà đã làm Bộ trưởng của Malaysia rồi), người Philippines thì lấy tên gốc Tây Ban Nha, người Thái Lan, Indonesia thì lấy tên gốc tiếng Phạn (Ấn Độ). Các nước còn lại cũng thường lấy tên có một nửa gốc tiếng Phạn, Pali. Tên họ không phản ánh nguồn gốc dân tộc mà chỉ là kết quả của sự ảnh hưởng văn hóa, những tác động chính trị. Người Malay lấy tên tiếng Ả Rập vì họ cải theo đạo Islam. Người Philippines lấy tên tiếng Tây Ban Nha vì họ rơi vào sự thống trị của thực dân TBN ngay từ khi họ chưa kịp tạo dựng một nhà nước quân chủ thống nhất với nền tảng văn hóa đủ dày. Thái Lan và Indonesia thậm chí có luật bắt buộc công dân phải đặt tên sao cho chỉ được dùng các từ gốc tiếng Phạn, thành thử có nhiều người gốc Hoa nhưng lại có tên Vichai, Sri, Rahman, thay vì những Wong, Tan, Ng như bên Malaysia, Singapore.

Syed Saddiq

Nhân nói về họ tên, có một điều thú vị là không như khối Đông Á, nơi "phần họ" được duy trì từ ông xuống cha, con, cháu, thì trong một số truyền thống văn hóa khác, "họ" chỉ đơn giản là "con ông X" thôi, nên sẽ thay đổi theo thế hệ (dùng tên cha lấp vào phần "họ" của con). Ví dụ như anh chàng bộ trưởng phía trên, theo https://desklib.com/document/a-leader-is-someone-who-can-identify-way/ thì cha ông tên "Syed Andul Rahman" và mẹ ông tên "Sharifah Mahani binti Syed Abdul Aziz". Chữ "bin" ở đây nghĩa là "con trai của ông..." và "binti" là "con gái của ông...". Ngoài ra thì người Myanmar vẫn còn giữ truyền thống là "không có họ".

...

Khởi đầu dự án Python như thế nào để thuận tiện phát triển lên

Thỉnh thoảng mình có mối duyên ghé mắt qua các dự án Python, thấy cách sắp đặt vẫn còn chuệch choạc, không có lợi lắm cho việc phát triển tiếp diễn. Nên sau đây mình chia sẻ một số cách thức, công cụ, thư viện mà bạn nên chuẩn bị từ đầu, để công việc sau đó trở nên thoải mái hơn. Cách sắp đặt này có thể coi là chuẩn trong những năm 2020 này (nhưng có thể trở thành lạc hậu sau 5 năm nữa).

1. Quản lý các gói phụ thuộc

Gói phụ thuộc (dependency) là các thư viện / công cụ bên ngoài mà dự án của bạn cần. Các gói này phải được cài trước khi phần mềm của bạn có thể chạy. Ví dụ bạn làm về khoa học dữ liệu thì sẽ cần NumPy, làm web thì sẽ cần Django v.v... Việc một dự án phụ thuộc vào hàng chục gói thư viện khác là chuyện bình thường. Thông thường các gói này sẽ được liệt kê trong file requirements.txt để khi sao chép dự án sang máy khác thì biết cần cài cái gì. Tuy nhiên, file requirements.txt chỉ là hình thức tối thiểu để quản lý gói phụ thuộc. Nó không đủ để hỗ trợ tình huống phức tạp hơn. Ví dụ dự án của bạn sử dụng thư viện A phiên bản v1 và B phiên bản v2. Sau vài tháng nhu cầu nảy sinh, bạn cần thêm tính năng mới, và để làm tính năng mới, bạn cần đến thư viện C. Tuy nhiên thư viện C này cũng lại phụ thuộc thư viện A, và thư viện C đang có nhiều phiên bản, v1 đến v5, mỗi phiên bản của C sẽ thương thích với một phiên bản A khác nhau. Nếu bạn nhắm mắt chọn phiên bản mới nhất của C thì nó sẽ yêu cầu A v3. Bạn không thể mù quáng nâng cấp A lên v3 vì có thể phần mềm của bạn không tương thích và đứt gãy. Nhưng trong 5 phiên bản của C mà thử từng cái một thì rất cực. Đó là lúc bạn cần một thứ nâng cao hơn file requirements.txt.

Một công cụ hiện đại mà mình hay dùng, và khuyên dùng cho tình huống này là Poetry. Khi bạn cần thêm C vào danh sách phụ thuộc, chỉ cần chạy:

...

API mở cung cấp dữ liệu công cộng Việt Nam

Dạo này tình hình dịch bệnh nghiêm trọng, phải ở nhà cả ngày nên mình tranh thủ làm một bộ API HTTP giúp truy cập dữ liệu mở, công cộng của Việt Nam.

Sản phẩm đầu tiên là API cung cấp dữ liệu tỉnh thành Việt Nam tại provinces.open-api.vn, ra mắt vào tháng trước:

Province API

API này dựa trên một thư viện Python, VietnamProvinces, mà mình đã xây dựng hồi còn làm việc tại SunshineTech.

...

Tự dựng proxy để truy cập web nước ngoài nhanh hơn

Mấy bữa nay, nghe đâu cáp Internet đại dương lại bị đứt, khiến việc truy cập website nước ngoài rất khó khăn. Tuy nhiên đường truyền tại các datacenter trong nước thì vẫn nhanh như lũ về, cho nên nếu đi ké được qua đường truyền này thì ngon. Ta có thể làm việc ấy bằng cách tự dựng proxy, để "bẻ lái" đường truy cập từ nhà đến datacenter rồi từ datacenter ra thế giới.

Trước tiên, phải nhắc nhở rằng bài hướng dẫn này không dành cho tất cả mọi người, mà nó dành cho "nhà có điều kiện". "Điều kiện" ấy là bạn phải có một server trong nước. Bạn có thể tự thuê cá nhân hay xài ké server công ty. Và như thường lệ, bài hướng dẫn này áp dụng cho hệ điều hành Linux, cụ thể là Ubuntu 20.04.

Phía server

Để nói cụ thể hơn thì phần mềm proxy mà ta sẽ dùng thuộc thể loại HTTP proxy, tức là nó chỉ chuyển hướng các truy cập website (giao thức HTTP/HTTPS). Các phần mềm game, chat dùng giao thức riêng thì sẽ phải dùng các loại proxy khác.

...

Khắc phục tình trạng VPN WireGuard bị treo

Trước đây tôi có viết bài Dựng mạng VPN với WireGuard . Sau một thời gian sử dụng, để ý thấy do các máy con (client) của tôi thỉnh thoảng xảy ra tình trạng treo WireGuard: từ các máy khác không ping đến nó được. Vì vậy tôi lại tiếp tuc đề tài WireGuard này, giới thiệu một cách khắc phục.

Trước tiên, xin nêu vài nguyên nhân khiến VPN WireGuard bị treo:

  • WireGuard của năm 2018 (lúc tôi viết bài trên) được nạp lên hệ thống dưới dạng DKMS. Như ta đã biết, khác với các giải pháp VPN thông thường, WireGuard chạy dưới dạng một driver/module của nhân Linux. Nhưng khi được phân phối ở dạng DKMS, mỗi lần máy được nâng cấp nhân mới thì module này phải trải qua quá trình build lại từ mã nguồn bên ngoài. Điều này đôi khi gây ra tình trạng, phiên bản cũ vẫn còn lơ lửng trong RAM và phiên bản mới chưa thế chân vào được, thế là WireGuard bị treo. Từ Linux 5.6 trở đi thì WireGuard đã được tích hợp vào nhân, không còn ở dạng DKMS nữa nên tình trạng này không còn.

  • Network interface của WireGuard (ví dụ wg0) được khởi tạo khi máy vẫn chưa thực sự kết nối với Internet (sai thứ tự), việc kết nối với server VPN không thành công, khiến việc cấu hình không hoàn tất. Hoặc khi đang chạy ngon bỗng dưng Internet bị rớt, mất luôn mối kết nối với server. Điều này hay xảy ra với các máy con (client) vì các máy này không được đảm bảo luôn có Internet, thậm chí là không phải lúc nào cũng có điện.

...