Wednesday, 25 February 2015

[cmd] mối quan hệ giữa du, sudo và "SH"

1. du
$ du -csh Github/ Pictures/
2.3G    Github/
6.6G    Pictures/
8.9G    total
có vài option cần chú ý của lệnh này
-s  --summarize
Chỉ hiện các giá trị là tổng dung lượng của mỗi argument

Tức nếu dùng du với 2 argument thì kết quả sẽ chỉ có 2 dòng (nếu argument là 1 directory, nó sẽ tính dung lượng tổng của directory đó thay vì của từng file)

-c --total
Hiển thị tổng dung lượng của các argument đã gán cho du. Như ví dụ trên, dòng cuối cùng là 8.9 G, tổng dung lượng của 2 thư mục đầu vào.

-h --human-readable
In ra dung lượng ở dạng thân thiện với người dùng (thay vì mặc định in ra số byte - thường khá lớn)

2. sudo

Thursday, 12 February 2015

[Python] lambda

Bài viết giới thiệu vài ví dụ về việc tạo anonymous function sử dụng lambda trong Python.

Cú pháp:
lambda arguments: expression
Trả về 1 function object
Nó thường dùng để định nghĩa các hàm đơn giản (trong 1 dòng) , là một khái niệm đi mượn từ các ngôn ngữ lập trình hàm.
Nếu sử dụng lambda, dù chỉ 1 lần thử, người dùng sẽ có những cảm giác vô cùng mới lạ, sảng khoái với nó. Bài viết khác sẽ đi sâu vào giải thích khái niệm lambda, bài này chơi đã :

.. note: toàn bộ ví dụ trong bài này được code trực tiếp trên ipython trên python2.7 nhưng vẫn chạy được trên python3.x:

Saturday, 7 February 2015

[Python] WTF I did last year

Một phiên bản python của bài hát "Em làm gì tối nay - Khắc Việt".
Năm qua mình đã làm được gì? hãy tự đánh giá và in ra cho đỡ xấu bằng script sau, rồi ngắm nhìn kết quả...

https://github.com/familug/FAMILUG/blob/master/Python/wtfidly.py
Và trước khi kết thúc, hãy cùng nghe bài hát "em làm gì tối nay" :3


Thursday, 5 February 2015

[Python, bash] Kiểm tra file executable

Để kiểm tra xem đầu vào của nó có phải là một file chạy được không (như các file trong /bin, hay các file đã đươc chmod +x),
hacker mũ hồng viết như sau:

bash:
$ test -x path
python:
In [3]: os.access(path, os.X_OK)
Out[3]: True
Có gì sai ở đây?

Tuesday, 3 February 2015

[Python] try...finally

Trong python, try...except là cặp đôi hoàn cảnh mà đi đâu cũng sẽ gặp, mà nếu như trong 1, 2 trang code của bạn không dùng try...except một lần nào thì có vẻ như đoạn code ấy có vấn đề.
finally không được sử dụng nhiều như except, và vì thế người dùng có thể không hiểu rõ tác dụng của nó. Bài viết này sẽ giải thích các trường hợp đặc biệt với finally.

Từ khoá:
  • try statement : câu lệnh try
  • finally clause: mệnh đề finally
Định nghĩa về "try"
The try statement specifies exception handlers and/or cleanup code for a group of statements
Vậy try... có 2 tác dụng:
  1. xử lý exception (exception handling - bằng mệnh đề except)
  2. và cleanup code cho một tập các câu lệnh (bằng mệnh đề finally)
Chi tiết về việc sử dụng exception là một phần không thể thiếu / là văn hoá của Python rồi nên ở đây không bàn tới.

Monday, 2 February 2015

[Programming] Closure

Closure /ˈkləʊʒə/ sự đóng kín (Việt sub: cờ lâu giơ)

Là một khái niệm phổ biến ở các ngôn ngữ lập trình hàm (functional programming language như LISP, Scheme, ...) nhưng cũng có thể thấy ở Javascript,Ruby, Go, Object C, hay hỗ trợ 1 phần ở python2 và hỗ trợ hoàn toàn ở python3... (nhưng không có trong C, Java). Các ngôn ngữ nào cho phép trả về giá trị là một function thì có thể sẽ hỗ trợ closure.

Để tránh sử dụng wikipedia, sau đây là các định nghĩa closure từ document chính thức của một số ngôn ngữ lập trình:

Go đưa ra khái niệm ở dạng mô tả như sau trong gotour:
Một closure là một function (hàm) mà reference (tham chiếu) đến các biến ở ngoài body của nó. Function này có thể truy cập và thay đổi các biến mà nó đã reference. Có thể nói function "bound"(đã gắn) đến các biến.

EMACS LISP:
Một closure là function mà nó "mang theo" một bản ghi về "môi trường lexical" đã tồn tại khi hàm đó được định nghĩa.

Javascript:
Closure là function mà nó "tham chiếu"(refer) đến các biến độc lập. Hay nói cách khác, function ấy có khả năng "nhớ' về môi trường mà nó đã được tạo.

Dễ hiểu nhất là phân tích đoạn code sau: