Skip to main content

Posts

Showing posts with the label Python

CPU chạy thread hay process?

Hay những câu hỏi liên quan: Thread và process khác gì nhau? 1 process chạy multithreading trên mấy CPU? Vì sao Java, Rust không nhắc tới multiprocessing? Khi chạy CPU bound, dùng multi-process hay multi-threaded? bài này sẽ làm cho ra nhẽ. Việc khó khăn nhất khi trả lời các câu hỏi này là tìm được các tài liệu có tính "chuẩn mực"/căn cứ, không phải mấy trang tutorial, wikipedia hay hỏi đáp trên mạng. Process là gì, thread là gì Người dùng máy tính thường biết đến khái niệm process trước, nó hiển thị mặc định trên các chương trình process manager như top , hay ps , hay Monitor trên Ubuntu, hay cả Task manager trên Windows. Mỗi process được gán cho 1 số ProcessID (PID), dùng lệnh kill -9 PID để tắt chương trình bị "treo". Khi chạy 1 chương trình, hệ điều hành sẽ tạo ra 1 (hay vài) process. Cho tới khi học lập trình Python, thấy mỗi chương trình chỉ chạy code tuần tự từ trên xuống, nhận ra rằng mỗi 1 process chỉ chạy 1 "luồng" (thread), học t...

ElasticSearch/Java format thời gian không giống Python

Hầu hết các ngôn ngữ lập trình đều có sẵn thư viện để format thời gian, vì dù cho mỗi người một nghề - người làm web, sysadmin, kẻ làm data, scientist nhưng đâu ai thoát khỏi được thời gian? Cứ tưởng các ngôn ngữ lập trình format sẽ giống nhau, học 1 lần là dùng được mãi, ai ngờ! Photo by Aron Visuals on Unsplash Linux date, C, C++ Lấy làm mốc chuẩn, chương trình date trên UNIX/Linux dùng Ymd HMS cho ngày tháng năm giờ phút giây $ date +"%Y/%m/%d %H:%M:%S" 2023/01/04 20:16:48 $ date --version date (GNU coreutils) 8.30 Copyright (C) 2018 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Written by David MacKenzie. Có vẻ như bắt nguồn từ function strftime trong time.h của C https://en.cppreference.com/w/c/chrono/strftime , dễ hiểu C++ và Python cũng kế thừa và phát huy từ đó. Xem ...

Không cần jq nếu đã có python/ruby

jq trở thành công cụ "làm tất cả" với các sysadmin. Trong khi jq được dùng để "query JSON" - truy cập dữ liệu trong 1 đoạn JSON thì nó cũng được dùng để kiểm tra syntax của 1 đoạn JSON. JQ là gì $ whatis jq jq (1)               - Command-line JSON processor   Photo by Thanh Soledas on Unsplash   Nhưng nếu máy đã có python/ruby, hay các ngôn ngữ trang bị sẵn stdlib JSON, sẽ không cần phải cài gì thêm cả: File bad.json ví dụ, thử dùng mắt thường tìm xem nó sai ở đâu: {   "name": "@exercism/typescript",   "description": "Exercism exercises in Typescript.",   "private": true,   "repository": {     "type": "git",     "url": "https://github.com/exercism/typescript"   },   "devDependencies": {   }, }

[CLI/Python] find prune path - cắt giảm bài toán tìm kiếm 10 lần

`find` là câu lệnh dùng để tìm file dựa theo tên, vốn không kém tiếng "khó dùng", nhưng vẫn được dùng, do nó được cài sẵn ở mọi hệ điều hành Unixoid (Unix/Linux). find - huyền thoại Một lệnh find đơn giản để tìm các file .py trong thư mục /usr $ time -p find /usr/ -name '*.py' | wc -l 11013 real 0,39 user 0,15 sys 0,24 11013 file này gồm file từ nhiều thư mục khác nhau. $ time -p find /usr/ -name '*.py' | cut -f-3 -d '/' | sort | uniq -c | sort -nr | head    9286 /usr/lib    1644 /usr/share      78 /usr/src       5 /usr/local real 0,39 user 0,17 sys 0,24

Để trở thành DevOps Engineer

