Áp dụng quy trình hiện đại khi làm phần mềm cho hệ thống nhúng

Một hoạt động kiểm nghiệm ý tưởng thiết kế phần mềm tại AgriConnect. Một số sản phẩm điện tử tại AgriConnect là kết quả của sự hợp tác, trong đó đối tác làm một module, AgriConnect làm một module và ghép với nhau. Trước khi bắt tay vào việc thì AgriConnect sẽ đề xuất API để 2 module trao đổi lệnh, dữ liệu với nhau, thường là phía đối tác sẽ lập trình ARM, AgriConnect thì lập trình ESP8266/ESP32.

Dù là lập trình cho thiết bị nhúng nhưng AgriConnect vẫn tổ chức một cách bài bản: tối đa module hóa các chức năng của phần mềm, cắt phần mềm ra những thư viện độc lập để có thể tái sử dụng. Ví dụ ở phần phân tích dữ liệu trao đổi với module ARM thực ra là xử lý chuỗi, không phụ thuộc vào phần cứng (vi điều khiển) cụ thể nên sẽ được tách ra thành thư viện. Việc tách ra thành thư viện trung tính này có một cái lợi nữa là, trong khi đối tác chưa làm xong thiết bị để có thể test thì phần code thư viện đó được viết và test thẳng trên PC.

A Rust code

CoBang, phần mềm quét mã QR cho Linux

Năm 2020 quả là một năm với nhiều biến động lớn, quy mô rung chuyển toàn cầu, tiêu điểm là dịch cúm CoVid-19 khiến nhiều cường quốc mất mặt và một nước "ít quan trọng" như Việt Nam trở thành điểm sáng. Hòa chung xu thế đó mình cũng tung ra một phần mềm "Made in Viet Nam" nhưng hướng đến người dùng quốc tế. Chém thế thôi chứ nó thật ra xuất phát từ nhu cầu cá nhân.

CoBang

CoBang là phần mềm quét mã QR dành cho desktop Linux. Mã QR đang ngày càng phổ biến, nó là phương tiện để trao đổi thông tin khó viết và khó nhớ. Một trong những hoàn cảnh mình bị buộc phải đụng đến mã QR là khi mình cần kết nối vào một mạng wifi nhưng không biết password. Thông tin wifi đó thì có lưu trong điện thoại nhưng điện thoại không cho xem password (một quan điểm kì cục của những người thiết kế HĐH điện thoại ban đầu). May thay hồi đó mình dùng điện thoại Xiaomi và nó nó chức năng chia sẻ thông tin wifi qua mã QR. Trong khi những phần mềm quét mã QR có ra rả trên Android thì trên Linux lại rất hiếm. Lí do của sự hiếm này là khi nói đến "quét mã QR", người ta chỉ hình dung đến việc cầm điện thoại lên soi thôi. Hồi đó trên laptop mình dùng QtQR nhưng khá cùi và có bug. Điều đó làm nảy sinh nhu cầu bức thiết là phải tạo một phần mềm mới. Dù nhu cầu là có nhưng vì có nhiều công việc gấp hơn nên mình đành trì hoãn đến năm nay mới bắt tay vào làm, nhân dịp muốn tìm một luồng gió mới thay cho công việc làm web hàng ngày.

Do cũng khá am hiểu những lớp công nghệ bên dưới desktop Linux nên mình dễ dàng hình dung được việc cần dùng những thư viện, công nghệ gì bên dưới và liên kết chúng ra sao. Thành tố quan trọng nhất là GStreamer, một thư viện/framework xuất sắc của thế giới Linux. Nó giúp hiện thực hóa ý tưởng của mình về cách luồng media vận hành ra sao: Sau khi lấy nguồn video liên tục từ webcam thì dòng video sẽ được chia làm 2 nhánh, một nhánh cho hiển thị lên cửa sổ giao diện, nhánh kia thì cho tách ra từng frame, lấy ảnh, và cho vào thư viện ZBar để soi tìm mã QR. Về giao diện đồ họa thì mình đi ngược với hot trend "cross-platform" để gắn bó với GTK, một thư viện native trên Linux.

Dữ liệu chuẩn về bảng mã các địa phương Việt Nam

Dù tình hình dịch bệnh CoVid-19 căng thẳng, mình vẫn ráo riết thực hiện ý tưởng quảng bá dữ liệu mở riêng biệt của Việt Nam và đóng góp vào kho thư viện Python, mong muốn biến Python trở thành ngôn ngữ thân thiện nhất với vấn đề bản địa Việt Nam 🇻🇳

Một thư viện mình đã xuất bản gần đây là VietnamProvinces, cung cấp danh sách tỉnh thành, quận huyện, phường xã Việt Nam cùng mã số.

Vietnam

Lý do ra đời thư viện này là vì mình thấy nhiều công ty ở VN có nhu cầu lưu dữ liệu nghiệp vụ kinh doanh kèm thông tin địa chỉ, và để có thể lọc dữ liệu, xuất báo cáo chính xác thì các quận huyện phải phân loại dưới dạng mã số. Tuy nhiên, có thực tế là mỗi cty có một bảng mã riêng, gây khó khăn cho việc trao đổi dữ liệu qua lại giữa các cty đối tác.

Tạo kho lưu cho các gói thư viện Python

Python là ngôn ngữ chính cho hệ thống backend của AgriConnect. Với đội ngũ giàu kinh nghiệm về Python, luôn đẩy sự khai thác, "bóc lột" Python đến mức cao nữa, cao nữa, nên quá trình vận hành của AgriConnect thường dẫn đến những nhu cầu "không giống ai". Một trong số đó là nhu cầu dựng một kho chứa gói thư viện Python "tại nhà". Bài dưới đây xin chia sẻ kinh nghiệm như thế.

Khi hệ thống của AgriConnect vận hành, tác vụ cài đặt các gói thư viện Python được thực hiện lặp đi lặp lại rất nhiều lần. Chúng đến từ:

  • Hệ thống chạy test tự động, kích hoạt mỗi khi có code mới được đẩy lên Git.

  • Việc deploy bản cập nhật đến các server nội bộ đặt rải rác ở các trang trại khách hàng.

Bút nhớ USB tốc độ cao

Thời gian vừa qua, do có việc hay phải tạo Live USB để cài Windows cho bạn bè nên tôi có dịp test tốc độ của bút nhớ USB.

File ISO của Windows 10 rất nặng (5GB) nên việc ghi vào USB rất tốn thời gian. Tôi vốn có sẵn một chiếc SanDisk chuẩn 3.0 và sau đó, do cái SanDisk đang bận dùng cho việc khác, tôi tìm mua thêm một chiếc USB khác, rồi vô tình mua trúng Moment chuẩn USB 3.1 Gen 1, hàng Đài Loan. Khi xả file ISO của Windows 10 vào chiếc Moment, tôi ngạc nhiên thấy tốc độ nhanh gấp nhiều lần chiếc SanDisk cũ. Không biết tại sao. Đọc trên Wiki thì thấy nói USB 3.1 Gen 1 không có cải tiến gì về tốc độ so với 3.0:

USB 3.1 preserves the existing SuperSpeed transfer rate, giving it the new label USB 3.1 Gen 1