Đi bộ từ KL Sentral đến Bảo tàng Quốc gia Malaysia

Bảo tàng là một nơi mà mình luôn tìm đến khi đi du lịch ở một nước nào đó. Ở Malaysia, khá may là Bảo tàng Quốc gia (Muzium Negara) được đặt ở ngay gần bến xe trung tâm, tiện đường tìm đến (vì ai đến Kuala Lumpur mà chả phải đi qua KL Sentral).

Tuy nhiên, khu vực xung quanh Muzium Negara lại là "khu rừng mini" (Lake Garden) với nhiều con dốc, nên đường sá lại toàn đường cao tốc vòng vèo, không có đường phố thẳng băng. Người mới đến đây không rành đường phải đón taxi sẽ phải đi vòng một đoạn dài để đến được Bảo tàng, dù khoảng cách chim bay rất ngắn. Vì vậy mình sẽ hướng dẫn một lối đi bộ tắt đến Bảo tàng, bằng hình ảnh lượm trên mạng (vì tiếc là hồi còn sống ở KL, mình không chụp hình).

Để tiện hướng dẫn, hãy bắt đầu bằng việc đứng giữa sảnh của nhà ga. Sau đó, hãy tìm lối thang bộ đi lên "KTM Intercity"

Stair KTM Intercity


Be careful with Python asyncio.wait

Recently, I stumbled upon an annoying issue with Python's asyncio module, that is asyncio.wait terminating your program with "success" status when error occurs.

What is abnormal here?

Normally, when exception occurs, and you don't want to recover from it (with try... except), your program will exit as failure (non-zero exit code). However, if you have this code:

asyncio.wait(futures)

Nâng cấp Debian cho BeagleBone Black

BeagleBone Black khi bán ra thường được cài sẵn Debian 7 (Wheezy). Đây là phiên bản quá cũ (phát hành 2013) nên các phần mềm đi theo nó thường không đáp ứng đủ nhu cầu. Ví dụ tại AgriConnect, tôi viết phần mềm để chạy trên BeagleBone, dùng ngôn ngữ Python, cần những feature của Python 3.5 trở lên. Thế nhưng trong repository của Debian 7 chỉ có Python 3.2. Việc cài Python từ source code thì hơi bất tiện vì quá trình biên dịch khá nặng trong khi sức mạnh CPU của BeagleBone thì có hạn. Bởi vậy, tốt hơn thì nên nâng cấp Debian để sử dụng phần mềm, thư viện mới hơn từ repo của nó. Ví dụ, Debian 8 (Jessie) thì có Python 3.4, Debian 9 (Stretch) thì có Python 3.5.

Để nâng cấp Debian thì tôi thường lấy image từ https://rcn-ee.com/rootfs/. Để ghi image ra thẻ nhớ thì tôi không dùng dd, mà dùng bmaptool để cho tốc độc cao hơn và biết quá trình ghi tới đâu.

Khi nâng cấp Debian thì có một điều cần lưu ý là nên nâng cấp từng bước, từ 7 lên 8, 8 lên 9, chứ không nên nhảy cóc từ 7 lên 9. Lí do là bị vướng bootloader và tính năng bật tắt cape của BeagleBone.

Hiện nay, trên https://rcn-ee.com/rootfs/ không còn image Debian 8 nữa. Tôi đã kịp giữ lại một bản sao ở đây: http://quan.hoabinh.vn/Downloads/BeagleBone/Debian-2016-04/.


My packages store for BeagleBone running Debian 9

I'm building IoT gateway based on BeagleBone Black at the startup AgriConnect, with Python as the primary programming language.

When the application grows complex, the board shows to be weak. We cannot find stronger board than BeagleBone, so the only option is to try to make our app run lighter. We try to adopt latest Python version, now is 3.6, to take advantage of optimization work in them. The latest Debian image for BeagleBone is stretch (Debian 9), which doesn't include Python 3.6 in its repository.

There are some backport packages of Python 3.6 for Debian 9, but only for amd64 arch. Fortunately they provide a build script. I can use it to build for armhf arch, which is in BeagleBone boards.

How to build for armhf? The board is weak, we should not run the build process directly on BeagleBone. It can take some days!


Một tuần dãi nắng dầm sương vì rùa biển

Hôm nay là một ngày sau ngày tôi trở về từ chuyến đi tình nguyện bảo tồn rùa biển. Phải dành hai giấc ngủ để hồi phục sức lực, để có thể ngồi đây và ghi lại những kỉ niệm. Công việc trước mặt đầy bề bộn, vì một tuần vắng mặt, và còn một chapter truyện tranh One Piece mới ra chưa kịp đọc, nhưng tôi cứ để đó. Tranh thủ ngồi viết lại những dòng này, khi cảm xúc vẫn còn lâng lâng, kẻo sau này nó tan biến mất thì không còn gì để viết nữa.

Tôi biết đến chương trình tình nguyện bảo tồn rùa biển này một cách tình cờ. Cần giải thích thêm đây là chương trình khác với chương trình tại Côn Đảo. Chương trình tại Côn Đảo do IUCN, "Liên minh Bảo tồn Thiên nhiên Quốc tế", tổ chức và tôi đã nghe đến từ trước, dù không có điều kiện tham gia. Còn chương trình tôi vừa đi tại Vườn Quốc gia Núi Chúa, Ninh Thuận thì do nhóm Gia đình em yêu thiên nhiên Việt Nam tổ chức. Là một người yêu động vật (hơn cả người, trừ con gái) nên tôi tham gia nhóm Sinh vật rừng Việt Nam với tư cách "lót dép ngồi hóng". Năm ngoái tôi bắt gặp một bài đăng trong nhóm về việc mở lớp đào tạo kĩ năng đi rừng. Bài này lại được đăng chéo từ nhóm Tình nguyện viên cứu hộ rùa biển qua, vì lớp học này là gom "kĩ năng sống trong rừng" với "kĩ năng nhận dạng và cứu hộ rùa biển" vào một buổi. Mặc dù liếc thấy chữ "cứu hộ rùa biển" nhưng tôi không để tâm lắm, vì tôi nghĩ phần cứu hộ rùa biển này là dành cho người đã là thành viên từ trước, không phải tay ngang như tôi. Tôi đến lớp với mục đích ban đầu là để học kĩ năng đi rừng. Đó là một buổi học thú vị. Tôi lắng nghe một cách say mê về những mẹo đốt củi, mẹo chọn đất dựng lều, mẹo lội suối đá, về sự hữu dụng của những thứ nghe như không liên quan như bao cao su, băng vệ sinh trong việc đi rừng, về những loại cây độc, ăn được, nhưng chỉ được một lần, và những loại rắn độc, có loài thích giấu mình dưới đống lá khô, để khi mình lỡ đạp chân lên thì "bặp bặp", xong đời. Rồi tôi lại nghe say mê với những kiến thức về cuộc đời của rùa biển, về tập tính "mẹ thích thì mẹ đẻ, không đẻ năm nay thì để năm sau" của các mẹ rùa biển, về việc phải làm trẻ thơ suốt 35 năm mới được yêu, về cuộc đời mà phần lớn thời gian là "biến mất" khỏi sự theo dõi của con người. Đây là lần đầu tiên tôi thấy anh Phùng Mỹ Trung, người mà tôi đã để ý đến tên từ 12 năm trước (2015). Hồi đó, những năm đầu vào đại học, tôi có tham gia viết bài cho một số tờ báo về công nghệ, tin học. Một trong những tờ mà tôi cộng tác là tờ Khoa học & Ứng dụng (KH&UD) của Sở KHCN Đồng Nai. Là một tạp chí nhỏ, tỉnh lẻ nên nhuận bút không cao và họ thường gửi báo mới về cho tôi. Trong một số, tôi bắt gặp bài giới thiệu về phần mềm "Sinh vật rừng" của Phùng Mỹ Trung. Nội dung phần mềm nghe đã hấp dẫn mà thông tin tác giả cũng thú vị, vì nghề nghiệp của tác giả vừa là "công nghệ thông tin", lại có "kiểm lâm" rồi "hải quan" nữa. Kiểm lâm mà biết làm phần mềm, coi bộ "hàng hiếm" à. Phần mềm phát hành dưới dạng đĩa CD mà tôi lại không thấy CD bán ở các cửa hàng vi tính nên không mua được. Hồi đó tôi hơi ngu và nhát nên không nghĩ đến chuyện nhờ báo KH&UD Đồng Nai mua giùm. Sau này, nhờ search tên phần mềm mà tôi lần ra website vncreatures.net, phiên bản online của phần mềm CD kể trên. Sau vài năm nữa thì tôi lần ra nhóm Facebook "Sinh vật rừng Việt Nam" và dẫn dắt tôi đến với chương trình bảo tồn rùa biển này.

