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).

Dựng mạng VPN với WireGuard

Tiếp nối bài trước, Câu chuyện sử dụng VPN, tôi xin mô tả cách dựng một mạng VPN cho mục đích cá nhân bằng phần mềm WireGuard.

Mục đích sử dụng mạng VPN của tôi chỉ là để truy cập từ xa vào các thiết bị IoT của tôi nên mô hình VPN của tôi chỉ phù hợp với nhu cầu đó. Nếu bạn cần dùng VPN cho mục đích khác, ví dụ để vượt tường lửa, truy cập vào website bị chặn, thì bạn không nên trông đợi gì vào bài viết này.

Trước khi bắt tay vào việc, ta cần mường tượng sơ đồ mạng sẽ như thế nào:

Sơ đồ

Câu chuyện sử dụng VPN

Tôi thỉnh thoảng có nhu cầu sử dụng mạng VPN. Trong khi nhiều bạn dùng VPN để vượt qua bức tường chặn các trang web mà chính phủ không mong muốn thì mục đích dùng VPN của tôi lại nhằm phục vụ cho IoT, tạo đường truy cập các máy tính nhúng (BeagleBone, Raspberry Pi) từ xa qua Internet, phục vụ cho công việc.

Các máy tính nhúng của tôi hay được đặt trong một mạng LAN mà router của nó tôi không được can thiệp, nên không thể cấu hình port forward để truy cập trực tiếp từ ngoài Internet được.

No-VPN

Bằng cách thiết lập VPN, tôi sẽ có một mạng LAN ảo giữa laptop của tôi đang ở một quán nước dọc đường và máy tính nhúng đang đặt ở một căn phòng nào đó.