Combining SSH and subprocess pipe in Python asyncio

When creating tool for system administration tasks, we often have the need to execute some other command-line programs, execute some commands on remote machine, transferring data between local and remote machine via SSH. A straightforward thinking will be to implement the tool in shell. But what if you, like me, hate the syntax of shell and be happier with Python? And especially when you want to challenge yourself with the new (somehow) cool asyncio?

To have a clear picture, let's give an example that you want to implement a command like this:

ssh remote-server "pg_dump -O webdata | gzip" | gunzip | psql localdb

Yếu tố Đông Nam Á trong văn hóa Việt Nam, ghi chép 1

Dạo gần đây, phong trào "về nguồn", tìm hiểu lịch sử cha ông của giới trẻ Việt Nam lên cao. Đó là điều rất phấn khởi. Tuy nhiên tôi thấy có dấu hiệu thiên lệch về kiến thức của các bạn, khi có bạn có thái độ đề cao yếu tố Đông Á, Trung Hoa trong văn hóa Việt Nam mà coi thường yếu tố Đông Nam Á, hoặc là lờ đi như không có, hoặc coi như là thứ tầm thường, hạ cấp. Tôi cho rằng hiện tượng này có nguyên nhân khách quan, khi tầng lớp trí thức xưa phần lớn là Nho sĩ, khiến cho việc nghiên cứu theo chiều hướng "văn hóa Trung Hoa" được đào sâu hơn, để lại nhiều tư liệu hơn, và các bạn trẻ ngày nay cũng chỉ được tiếp cận nguồn tư liệu "một chiều" như thế. Trong khi việc nghiên cứu theo hướng Đông Á có sẵn tư liệu, có sẵn thành quả của người đi trước thì việc nghiên cứu theo hướng Đông Nam Á bị trở ngại bởi tư liệu không có, đòi hỏi phải đi thực địa nhiều hơn, phải tiếp cận các tài liệu của những ngoại ngữ "không mạnh" như tiếng nói của dân Đông Nam Á (tiếng Thái, tiếng Malay v.v...), hoặc thảm hơn là phải "giải mã" những chữ viết cổ, thất truyền như chữ Chăm cổ.

Nhằm bù đắp cho sự mất cân bằng trên, tôi sẽ bắt đầu ghi lại những khám phá của tôi, trong quá trình tìm hiểu văn hóa lịch sử Đông Nam Á, nhằm cung cấp tư liệu để những người đam mê lịch sử có cái nhìn toàn diện hơn. Những gì tôi sẽ viết dưới đây, chỉ là những ghi chép vụn vặt, chứ không phải là bài nghiên cứu hoàn chỉnh, bởi vì tôi không phải là nhà nghiên cứu chuyên nghiệp. Tôi cũng chỉ hi vọng mình đóng góp được nhiều nhất là mặt "tư liệu".

Bắt đầu cho chuỗi bài này, xin kể về cách dùng từ ngữ về gia đình trong tiếng Việt, Thái (của Thái Lan), và Hán (tôi không biết chữ Hán nên sẽ trình bày về nó thông qua dạng Hán - Việt).

Nếu như trong tiếng Hán, "cha mẹ" là "phụ mẫu", thì trong tiếng Thái là "po me" (phát âm với thanh "thô", nằm giữa thanh ngang và thanh sắc của tiếng Việt), nghe rất giống với "bố mẹ", là một phương ngữ phổ biến của miền Bắc.


Python và cách tiết kiệm dung lượng cho phần mềm nhúng

Khi tôi bắt đầu bước chân vào mảng IoT đầu năm 2016, tôi bắt đầu lân la tiếp xúc với cộng đồng làm IoT Việt Nam (trên Facebook là chính). Ở Việt Nam, lực lượng tech làm IoT đa phần là dân điện tử đi lên, thế nên tôi hay gặp những câu hỏi như "nên dùng ngôn ngữ nào để lập trình nhúng" từ những bạn sinh viên mới. Tôi cũng ngạc nhiên khi thấy các bạn kháo nhau dùng NodeJS, theo phong trào.

Nếu cần dùng các ngôn ngữ biên dịch như C++, Go thì không nói. Nhưng nếu dùng ngôn ngữ thông dịch thì Python nên được dùng hơn NodeJS/JavaScript. Một khía cạnh nên tính đến là độ lớn file cần lưu trữ. Các board máy tính nhúng chạy Linux thường dùng thẻ nhớ, hoặc bộ nhớ flash trong (còn có cách gọi khác là NAND Flash, SPI Flash, eMMC) để thay thế ổ cứng (HDD) nên có dung lượng khiêm tốn. Nếu cách lưu trữ không phù hợp, có khi thư viện đã ngốn hết không gian lưu trữ đáng lẽ phải dành cho chương trình và dữ liệu (data).

Thứ nhất, cách quản lý các gói thư viện phụ thuộc của NodeJS cực kỳ tốn dung lượng, với sự trùng lắp các file thư viện.

node_modules

...

Let VirtualBox bridge network adapter work with Alpine Linux guest

There are many times that I need to launch a virtual Linux server to test something. If no Ubuntu specific feature is needed, I often use Alpine Linux for the virtual machine, for its lightness.

When I run a Linux VM, I always need to SSH to it, so in VirtualBox, I need to select "Bridge Adapter" as network adapter. Things just work fine if the guest machine is Ubuntu. But the first time setup for Alpine Linux (as guest machine), it doesn't work and the virtual machine cannot talk DHCP. In that case, you have to do one more step. Under Network Adapter > Advanced, look for "Adapter Type" and change it to "Paravirtualized Network (virtio-net)".

For more info about VirtIO, you can read here: https://www.ibm.com/developerworks/library/l-virtio/


Tìm kĩ sư phần mềm - CTO thay thế

Vì lí do gia đình nên từ năm sau mình sẽ dần dần giảm vai trò của mình tại AgriConnect, và cần tìm một "đệ tử chân truyền" để thay mình nối nghiệp lớn. Công việc là đề ra các giải pháp công nghệ phần mềm, mạng, phương thức kết nối giao tiếp trong hệ thống IoT nông nghiệp, đảm bảo quy trình phát triển phần mềm một cách chuyên nghiệp.

Software Engineer

Yêu cầu cho vai trò này như sau (tạm gọi là CTO):

  • Có tâm huyết với ngành nông nghiệp (VN hay ASEAN cũng được).