Friday, 31 October 2014

[Python] đổi thay

Hay bài học về sử dụng 2 python standard library: argparse & logging.

Khi viết chương trình Python, nếu không phải loại script chỉ dùng 1 lần, thì có hai module mà bạn sẽ luôn hối hận nếu không dùng nó ngay từ đầu. Đó là argparse để parse các tham số đầu vào của chương trình và logging để lưu lại/ hiển thị các thông tin lúc chương trình chạy.

Bởi mọi dòng code đều chỉ là tạm thời, thiết kế chương trình ban đầu cũng chỉ là tạm thời, 2 module này sẽ giúp bạn sống cùng những thứ tạm thời ấy.

1. argparse

Luôn dùng argparse khi cần parse command line argument!

Với một chương trình đơn giản, sử dụng sys.argv trực tiếp có vẻ nhanh và tiện, nhưng ngay khi bạn nhận ra mình cần thay đổi một option nào đó, mọi sự đẹp đẽ giả tạo đó bắt đầu đổ vỡ.
Nếu đã tin vào điều này, bạn có thể chuyển qua phần 2 và bỏ qua câu chuyện nhảm nhí phía dưới.

Friday, 24 October 2014

[CLI] nối dòng

Một bạn giấu tên hỏi: làm thế nào để nối nhiều dòng thành một dòng trong linux ?

Trả lời:
có rất nhiều cách để làm việc này, sau đây là vài cách đơn giản.

Tạo đề bài để test:
# for i in {1000..1005}; do echo $i; done
1000
1001
1002
1003
1004
1005
Xem thêm cách tạo dữ liệu giả ở đây: http://www.familug.org/2012/10/generate-random-data-part1.html

Tuesday, 21 October 2014

[WeeklyVim] retab (đổi tab thành spaces)

Để sửa 1 file đã chứa các ký tự "tab" (\t) thành space:

mở file đó ra


:set expandtab
:retab
:wq #(save, quit)

Xong.

Monday, 20 October 2014

[Python] đếm trong list

Tuy code Python đã lâu, nhưng giờ mình mới để ý list chỉ có 9 public method, một con số không phải là lớn, và nếu bạn không nhớ hết, đôi khi bạn sẽ thấy bất ngờ.

Đề bài: đếm số phần tử True trong list bools dưới đây:
In [2]: import random

In [13]: nums = [random.randint(0,10) for i in range(10)]

In [15]: bools = [True if i % 2 == 0 else False for i in nums]

Sau khi nghĩ xong cách bạn sẽ làm, hãy bấm để xem tiếp

Wednesday, 15 October 2014

[bash] shell grammar (phần 1)

Theo quan sát của mình, hầu như mọi người học các ngôn ngữ lập trình đều theo cách rất cơ bản, học đầy đủ từ đầu đến cuối, sách này sách kia, nhưng với bash hầu hết người ta lại không học theo lối đó. Vì vậy có không ít điều rất đỗi bình thường của bash mà người dùng nhiều năm cũng không biết.

Chuỗi bài viết này tổng hợp đầy đủ (hay ít nhất là theo man 1 bash là thế) về "cú pháp" "NGỮ PHÁP" trong bash.

Bash gồm có:
- câu lệnh đơn (simple command)
- pipeline
- list
- các câu lệnh ghép (compound command)
- coprocess
- function definition

1. simple command
là một câu lệnh bình thường, ví dụ:
$ls -la
$ rm -r /tmp/pigmovie 2>&1 > /dev/null
TỪ KHOÁ:
exit status: giá trị một chương trình / câu lệnh trả về khi chạy trong shell. Là một số nguyên, với giá trị 0 biểu diễn cho câu lệnh chạy thành công, các giá trị khác (có thể âm) biểu diễn một lỗi nào đó đã diễn ra. Bash lưu exit status của câu lệnh cuối cùng nó chạy ở biến $?, có thể echo ra để xem: