Ubuntu chạy sai giờ sau khi upgrade

Sau khi upgrade Ubuntu cho server, mình đã không để ý là đồng hồ trên nó bị chạy sai, cho mãi tới hôm nay vào kiểm tra mới thấy.

Lí do là các bản Ubuntu cũ, khoảng 15.04 trở về trước, sử dụng ntpdate/ntpd để cập nhật giờ với Internet, nhưng Ubuntu mới, từ 15.10, khi bắt đầu ứng dụng systemd vào quản lý quá trình khởi động thì làm cho ntpd không còn chạy chính xác nũa. Với hệ thống mới này thì nên dùng systemd-timesyncd để cập nhật đồng hồ với Internet. Lệnh do-release-upgrade dùng để nâng cấp Ubuntu không tự động chuyển đổi từ ntpd sang systemd-timesyncd cho ta, nên ta phải tự thay đổi cấu hình lấy.

Sau đây là cách làm:

B1. Sửa đổi /etc/systemd/timesyncd.conf. Ban đầu nó chỉ có:


Get syntax highlight for Jinja2-like template in Komodo

If you build website in Python, there is high chance that you use Jinja2 for template. If your favourite IDE is Komodo Edit, how to get syntax highlight support?

Currently, Komodo Edit doesn't support Jinja2, even there is a long standing request. Some people use Django highlighter for it but it does not work well.

But there is a template language with syntax very similar to Jinja2, which not many Python developer know, is supported by Komodo. It is Twig, a PHP one and used in Symfony, Drupal. Twig's syntax resembles Jinja2 more than Django, with "function call" style and macro:


Vai trò của Nginx đối với web app

Khi viết web app bằng các ngôn ngữ script như Python, Ruby, JavaScript (NodeJS) và triển khai lên server, ta hay được khuyên cho chạy web app của ta đằng sau Nginx, tức là Nginx sẽ đứng chắn giữa web app của ta và người truy cập. Mọi truy vấn web từ người dùng sẽ đi đến Nginx, và Nginx đóng vai trò của một reverse proxy, chuyển tiếp truy vấn đến web app.

Vậy Nginx làm công việc gì, ích lợi ra sao?

Giờ ta ví dụ với web app được viết bằng Django.

Giả sử ta không có Nginx, và để các request từ phía trình duyệt người dùng gửi đến thẳng web app. Ta biết rằng, phần lớn thời gian từ lúc trình duyệt gửi request đến lúc nhận được response là dành cho việc truyền tải nội dung, thời gian xử lý để sinh ra response chỉ chiếm một phần nhỏ. Giả sử web app chỉ phục vụ một request một lần, thời gian phục vụ mỗi request là 1s (bao gồm thời gian xử lý sinh ra nội dung 100ms và còn lại là thời gian truyền tải), thì trong 1 phút, web app chỉ phục vụ được 60 request. Chưa kể, khi ấy web app cũng phải phục vụ request những file tĩnh, như các file ảnh, JavaScript, CSS, vốn không phải là mục đích chính của web app. Web app là để sinh ra nội dung động. Nếu phải phục vụ cả các file tĩnh này thì số lượng phục vụ những request để nhận nội dung HTML bị rút gọn lại rất ít. Khi ta mở một trang web, thường request nội dung HTML là 1, trong khi request file tĩnh kể trên có thể là 10, và thường file tĩnh nặng hơn nội dung HTML động nên thời gian truyền tải cũng lớn hơn, có thể tới 2s. Như vậy, với cách cài đặt như trên, 1 phút web app chỉ phục vụ 3 - 6 khách. Nếu có 1 vài khách ở xa, hay đường truyền chậm, vì khách này cũng ngốn mất thời gian của web app. Số lượng phục vụ lại càng giảm.


New nginx makes PHP website return blank page

Recently, I upgraded Nginx in this server and after some days, I discovered that one of my PHP websites (for internal use) was not working! It just returned completely blank page (no text or HTML source), even with the script containing only phpinfo().

At first, I didn't know that it was caused by Nginx, or it is because of upgrading Nginx. I tried to look in to various log files, from Nginx's to php5-fpm but did not see anything. I configured PHP to always display error, still no help. Searching around, I found that someones in Internet also get this phenomenon, after upgrading Nginx. Some suggests to change Nginx's virtual host configuration (the files in /etc/nginx/sites-available/). So I understand that new Nginx may bring changes that old configuration file will not be compatible!

But, then there is a question: How do I know how the configuration should be, to be working with upgraded Nginx?

Well, I've just noticed that Nginx installation on Ubuntu comes with some sample in snippets/ folder:


Truy cập nhanh giao diện dòng lệnh của PostgreSQL

Để truy cập vào một hệ sơ sở dữ liệu (CSDL), ta luôn cần 3 thông số: địa chỉ server, username và password. Sẽ không là vấn đề khi một chương trình được cấu hình tự động để truy cập vào hệ CSDL, nhưng nhiều khi ta phải kết nối vào giao diện dòng lệnh, để tự tay làm một số việc với dữ liệu, và phải đối mặt với sự phiền hà của việc tìm lại và khai báo username, password. Username có thể dễ hơn vì ta thường đặt một username dễ nhớ, nhưng password thì luôn phải rắc rối và thường ta không thể nhớ được, phải cất đâu đó. Đã phải mất công tìm kiếm, mà tự tay gõ cũng phiền nữa. Thế nhưng với PostgreSQL, ta có một mẹo để làm việc này nhẹ nhàng hơn.

PostgreSQL cho phép "gắn kết" một tài khoản user trong nó với tài khoản user của hệ điều hành. Ví dụ trên hệ điều hành (Linux, Unix) ta có user quan và trong PostgreSQL ta tạo một user (role) cũng tên quan, thì khi ta đang đăng nhập vào hệ điều hành dưới user quan, ta có thể truy cập ngay lập tức vào PostgreSQL dưới role quan mà không cần đăng nhập, tức là không phải khai báo hostname, username và password.

Thay vì ta phải gõ

...