DevOps là một từ khóa công nghệ cực hot trong khoảng 2015-2018, đánh dấu sự thay đổi về quy trình phát triển phần mềm trên toàn Trái Đất. Tại thời điểm viết bài (2019-05), vị trí này đã có mặt ở hầu hết các công ty công nghệ tại Việt Nam. Bài viết này giải thích các khái niệm liên quan tới DevOps, đưa ra một giáo trình để trở thành DevOps Engineer. ## DevOps là gì DevOps không có định nghĩa chính thức, cũng không có định nghĩa rõ ràng, nó là một khái niệm mới tự dưng xuất hiện, chưa từng có trước đây. Cách hiểu phổ biến nhất, đây là một "cách/quy trình phát triển và vận hành phần mềm". Được sinh ra từ việc khắc nhập 2 chữ: DEV elopment (phát triển) - OP eration S (vận hành). ### Quy trình phát triển phần mềm truyền thống Lập trình viên code, code xong chuyển qua cho SysAdmin cài đặt (deploy), QA sẽ tham gia kiểm tra chất lượng, nếu OK, SysAdmins sẽ mang đi deploy trên hệ thống chạy thật, nếu gặp lỗi / report bởi người dùng, SysAdmin sẽ chuyển lại cho devel...

In ra màn hình số 1 - dùng ngôn ngữ nào nhanh/nhẹ nhất?

Nếu chỉ cần in ra mà hình số 1, ngôn ngữ lập trình nào sẽ chạy tốn ít RAM nhất? Thí nghiệm sau sẽ cho ta thấy các chương trình cần bao nhiêu RAM để chạy và in ra số 1, kết thúc dòng bằng một dấu xuống dòng (newline \n ). Ta dùng chương trình /usr/bin/time để có cả thông số về RAM ( RSS ) thay vì chỉ gõ time - lệnh builtin của bash. bash4.3 $ /usr/bin/time bash -c 'echo 1' 1 0 .00user 0 .00system 0 :00.00elapsed 100 %CPU ( 0avgtext+0avgdata 3064maxresident ) k 0inputs+0outputs ( 0major+136minor ) pagefaults 0swaps dash $ /usr/bin/time /bin/dash -c 'echo 1' 1 0 .00user 0 .00system 0 :00.00elapsed ?%CPU ( 0avgtext+0avgdata 1492maxresident ) k 0inputs+0outputs ( 0major+67minor ) pagefaults 0swaps mawk $ /usr/bin/time mawk 'BEGIN {print 1}' 1 0 .00user 0 .00system 0 :00.00elapsed 100 %CPU ( 0avgtext+0avgdata 1932maxresident ) k 0inputs+0outputs ( 0major+86minor ) pagefaults 0swaps