Dông dài tí, giờ quay lại với chuyện rùa biển. Sau lớp học hôm ấy thì tôi quyết định tham gia nhóm cứu hộ rùa biển luôn, vì trong lớp học, "bác Trung" có bảo là vẫn còn đang tuyển người. Sau buổi học lý thuyết thì tới một ngày học thực hành về kĩ năng đi rừng đêm tại Thác Mai, Đồng Nai. Đó là lần đầu tiên tôi được đụng đến lều dã ngoại và lần mò cách dựng lều. 9 giờ tối chúng tôi được lùa vào rừng, chia nhóm để mò đường về trại. Dẫn đầu nhóm là Tân, một chuyên gia phượt, đã quen với việc đi rừng nên chúng tôi hoàn tất hành trình khá nhanh. Tôi không được thoả mãn cho lắm. Không có tiết mục một nhóm bị lạc và nhóm kia đi tìm. Nhưng tôi vẫn còn nhớ cái cảm giác hoang mang khi tất cả đèn pin được tắt, nhìn xung quanh chỉ một màn tối om. Cái cảm giác chơ vơ không biết mình ở đâu, không biết xung quanh mình có gì, và những con ma trong tưởng tượng có thể ào ra hù mình bất kì lúc nào. Trong ngày học thực hành hôm ấy, chúng tôi được giảng lại về rùa biển. Lần này thì không được say mê cho lắm vì tôi đã nghe rồi. Chúng tôi đã có một đêm ngủ lều trên những tảng đá ven bờ suối, quây quần bên đống lửa đêm, nghe tiếng đàn ca, nghe tiếng nước chảy róc rách qua kẽ đá, nhìn trời đầy sao, nghe sương lạnh thấm qua lớp áo, rồi ngắm mặt trời lên, nhìn những làn khói nước buổi sáng lan tràn, phủ mờ mặt suối. Và rồi chúng tôi chia tay nhau, trở về để chờ đợi trong mòn mỏi và hào hứng chuyến đi thực tế ra VQG Núi Chúa để gặp các bạn rùa.

