Thursday, 22 September 2016

Luật bất thành văn của sysadmin

Vì không thành văn nên mỗi ông viết một kiểu 🙄
Kể ra thì nhiều nhưng list ra đây vài cái cơ bản, về cơ bản là cho bớt đau thương, chứ không phải là vì mình thích thì mình làm thôi.

Luật sysadmin
- Không deploy (vietsub: thay đổi hệ thống/ cài đặt phiên bản mới) vào thứ 6. Với các sysadmin thì ngày thứ 6 thường được coi là ngày "reading" hay "research". Lý do rất dễ hiểu, nếu có gì không thuận buồm xuôi gió là mất toi "Friday night", thậm chí mất luôn cả cuối tuần. (Tất nhiên luật này không áp dụng nếu sysadmin ấy định làm việc vào cuối tuần) 


- Luật trên áp dụng tương tự cho 2 tiếng trước khi hết giờ làm việc - cũng trừ luôn trường hợp nếu định làm quá giờ.

Thursday, 15 September 2016

[CLI] tail -F, F hoa F***

Là *NIX user, hẳn phải biết dùng lệnh tail để theo dõi một file (thường là file log). Mỗi khi có dòng mới ghi vào file, ta sẽ thấy được dòng đó:
tail -f /var/log/syslog
(Trên Ubuntu, có thể gõ "logger FAMILUG" để ghi một dòng vào syslog).

Log ghi ra file mãi liệu có chán mà dừng lại?
Chán thì không chán, nhưng các nhà viết phần mềm sẽ không ghi hàng GB log vào 1 file rồi để nó dùng hết ổ cứng trên máy rồi làm chương trình chết vì hết ổ cứng. Từ đó khai niệm "log rotate" ra đời.
Mỗi file log cũ sẽ được đi chuyển, đổi tên mới (thường là thêm đuôi .1 .2 .3 ... vd: /var/log/syslog.1  và sau đó nếu cũ quá thì được nén lại bằng gzip cho tiết kiệm ổ cứng), chuyện này thường được làm hàng ngày hay hàng tuần. File log mới được tạo ra, cùng tên với file log cũ, nhưng giờ trống trơn. Xem thêm chương trình logrotate để biết thêm chi tiết.
Nếu ai đã thử dùng -f để theo dõi file log, rồi may mắn hơn nữa, file log đó được rotate, từ ấy trờ đi, không thấy lệnh tail output gì ra nữa. Lúc đó phải dùng F to.

Có một sự khác biệt tinh vi ở đây, khi dùng tail -F FILENAME thì tail sẽ theo dõi file này kể cả khi nó bị thay thế bởi file khác cùng tên (theo dõi bằng tên). Trong khi đó tail -f FILENAME lại theo dõi file descriptor, tức nếu file này có bị đổi tên thì lệnh tail vẫn tiếp tục theo dõi.

Vậy, nếu đang theo dõi file log, hãy dùng -F.

Trích man tail
       -f, --follow[={name|descriptor}]
              output appended data as the file grows; -f, --follow, and --follow=descriptor are equivalent

       -F     same as --follow=name --retry

       --retry
              keep trying to open a file even when it is or becomes inaccessible; useful when following  by
              name, i.e., with --follow=name

Wednesday, 14 September 2016

[Python] Happy programmer day!

Hôm qua (13/9) là ngày thứ 256 của năm, với các lập trình viên, 256 là một con số rất đặc biệt.
Từ thời xa xưa, khi những chiếc máy tính chỉ lắp RAM 256, USB chỉ có 256 MB...
ngày ấy đã xa, nhưng 256 luôn ở đó vì nó đặt biệt: 256 = 2 ^ 8

Chúc mừng ngày lập trình viên, những người đẻ ra bug 🕷🐞

🍺🍻🍻🍺

In [12]: import datetime

In [13]: (datetime.datetime.now() - datetime.datetime(2016, 1, 1)).days - 1 == 2 ** 8
Out[13]: True

Friday, 2 September 2016

[Golang] fix Go 1.7 panic

Nếu như mới build lại Go bản 1.7 và chạy một lệnh chuẩn nào đó mà bị panic (như go vet chẳng hạn):
 go vet ./...
panic: inconsistent import:
    var os.Stderr *os.File
previously imported as:
    var Stderr *os.File
 [recovered]
    panic: inconsistent import:
    var os.Stderr *os.File
previously imported as:
    var Stderr *os.File


goroutine 1 [running]:
panic(0x2734a0, 0xc42028a540)
    /Users/hvn/FOSS/golang/src/runtime/panic.go:500 +0x1a1
go/types.(*Checker).handleBailout(0xc4200d21c0, 0xc42004d8d8)
    /Users/hvn/FOSS/golang/src/go/types/check.go:213 +0xae
panic(0x2734a0, 0xc42028a540)
    /Users/hvn/FOSS/golang/src/runtime/panic.go:458 +0x243

Đừng khóc, vì lúc khóc trông rất ngu 😭


hãy build lại Go lần nữa để sửa vấn đề này.
Nhưng trước khi build, nhớ rm -r pkg trong go source đi.

Tuesday, 30 August 2016

robots.txt là gì?

Một sai lầm chết người có thể mắc phải và gây ra hậu quả khôn lường là set nhầm file robots.txt khiến cho Google không index site của bạn 😂 (khi mà bạn rất muốn nó index và leo top).

robots.txt là gì?

một file text chứa vài câu lệnh đơn giản để hướng dẫn các search engine (SE) như Google, Bing ...
cách index trang của bạn (tức hướng các SE có nên trả về các kết quả trong đường dẫn /A/B/C hay không).

robots.txt la gi

file robots.txt nằm ở đường dẫn /robots.txt của site.

robots.txt có 3 câu lệnh phổ biến

User-agent: SOMETHING - set đối tượng (SE) áp dụng luật
Allow: PATH - cho phép index một đường dẫn PATH
Disallow: PATH - không cho phép index một đường dẫn PATH

Thử xem vài trang

pyjobs.vn

Tại https://pyjobs.vn/robots.txt
User-agent: *
Disallow: 
Đoạn này cho phép mọi search engine (User-agent: *) được truy cập/index toàn bộ nội dung của trang. (Disallow: để trống).

Friday, 26 August 2016

[Python] Tải nhạc từ youtube bằng dòng lệnh

Lên mạng có bài nhạc hay,
cảm thấy có tội nếu không tải về 😜
download youtube bang python

youtube-dl 

là công cụ tải nhạc bằng dòng lệnh, một trong các top star repo GitHub viết bằng Python

Cài đặt
$ pip install youtube-dl
Collecting youtube-dl
  Downloading youtube_dl-2016.8.24.1-py2.py3-none-any.whl (1.4MB)
    100% |████████████████████████████████| 1.4MB 302kB/s
Installing collected packages: youtube-dl
Successfully installed youtube-dl-2016.8.24.1

Tải nhạc