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

Bắt hình của IP Camera từ ứng dụng Python

Thỉnh thoảng tôi bắt gặp câu hỏi "Làm thế nào để lấy ảnh chụp của IP Camera bằng code Python". Hầu hết câu trả lời, của cả Tây lẫn Việt, đều là kêu người ta dùng OpenCV.

Camera Image credit: www.clipartwiki.com

Quan điểm của tôi là, OpenCV tốt đấy, nhưng nếu chỉ để lấy ảnh chụp của camera thôi mà dùng OpenCV thì chuối quá. Thứ nhất, OpenCV là thư viện dành cho computer vision, nên nếu không khai thác gì đến tính năng đó mà ôm OpenCV vào thì nặng nề, dư thừa không cần thiết. Đằng nào thì tự OpenCV cũng không có khả năng xử lý giao thức RTSP mà nó phải gọi đến FFmpeg , nên để cho gọn ghẽ, tốt hơn là dùng thẳng FFmpeg để bắt hình camera đi. Thứ hai, tệ hơn nữa, mặc dù OpenCV sử dụng FFmpeg bên dưới, nó cũng không khai thác FFmpeg đúng cách nên có nhiều IP Camera cũng truyền video qua giao thức RTSP mà nó không lấy được. Lí do là RTSP có thể truyền trên TCP hoặc UDP, nhưng OpenCV được hardcode để gọi FFmpeg với chỉ mỗi TCP, thành ra nếu IP Camera truyền với "RTSP over UDP" thì OpenCV không lấy được.

Dùng Flask hay Django?

DjangoFlask là hai cái tên được nhắc đến nhiếu nhất khi nói về web framework của Python, đặc biệt là giữa những người mới bước chân vào thế giới Python. "Dùng Flask hay Django?" cũng là câu hỏi mà tôi hay nghe đi nghe lại trên các diễn đàn trao đổi, hỏi bài. Với kinh nghiệm về 2 thứ này, tôi viết một bài ngắn gọn, mong trả lời trước cho những ai mới chập chững bị "rắn cắn" này.

Flask_vs_Flask Image credit: coderseye.com

Về Flask, tôi đã 3 lần sử dụng Flask cho phần mềm của mình. Lần sử dụng đầu tiên, khoảng năm 2013, tôi làm cho một tay nghiên cứu sinh về Big Data, khi anh chàng này viết một phần mềm xử lý dữ liệu lớn (Java + Hadoop) và cần một trang web để làm giao diện điều khiển cho việc chọn dữ liệu nguồn và lấy kết quả về sau khi xử lý. Lần tiếp theo, tôi viết server phân quyền cho cổng login của mạng wifi (có các tên gọi khác là Splash page, Captive Portal, Wifi Marketing), và sản phẩm cuối cùng tôi dùng Flask là để tạo trang blog này (viết lai rai từ 2013 đến nay).