Một tháng, hai tháng trôi qua... Được sáu tháng thì tới lượt tôi lên đường, vì tôi được xếp vào nhóm 9 (đi vào tuần 9 của chương trình). Trước ngày đi một tháng thì tôi đã nôn nao tới mức thu gom các bạn cùng nhóm, lập một Facebook group để thảo luận việc chuẩn bị. Nhưng việc thảo luận chẳng tới đâu vì các bạn trong nhóm rất im hơi lặng tiếng, và nhân sự thay đổi xoành xoạch. Chuyến đi sẽ kéo dài 1 tuần, nên có những bạn bị vướng kì thi, hoặc không xin nghỉ phép công ty được, phải chuyển nhóm lên xuống, tới lui. Đối với tôi thì dễ, mặc dù đầu tắt mặt tối nhưng lịch làm việc của tôi co giãn được, do hiện giờ tôi không chịu sự quản lý của một công ty nào cả. Cần nghỉ thì chỉ việc báo trước. Và rồi một tuần trước khi đi, chúng tôi hẹn gặp nhau offline. Nhóm có tám người nhưng cuộc gặp mặt chỉ có ba! Hẹn nhau lúc 8h30 nhưng do ước lượng thời gian di chuyển sai nên tôi đến sớm 30'. Đây là lần hiếm hoi ước lượng sai mà tôi lại đến sớm, chứ thông thường từ Thủ Đức vào trung tâm thành phố, tôi toàn đi lâu hơn dự tính, thành thử đến trễ. Tại đây tôi gặp hai người đầu tiên của nhóm: Kim Ngân và anh Tiến. Anh Tiến là người sẽ rơi vào tình huống éo le sau này, vì ban tổ chức ghi nhầm tên anh thành Tiên, thiếu mất dấu sắc. Kết quả là giấy chứng nhận VQG cấp ghi sai tên anh. Nhận giấy chứng nhận ghi tên một người không phải là mình, chắc cảm giác không được thoải mái cho lắm. Cảm giác của tôi lần đầu gặp Kim Ngân là cô ấy hơi trẻ (vì nhỏ con) và... giống con trai! Lần đầu gặp mặt, tôi là một kẻ xa lạ nên Ngân ngại ngùng, ít nói. Trái ngược với sự rụt rè của Ngân, anh Tiến lại tỏ ra là một người hay nói, dễ bắt chuyện. Anh Tiến trông cũng khá trẻ so với tuổi. Đến hôm đó tôi mới biết là có hai bạn trong nhóm rút lui khỏi chương trình, thông qua nguồn tin rò rỉ từ bạn bè. Cả BTC lẫn hai bạn rút lui đều không thông báo cho nhóm. Có vẻ việc giao tiếp, liên lạc giữa BTC và TNV không được tốt. Thiếu người, giao tiếp chưa tốt nên việc phân công chuẩn bị đồ đạc cũng chưa rõ ràng. Tôi cũng hơi lo không đủ người để chia nhau canh bãi rùa. Mấy hôm sau thì tôi nhận được tin nhắn của Khuê, một TNV nhóm 7, báo rằng em sẽ tham gia nhóm tôi. Khuê và Long, một trong hai trưởng nhóm, là hai người mà tôi đã gặp trong lần đi Thác Mai.


Fix: Gitg doesn't use monospace font in Ubuntu

In my work, I always use Git as command line. But I often use a GUI program to have better view on version history. Gitg is my usual choice.

Since the inclusion of Gtk3-based Gitg in Ubuntu, some annoying bugs have started to appear. One is that Gitg's source view doesn't respect Monospace font setting of the desktop environment.

Imgur

I filed a bug report to Gitg developers, but it seems that it is Ubuntu theme problem, so no fix for Gitg is given.


Phần mềm nguồn mở và chủ nghĩa xã hội

Bài viết này Why We Chose Vue.js ví von tếu thật: Nếu như Backbone là vô chính phủ (không ai lãnh trách nhiệm), Angular là chế độ độc tài thì Vue.js là chủ nghĩa xã hội.

Nói tới sự tương quan giữa phần mềm và chính trị mới nhớ, phong cách của phần mềm nguồn mở giống như chủ nghĩa xã hội: làm theo năng lực, hưởng theo nhu cầu. Bạn viết phần mềm với một tâm thế không mong cầu lợi nhuận (mặc dù phần mềm nguồn mở vẫn trả lại lợi ích cho bạn một cách gián tiếp), bạn viết phần mềm rồi quăng mã nguồn ra cho cộng đồng, ai thích xài thì xài, ai thấy cần cải tiến thì cứ việc sửa trên mã nguồn đó rồi lại đóng góp trở lại cho cộng đồng. Mà khi bạn cho không phần mềm cho cộng đồng, không có nghĩa là bạn quăng ra cái đống bùi nhùi cẩu thả. Các dự án phần mềm nguồn mở đều đặt chất lượng và tính cộng tác lên hàng đầu, nên code phải viết cẩn thận sạch sẽ, test tiếc cẩn thận, tài liệu rõ ràng đầy đủ. Phần mềm nguồn mở không bị áp đặt về thời hạn hoàn thành nên không có lý do gì để rút ngắn công đoạn.

