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.

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.

  1. Enable i386 software installation with this command:
...

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

...

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.

...

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

...

Làm việc từ xa bằng máy tính ở nhà

Mình là người hay làm việc bên ngoài văn phòng, cụ thể là quán cafe hay trên đường đi du lịch. Thế nhưng laptop thì không mạnh bằng máy bàn nên mình vẫn thực sự dùng máy tính bàn ở nhà cho công việc, dù đang dùng màn hình và bàn phím của laptop. Vậy mình làm thế nào?

Dù làm về lập trình và có thâm niên nhưng mình vẫn chỉ sử dụng máy móc bình dân. Cụ thể laptop của mình chỉ là Dell Vostro 5568 với CPU Core i5 (2 nhân 4 luồng).

Laptop

Trong thời gian bị phong tỏa vì CoVid, mình cứ băn khoăn lỡ laptop này bị hư thì làm sao đi sửa để tiếp tục làm việc được, nên sau khi được mở cửa lại, mình cũng mua luôn một máy bàn để dự phòng, lỡ bị phong tỏa nữa. Máy bàn mà mình mua, mặc dù rẻ hơn laptop nhưng mạnh hơn nhiều, là con ASRock DeskMini X300, với CPU Ryzen 5 5600G (6 nhân 12 luồng). Máy chạy nhanh, mát, ít tốn điện nên mình cho nó bật 24/24 và làm công cụ kiếm cơm chính luôn. Dù đi đâu thì mình vẫn truy cập từ xa vào nó. Đặc biệt, công việc của mình cũng thường phải chạy biên dịch code Rust, build ảnh Docker, là những tác vụ ngốn CPU, nên việc tận dụng sức mạnh của máy bàn sẽ giúp tiết kiệm thời gian hơn, làm việc năng suất hơn.

...

Setup EdgeDB for single-server deployment

Today, many people talk about microservice. The new-born EdgeDB also doesn't stay outside that trend. But not every website is applicable for microservice. Due to low traffic, low budget, some websites still prefer single-server deployment, meaning that everything, application and databases, are hosted in the same server. But EdgeDB lacks a traightforward documentation for this setup. This post is to guide how to do.

Install EdgeDB package

Follow this guide to install EdgeDB package on your server, but hold on before "Enable a systemd unit​" section.

Setup simple authentication for EdgeDB

...

How to find the largest files

Recently, my company website wants to host media files (user uploaded files) to some cloud storage service. But in preparation, we realized that our media folder is too big, about 48GiB. We need to delete unnecessary files to save the storage cost. Part of it, we need to hunt down big files.

I looked around to find a command to list largest files in Linux. Most of the tutorials on Internet tell you to use a combination of commands, which is often du | sort | head, or find | sort | head. None of them satisfies me, because:

  • Combination with du only gives result of directories, not files.

...

How to split Nginx logs for bot visits

Logs are the valuable resource for debugging. When we have a website, we also often look into Nginx logs to see what happened with our website. But they are often cluttered by the visit of search bots, which make us difficult to find the noteworthy lines. So how to tell Nginx to log the search bot activities to another file, to make our access log cleaner?

To do that, first, create an file to help Nginx distinguish who is search bot. Create a file bot_definition.conf in /etc/nginx/conf.d folder, with this content:

map $http_user_agent $is_bot {
        ~Pingdom 1;
...

Tại sao trên Linux hay dùng những định dạng file nén như *.gz, *.xz thay vì *.zip, *.7z?

Những bạn đang dùng Windows mà tìm hiểu về Linux sẽ thấy trên Linux, những định dạng file nén quen thuộc như *.zip, *.7z lại không được ưa chuộng, mà lại thấy người ta hay sử dụng *.gz, *.tar.gz, *.zz, *.tar.xz, mặc dù cả định dạng và thuật toán của zip, 7zip đều là mã nguồn mở. Thế thì tại sao?

Đầu tiên, hãy nói về một định dạng file nén khác cực kì được ưa chuộng trên Windows là *.rar. Lý do định dạng này vắng mặt trên Linux thì dễ hiểu hơn, đó là nó không phải là phần mềm nguồn mở.

Quay lại *.zip*.7z. Lý do chúng không được ưa chuộng là vì chúng không hỗ trợ nén và giải nén theo kiểu "cuốn chiếu". Theo kiểu "cuốn chiếu" nghĩa là, ví dụ như bạn đang download một file nén lớn và bạn muốn download tới đâu, giải nén tới đó, không phải chờ download xong xuôi rồi mới giải nén. Tính năng "cuốn chiếu" này quan trọng đối với người dùng Linux vì trên Linux, môi trường dòng lệnh rất mạnh, có một tính năng gọi là "pipe" và tính "cuốn chiếu" kết hợp với "pipe" thì giúp công việc hiệu quả gấp nhiều lần.

Ví dụ, tôi hay sử dụng "pipe" (truyền dữ liệu đầu ra của chương trình này vào đầu vào của chương trình khác) khi tôi muốn copy cơ sở dữ liệu từ server về máy cá nhân:

...