Thursday, 12 October 2017

[Python] unittest với assertTrue

Đây không phải một bài viết dài giải thích test là gì, unittest là gì.

Python unittest

Khi sử dụng thư viện unittest của Python, ta thường dễ bị cuốn hút bởi method assertTrue, thường viết các method như sau:

self.assertTrue(7 in thatlist)
self.assertTrue(isinstance(res, list))
self.assertTrue(res > 0)
self.assertTrue(res == [1,2,3,4])

Code vẫn chạy và test bình thường, nhưng nếu test fail, output sẽ rất khó hiểu:

Monday, 9 October 2017

7 init runlevel của hệ thống Linux

Khi để bài chứa tới 3 yếu tố đáng sợ, xác suất người ta sẽ đọc hết bài sẽ giảm còn 4 %.
- 7
- init
- runlevel

Và để tránh thêm một yếu tố đáng sợ khác, tôi đã thay từ "SysV" bằng từ "hệ thống" - dù biết là rất sai.

Bài này để giải thích khái niệm Runlevel - có thể gặp khi đi phỏng vấn sysadmin - mặc dù ... nó có gì đó hơi sai sai.


Khi máy tính khởi động - không hề đơn giản - và không có trong bài này - trải qua nhiều bước, kernel (các UNIX/UNIX-like OS) sẽ chạy chương trình đầu tiên với PID 1 - chương trình đó có tên chung là init.
Chương trình này, nhìn chung sẽ đảm nhiệm các công việc: bật, tắt, restart các chương trình cần bật lên cùng máy tính (và có thể nhiều việc khác nữa). Tưởng tượng bạn là người dùng Ubuntu giao diện bình thường, vậy ai sẽ chạy "chương trình giao diện (X)"?, ai sẽ bật phần mềm quản lý kết nối mạng / wifi ...? tất cả đều do init thực hiện.

Init là gì?

Init chỉ là tên chung ám chỉ chương trình được Kernel chạy đầu tiên khi khởi động máy tính, giống như ta nói web server / HTTP server - chỉ là tên nói chung chung, còn chương trình cụ thể là NGINX, Apache2...