Phần mềm nguồn mở đã trở thành một dòng chảy, một xu thế không thể cưỡng lại. Những cái tên quen thuộc như Chromium (lõi của Chrome và Cốc Cốc), Firefox, Android, UniKey, Java, Python, NodeJS, MySQL... đều là phần mềm nguồn mở. Microsoft trước kia là "thế lực thù địch", từng cố gắng thuyết phục khách hàng tránh xa phần mềm nguồn mở bằng câu nói "Linux là cộng sản" (vâng, đây gọi là sự "tự do tư tưởng" của nền chính trị Mĩ, khi gắn vào đầu người dân một mặc định "cộng sản là thứ xấu xa"). Thế nhưng 2 - 3 năm gần đây Microsoft đã chuyển hướng về phía phần mềm nguồn mở một cách mạnh mẽ và đóng góp nhiều vào các dự án khác nhau.

Cũng giống như phong trào CNXH ngoài đời thực, khi một số quốc gia tự xưng CNXH lại có màu sắc "độc tài" trong đó, thì một số dự án phần mềm nguồn mở lớn cũng xoay quanh những "nhà độc tài", mà các lập trình viên trong đó gọi vui là "Benevolent Dictator For Life", như Linux, Python.

...

Chuột không dây mau hư, cứu làm sao

Sử dụng chuột không dây, chắc anh em sẽ "đau lòng" khi mới xài được mấy tháng mà chuột đã ngưng hoạt động, thay pin mới vào cũng không dậy được. Mà loại chuột này lại đắt tiền, vứt đi thì tiếc.

Tin vui cho anh em là đa số các trường hợp khi chuột không dây ngừng hoạt động, không phải là chuột đã hư, mà có vấn đề nơi ổ pin. Đa số chuột dùng pin tiểu, nặng nề nên lâu ngày làm lỏng lò xo nơi điện cực dương. Lò xo lỏng khiến độ tiếp xúc yếu, điện không từ pin vào chuột được.

Ổ pin

Cách khắc phục rất đơn giản, chỉ cần cầm đầu lò xo kéo ra cho lò xo giãn ra lại, khiến lò xo ép vào pin chặt hơn. Vậy là ta lại tung tăng cùng chuột đi khắp nơi rồi.


Creating PostgreSQL cluster in portable hard drive

I'm working as a part-time software developer for EasyUni. Its database is so huge that I cannot install on my laptop's internal HDD. I have to look for a way to install it in my portable HDD.

My solution is to create a second PostgreSQL cluster with data directory residing in my portable HDD. This cluster must not be started up automatically, because the portable HDD is not always attached. So my command to create this second cluster is:

sudo pg_createcluster 9.5 second -d /media/quan/Quan-Backup/Postgres/second --start-conf=manual
...

Bất cập của IoT

Trong phong trào Internet of Things, khi mà báo chí công nghệ suốt ngày tung hô về nó, mình lại đón nhận nó với sự dè dặt. Vì mình hiểu các tay nhà báo công nghệ đa số viết bằng tinh thần marketing, đa số bài báo gốc được viết ở Âu Mĩ, nơi điện hầu như không bao giờ cúp và Internet nhanh gần như mạng LAN, nơi hiếm khi phải gọi cho nhà mạng để thông báo sự cố rớt mạng.

Vì thế hệ thống giám sát & điều khiển cho nhà trồng tự động hóa của mình chạy trên mạng LAN là chính, chỉ sử dụng Internet khi các "bác nông dân" tụi mình muốn truy cập vào hệ thống từ nhà ở (không ở gần vườn).

Hệ thống đi vào hoạt động chưa được 1 tháng mà đã mấy lần nếm quả đắng với Internet khi mà buổi tối bỗng rớt mạng, từ nhà không thể truy cập vào để bật máy bơm lên được. Lúc này, mình mới nghĩ, may mà mình không đi theo trào lưu IoT, đưa bộ điều khiển trung tâm lên cloud, không thì mọi giao tiếp bị "đứt gánh" luôn. Những lúc rớt mạng thế này, nếu là ban ngày thì mình vẫn có thể xách máy chạy ra vườn để truy cập vào hệ thống qua mạng LAN.