How to play Zoo Tycoon 2001 in Ubuntu

Zoo Tycoon is one of my favourite games. Though I played it the first time around 2003, today, after more than 20 years, I still miss it. It is a Windows game, and I have switch to Linux for more than ten years, I still want to play it. Here is how to play it on Ubuntu.

Zoo Tycoon on Ubuntu

This article assumes that you already have its two CDs as ISO files. I cannot tell where to download them.

Released in 2001, where PCs are just 32-bit, this game can only run in 32-bit environment. This is a key to remember.

...

Effectly copy part of code file from remote machine

Let's say you have a source code file on a remote machine (accessed via SSH) and you want to copy a portion of the content to your local machine. There are many ways to do this, but I want to present an effective way, as it will take advantage of Helix's very convenient block selection feature.

For example, in the following image, the window on the left is accessing a remote machine, via SSH, on which I am opening a source code file using Helix. The window on the right is an editor, e.g. Geany, of your local machine. I want to copy the source of the enable_mqtt_on_gsm_modem function to Geany. In the left window, we should use a slightly modern Terminal application, e.g. Kitty, WezTerm, Alacritty because of a feature that I will explain later.

Figure 1

On the source file, we'll move the cursor to any line inside the enable_mqtt_on_gsm_modem body, then press m. Helix will bring up a menu of m command, let's press a to select "Select around object". Helix then shows the menu of m a.

...

Sao chép nội dung một phần file code từ máy ở xa

Giả sử bạn có một file source code trên máy ở xa (truy cập qua SSH) và bạn muốn sao chép một phần nội dung sang máy trước mặt. Có nhiều cách để làm, nhưng tôi muốn trình bày một cách hiệu quả, vì sẽ tận dụng tính năng chọn khối rất tiện lợi của Helix.

Ví dụ trong hình sau, cửa sổ bên trái là đang truy cập vào một máy ở xa, qua SSH, trên đó tôi đang mở một file source code bằng Helix. Cửa sổ bên phải là một trình soạn thảo, ví dụ Geany, của máy trước mặt. Tôi muốn sao chép source của hàm enable_mqtt_on_gsm_modem sang Geany. Cửa sổ bên trái, ta nên dùng một ứng dụng Terminal hiện đại một tí, ví dụ Kitty, WezTerm, Alacritty vì một tính năng mà tôi sẽ giải thích sau.

Hình 1

Bên file nguồn, ta sẽ di chuyển con trỏ đến bất cứ dòng nào phía trong thân hàm enable_mqtt_on_gsm_modem, sau đó nhấn m. Helix sẽ hiện ra menu của lệnh m, nhấn a để chọn "Select around object". Sau đó Helix lại hiện ra menu của "m a".

...

Những quán ăn ngon Quận 9 (Tp Thủ Đức)

Sống ở Quận 9 (nay là một phần Tp Thủ Đức) một thời gian, mình thỉnh thoảng chạy tới chạy lui ăn thử các quán để khám phá chỗ ăn ngon mà ít người biết đến. Nay xin giới thiệu một vài địa điểm:

  1. Tam Đa quán

Ấn tượng là món lẩu bò có nhiều khoai môn. Nồi lẩu có 150.000đ mà ngon, hai người ăn đủ no. Mặc dù mình nhấn mạnh khoai môn, nhưng thịt bò cũng không ít.

Các món khác cũng ngon và rẻ:

...

Thư viện ghi log cho ứng dụng Python

Trong quá trình phát triển phần mềm, ghi log là một hoạt động quan trọng phục vụ cho người lập trình. Khi một chương trình chạy không như mong muốn, ta cần phải biết sai chỗ nào để sửa. "Ghi log" là bắt chương trình của ta "kể lại" diễn biến hoạt động của nó, giá trị của một vài biến lúc ấy, để giúp ta kiểm tra lại được chỗ nào sai.

Vậy mình thường dùng thư viện nào cho việc ghi log?

Như đã đề cập trong bài "Khởi đầu dự án Python như thế nào để thuận tiện phát triển lên", Python có một thư viện chuẩn logging, mà điểm lợi là khi các thư viện cùng dùng nó, ta có thể từ tầng ứng dụng điều chỉnh "log level" cho tầng thư viện mà không cần can thiệp vào code của thư viện ấy. Vì lẽ đó, đương nhiên các ứng dụng của mình cũng dùng logging nhưng cũng kèm thêm một số thư viện bổ trợ khác để thỏa mãn nhu cầu / sở thích cá nhân.

Một trong những nhu cầu của mình là cần màu sắc phân biệt, để truy tìm điểm cần tìm cho dễ, ít nhất là các log level cần có màu sắc khác nhau để dễ dàng lọc lựa, bỏ qua thông điệp ít quan trọng. Về khoản màu sắc thì mình ưa dùng thư viện rich. Nó thậm chí còn hơn cả mong đợi vì nó còn nhận diện và tô màu theo "kiểu dữ liệu", ví dụ dữ liệu số có màu khác, dữ liệu chuỗi, đối tượng... có màu khác.

...

Máy pha cafe phù hợp xe đẩy

Vừa rồi lang thang ở Quận 12, Tp HCM, mình bắt gặp một máy pha cafe khá sáng tạo của người Việt, phù hợp với mô hình xe đẩy bán cafe:

máy cafe VN

Điều đặc biệt của mẫu máy pha cafe này là:

  • Chiếm ít không gian.
...

Lập trình ESP32 với Rust: cập nhật firmware OTA

AgriConnect, anh em đã sử dụng Rust để lập trình firmware cho ESP32 (và cả một phần backend của nền tảng IoT). Từ hôm nay tôi sẽ bắt đầu một loạt bài nhằm giúp những đồng đội trên hành trình này. "Cập nhật firmware qua mạng (OTA / over-the-air)" là bài chia sẻ đầu tiên vì đây là chủ đề mà một trong những tác giả của esp-idf-hal đã đề nghị tôi viết.

Để có tính năng cập nhật firmware OTA, esp-if-svc đã cung cấp API rồi, nhưng còn thiếu tài liệu hướng dẫn sử dụng API, cách chuẩn bị phân vùng để sử dụng API. Bài viết này là để bổ sung chỗ thiếu đó.

(English version is here.)

Chuẩn bị phân vùng

...

Programming ESP32 with Rust: OTA firmware update

We at AgriConnect have been using Rust to develop firmware for ESP32 (and even part of our IoT platform backend). From today we start a series to help fellows on the same journey. "Over-the-air firmware update" is the first sharing because it was the topic that one of the authors of esp-idf-hal suggested me to write.

For OTA firmware update, esp-idf-svc already provides API. What it lacks is a documentation how to use the API, how to prepare partitions to use with that API. This post will complement that.

(Bản tiếng Việt ở đây.)

Prepare partition

...

Configure proxy for APT to download faster

As an Ubuntu user, I often retrieve softwares from PPA in addition to official Ubuntu repositories. My own QR scanner software, CoBang, is also hosted there. But one issue with PPAs is that, it is slow to download for people from developing countries like Viet Nam. We can overcome that by using a domestic proxy server.

The idea of using proxy is that, we use the Internet line at datacenter (where proxy server stays) to download files from PPA, which is fast for international connection, then the files are delivered to our home via domestic line, which is fast for domestic connection. So the requirement is that, the proxy server must be in the same country, or in near neighbor country.

If we have a VPS, we can install Dante to have a proxy server. I have another post about how to install and setup Dante. This guide applies for SOCKv5 server, like Dante. If you use another type of proxy, I cannot help.

proxy

...