[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:

Thử làm một "lập trình viên Odoo"

Odoo là gì Ố đù tự mô tả về mình: Odoo is a suite of web based open source business apps. The main Odoo Apps include an Open Source CRM , Website Builder , eCommerce , Warehouse Management , Project Management , Billing & Accounting , Point of Sale , Human Resources , Marketing , Manufacturing , Purchase Management , ... Odoo Apps can be used as stand-alone applications, but they also integrate seamlessly so you get a full-featured Open Source ERP when you install several Apps. Nó là một bộ các web app phục vụ các công việc trong kinh doanh như quản lý quan hệ khách hàng, quản lý project, tính tiền/ kế tóan, tuyển dụng ... đầy đủ đến mức nó là một giải pháp "ERP" cho doanh nghiệp. Đó là nhìn từ phía người dùng. Còn về phía lập trình viên, Odoo là gì?

Làm website với công nghệ serverless

Sau khi Amazon AWS cloud cho ra đời sản phẩm mới: AWS Lambda, thế giới công nghệ lại một lần nữa nổi lên nhiều sóng gió, cụm từ "serverless" trở thành một từ khóa hot, như BlockChain hay Docker những năm trước. Serverless là gì Serverless là cái tên dành cho công nghệ chạy code mà người dùng (lập trình viên) không phải lo cài đặt / cấu hình server - họ chỉ cần viết code, còn việc chạy, hãy để nhà cung cấp dịch vụ lo (và tất nhiên người dùng chỉ lo code và trả tiền). Kiến trúc serverless này, chỉ là "không có server" trong nỗi lo của lập trình viên, chứ code không tự nhiên mà chạy được. Các nhà cung cấp dịch vụ sẽ lo thiết kế, vận hành chạy code của người dùng. Các dịch vụ có sẵn: - AWS Lambda - Google cloud functions - Azure functions Và những hệ thống mà các công ty có thể tự cài:

Không sudo pip, hãy virtualenv

- "Mình không cài bằng pip được..." - "chạy sudo pip ... nhé " Đó là những câu hỏi và trả lời thường xuất hiện, khi người ta nói về pip. Đây là vấn đề chung với những người dùng không hiểu về phân quyền trên UNIX và thường sẽ làm mọi thứ trở nên rắc rối thêm bằng cách chạy sudo. ## sudo - câu lệnh thần thánh Một mẩu truyện nhỏ cho thấy sức mạnh của `sudo`, khi ta nói mà đối phương không nghe, thêm `sudo` vào đầu là mọi thứ đều sẽ hoạt động. ### sudo - SUperuser DO Trên các hệ điều hành *NIX có chia ra nhiều user để nhiều người  dùng chung một máy tính. Trong đó, mọi máy tính luôn có user `root` - user có quyền năng tối thượng, thường được gọi là quyền admin hay superuser, có thể thực hiện bất kỳ thay đổi gì trên máy tính. Do có quyền năng vô hạn như vậy, nên khi thực hiện việc gì cũng ẩn chứa nguy hiểm, một câu lệnh gõ nhầm cũng có thể phá huỷ hệ thống, và nếu như ai cũng là root thì hệ thống sẽ loạn, người dùng không hiểu biết có thể cài đặt các loại ...

[Python] import sys

sys là thư viện builtin của Python , nó chứa các thông tin liên quan đến chính chương trình python interpreter bạn đang chạy, và cũng cho phép thay đổi một vài thông số. Nó không phải là thư viện chứa các thông tin liên quan đến hệ điều hành như nhiều người lầm tưởng (sys - system - và nghĩ là hệ điều hành). help(sys) có thông tin đầy đủ về từng giá trị và function, hãy thử xem hệ thống của bạn có gì. Script import sys SKIP = ('path', 'modules', '__doc__', 'path_importer_cache', 'meta_path') for attr in sorted(sys.__dict__.items()):     if not callable(attr[1]) and attr[0] not in SKIP:         print(attr[0], ':', attr[1]) Kết quả khá dài, nhưng một vài thông tin đáng chú ý có thể kể tới: - version: phiên bản Python đang dùng, bản C đã build chương trình Python interpreter đang chạy  version : 3.5.2 (default, Nov 17 2016, 17:05:23) [GCC 5.4.0 20160609] - builtin_module_names: tên các module builtin - platform : linux -...

Python Data Science Handbook by Jake VanderPlas

Một cuốn sách viết bởi Jakevdp, một cái tên khá đặc biệt trong thế giới Python. Anh là tác giả của thư viện vẽ hình Numpy theo phong cách XKCD. Anh vừa cho ra mắt cuốn sách "Python data science handbook" ở định dạng Ipython, có thể đọc / clone free trên GitHub

Di chuyển trong file

Là một ngôn ngữ bậc cao, Python cung cấp các function giúp người dùng có thể đọc file dễ dàng theo từng dòng hay tất cả nôi dung của file. Vậy nhưng trong những trường hợp cần thiết, Python vẫn có thể can thiệp sâu xuống dưới tầng thấp hơn và thực hiện những yêu cầu phức tạp hơn. Mở file - text stream Mở file trong Python sử dụng funtion open('ten_file'), mặc định ta sẽ mở file để đọc (read) ở dạng "text mode". Ta mặc định file cần mở là một file text (thường là .txt, .csv ...) >>> f = open('/etc/hosts') >>> print(f) <_io .textiowrapper="" encoding="UTF-8" mode="r" name="/etc/hosts"> Ta đọc toàn bộ nội dung của file vào bộ nhớ bằng method read: >>> content = f.read() >>> print(len(content)) 918 Sau khi đọc đến cuối file (gặp ký tự EOF - end of file, một ký tự đặc biệt đánh dấu sự kết thúc của một file), nếu ta vẫn tiếp tục đọc, sẽ chỉ thu được empty string vì k...

Học JavaScript - phần 1 - number, boolean, string

(từ Python nhảy sang - kèm so sánh với Python) JavaScript (JS) -  /ˈdʒɑːvəˌskrɪpt/ Why? - Mình thích thì mình học thôi 😚 - Syntax/Khái niệm 2 ngôn ngữ giống nhau đến 70%, bạn phải bỏ ra rất ít công để thụ được nhiều lợi. - Dù thích hay không, JavaScript (từ đây ghi là JS) vẫn là ngôn ngữ duy nhất ở phía client khi duyệt web. Ngôn ngữ duy nhất chạy trên browser FireFox, Chrome, IE, Safari ... Đến cả Google, dù đã cố gắng lắm, nhưng vẫn không thể đưa Dart thay thế vị trí của JS Để làm gì? - Học JS để có thể viết code ngay trên FireFox/Chrome lúc nào mình muốn, không phải cài đặt, mọi lúc mọi nơi. - Có thể điều khiển, tương tác với website qua code dễ dàng (bấm vào nút này, nút kia). - Nếu bạn muốn làm Web Developer, biết JS là một điều bắt buộc. Loạt bài viết này sẽ - Lướt qua các khái niệm phổ biến của JS phía client (chung cho cả JS phía client lẫn server (Node.js) - Học JS để tương tác với HTML DOM. Không học JS để xử lý phía server, khi ta đã có Python rồi, ...

Phải set locale trong Upstart

Upstart là init system của Ubuntu trước 16.04. Nếu còn dùng upstart, khi viết file cấu hình cho nó trong /etc/init/xyz.conf bạn phải set locale cho nó vì mặc định, upstart không sử dụng biến môi trường nào ngoài TERM và PATH. http://upstart.ubuntu.com/cookbook/#job-environment Nếu không set locale, một vấn đề có thể gặp phải, ví dụ như khi bạn chạy code python bằng gunicorn, thông qua upstart. Function os.path.isfile có thể raise Exception khi nhận tên file là một đoạn string chứa kỹ tự không nằm trong bảng mã ASCII: if os.path.isfile(content_string) and not is_raw:      File "/usr/local/pymi/env/lib/python3.4/genericpath.py", line 30, in isfile         st = os.stat(path) UnicodeEncodeError: 'ascii' codec can't encode character '\xfa' in position 2: ordinal not in range(128) Thêm dòng này vào file upstart:

[Python] fractions - tính toán phân số trên Python

Trong một bài viết gần đây, chúng tôi đã giải thích hiện tượng "kỳ lạ" khi 0.1 + 0.1 + 0.1 KHÔNG BẰNG 0.3 khi sử dụng Python hay nhiều ngôn ngữ lập trình khác (C, Java, PHP, Ruby, Golang ...). Nếu bạn vẫn còn thấy nó chưa hết lạ, bấm vào đây để làm quen . Một giải pháp xử lý vấn đề này là sử dụng thư viện " fractions " có sẵn của Python để tính toán các số hữu tỷ (phân số - rational number). Tập số hữu tỷ được ký hiệu là tập Q khi học ở phổ thông: các tập số Thư viện `` fractions `` có một kiểu dữ liệu tên là Fraction, nó giúp biểu diễn các phân số và thực hiện tính toán trên Python. Fraction có thể nhận nhiều dạng đầu vào khác nhau: - Tử số và mẫu số - String biểu diễn phân số - Một số integer hay float Các đoạn code sử dụng Python 3 với IPython. Ta import thư viện trước: In [3]: from fractions import Fraction as F Đầu vào là tử số và mẫu số: In [4]: F(16, 10) Out[4]: F(8, 5)

[Python] function là object

Nếu có coi function là một cái gì đó đặc biệt, khác biệt với mọi thứ còn lại trong Python thì có thể bạn đã sai, hay ít nhất cũng cần nghĩ lại sau khi xem các đặc điểm của function trong bài này. Python lambda Function là object, như mọi thứ khác trong Python. Integer là object, string là object, và function không phải ngoại lệ. $ python3 >>> type(5) <class 'int'> >>> type('http://pymi.vn') <class 'str'> >>> type(True) <class 'bool'> >>> type(len) <class 'builtin_function_or_method'> Nếu biết về lambda trong Python, bạn sẽ thấy rõ hơn function là cái gì: >>> double = lambda x: x*2 >>> type(double) <class 'function'> >>> double(21) 42 lambda tạo ra 1 object kiểu function (tưởng tượng ra 1 cục tròn tròn), sau đó ta gán (bind) tên ``double`` cho object đó. Nó tương tự như việc gán tên cho 1 string: >>> name = ...

Dựng HTTP server bằng một câu lệnh

Đôi khi ta cần dựng 1 HTTP server, trong một nháy mắt 😎 Để: - xem nội dung 1 file html - chia sẻ file siêu tốc (tất nhiên không an toàn, ai có link cũng tải được) Giải pháp: - mọi giải pháp cần file config như NGINX, Apache đều bị loại do vượt quá yêu cầu thiết lập dưới 1 phút. Các giải pháp được đề cử 😍 busybox Nếu không có sẵn trên máy # apt-get install -y busybox $ busybox httpd -f -p 9999 -h -f : chạy foreground -p: port -h: home, thư mục sẽ phục vụ, mặc định là thư mục hiện tại Khi truy cập vào IP:9999, ta sẽ nhận được response 404 nếu không có file index.html nào trong thư mục được phục vụ. Để truy cập các file khác, ta phải tự chọn trên URL chứ không có danh sách. Ví dụ: để tải file destroy.mp4 trong thư mục phục vụ , truy cập vào http://IP:9999/destroy.mp4 Twisted  là một Python package trước tiên phải cài twisted: $ pip install twisted $ twistd -n web -p 8080 --path . Truy cập IP:8080 sẽ nhận được danh sách các file trong thư mục chỉ ra bởi...

[Python] Tuổi gì làm quan?

Mê tín dị đoan đã ăn sâu vào từng nếp nghĩ, từng hoạt động của người Việt Nam. Cứ dịp tết, người ta đốt hàng tấn tấn vàng mã và vẫn tiếp tục cầu mong cho môi trường được trong sạch, thế giới khỏi nóng lên hay không khí đỡ ô nhiễm. Bản thân tôi là một người được ăn học, cũng đạt đến trình độ đại học cấp nhà nước, cũng là người hành theo Phật dạy tu nhân tích đức, làm điều lành. Nhưng việc để những thứ không rõ ràng, không có cơ sở khoa học ảnh hưởng đến cuộc đời mình là điều không chấp nhận được với một người làm khoa học. Mục tiêu năm nay sẽ là sử dụng tri thức, toán học, lập trình để tạo ra những công cụ chính xác luận đoán theo bộ môn khoa học Tử Vi của Trung Quốc, một mặt để loại trừ những mê tín không có cơ sở. Vậy tuổi gì thì làm quan? Xưa nay dân gian hay suy luận theo trực giác như: con hổ hay con rồng to, mạnh, đẹp, sẽ làm quan, con chó, con lợn, con ngựa, con gà thì chỉ làm dân thôi, liệu điều này có đúng? Và tất nhiên nếu chỉ dựa vào Chi (tuổi con gì) để phán làm qua...

Popular posts from this blog

Tài liệu và hướng dẫn học Python

Để tiết kiệm thời gian, tốt nhất là đi học PyMI Updated: 130617 Sau đây là các tài liệu khuyên dùng: Vì nhiều lý do, nên học python2.7 tại thời điểm hiện tại (giờ là tháng 6/2013 - muốn biết tại sao thì tự tìm hiểu) python 3.5+ (giờ là tháng 2/2017) Chuẩn bị: 1. biết bật tắt máy 2. biết cài python 3. tập gõ 10 ngón - gõ 2 ngón hay 1 ngón cũng không sao, nhưng 10 ngón là cách dễ nhất để gõ nhanh nhất. Tài liệu - Nên dùng tài liệu tại trang chủ của Python làm chính, tham khảo thêm các tài liệu khác tại http://www.familug.org/2016/12/free-ebook.html Căn bản, mới học 1.1 Python PyMI.vn https://pymi.vn/tutorial/ 1.2. Python offical tutorial kết hợp làm bài tập trên HackerRank  (đề bài bằng tiếng Anh, nhưng Google translate 1 lúc cũng ra vì có nhiều ví dụ mẫu đi kèm). Học viên của Pymi.vn có rất nhiều học viên đã tự học với Learn Python the hard way nhưng chưa thấy ai thành công cả. Hai link dưới nên đọc sau khi đã nắm được những phần cơ bản của ngôn ngữ pytho...

The PyMiers

New FAMILUG