Skip to main content

Posts

Showing posts from 2017

Dùng git diff với patch

git diff hiển thị các thay đổi bạn đã thực hiện mà chưa add, commit. Output của git diff, trông, giống như diff (câu lệnh thường để so sánh 2 file). patch là câu lệnh nhận vào file diff, và sửa các file có thay đổi tương ứng. Trước khi GitHub trở nên phổ biến, người ta vẫn chia sẻ "bản vá" các phần mềm bằng các file diff, người nhận được sẽ patch (vá) các chương trình dựa vào file diff nhận được. Đây là một file diff:

pgrep để grep process

pgrep có cài sẵn trên mọi máy tính *NIX. Nó nằm trong gói procps, một package cơ bản, chứa các câu lệnh thường ngày như `ps`, `kill`, `top`... $ dpkg -S `which pgrep` procps: /usr/bin/pgrep `pgrep` thường chỉ được dùng để lấy đầu ra, làm đầu vào cho lệnh kill, mặc định, nó trả về list các PID của process có tên ứng với từ khóa tìm kiếm: ``` $ pgrep cron 978 ``` Thường sau đó sẽ là: kill -9 978 Hay trong 1 câu: ``` kill -9 $(pgrep cron) ``` Hay dùng luôn câu lệnh pkill: ``` pkill -9 cron ``` `pgrep` có option ít ai để ý tới: `-a`

Vượt qua giới hạn 1 deploy key của GitHub

GitHub cho phép gắn`SSH  deploy key` vào từng repo, giúp ta có thể clone repo đó về để deploy (cài đặt chạy thật). Thế nhưng mỗi key chỉ được gắn vào 1 repo duy nhất. Đây là giới hạn rất khó chịu nếu trên 1 máy tính (máy chủ) bạn cần clone về nhiều hơn 1 repo. Giải pháp tiêu chuẩn GitHub đưa ra là người dùng cần tạo 1 tài khỏan khác, gắn key vào, rồi add tài khỏan đó vào các repo. Như vậy tài khỏan này đóng vai trò như 1 người dùng bình thường, 1 key có thể clone nhiều repo. Xem thêm giải pháp này ở help của GitHub Vậy nếu không tạo được tài khỏan (bạn không phải admin) thì làm sao có thể clone nhiều repo? ... ... ... Đây là một giải pháp khá "hack", đòi hỏi có hiểu biết chi tiết về SSH, và hơi "không đẹp". Trước tiên, cần biết rằng khi ssh sử dụng private key, SSH client sẽ thử lần lượt theo thứ tự sau:

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

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...

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:

Chuyện gì xảy ra khi bạn gõ Google.com rồi Enter?

Hay các kiến thức về network cần biết cho sysadmin/devops/ và developer nào biết thì tương lai tươi sáng không ngờ :3 Với những hiểu biết này, bạn không cần bất kỳ loại chứng chỉ về network nào như CCNA ... trừ khi bạn sẽ là một "network admin"hay có đam mê với bằng cấp. Chuyện gì xảy ra khi bạn gõ Google.com rồi Enter? là một câu hỏi phỏng vấn kinh điển (của bọn tư bản dãy chết :v), thường dùng để kiểm tra kiến thức về network của ứng viên, nhưng để trả lời một cách chi tiết cụ thể, thì không hề dễ dàng gì. Alex Gaynor, cựu director của Python Software Foundation đã tạo 1 GitHub repo chia sẻ câu trả lời chi tiết cho câu hỏi này tại What-happens-when Nếu bạn cần một bản tài liệu chi tiết hơn về TCP/IP, Microsoft có tài liệu khá cụ thể / thiết thực (thay vì quá nhiều lý thuyết phức tạp như nhiều tài liệu khác), xem tại đây . Một tài liệu RẤT XỊN khác nhắm tới các lập trình viên xem tại đây .

Cắm sạc 90 watts vào laptop dùng sạc 60 watts có cháy không?

Hay các khái niệm cơ bản về điện cần biết - để dùng, không phải để thi. Mình học vật lý khá tốt. Học phổ thông thì 9-10, mà ở đại học, thi thì qua. Nhưng chỉ là giỏi tính toán, chứ không hiểu gì. Volt, ampere, watt đều biết tính, chỉ ko biết để làm gì thôi  Hãy quay lại câu hỏi ở đây và đưa ra những khái niệm cần thiết để trả lời. Sạc HP: Output: 18.5V and 3.5A, 65W. Laptop Dell latitude:  19.5V and 3.34A / 4.62A. Cái gì khiến thiết bị điện cháy? Nếu đã từng cắm cái tivi / máy khâu của Nhật vào ổ điện Việt Nam, bạn sẽ thấm thía điều này.   Ở Nhật Bản, người ta dùng điện thế 110V, còn Việt Nam, Mỹ... là 220V. Cắm thiết bị vào dòng điện có điện thế cao hơn sẽ cháy. Hiệu điện thế (voltage) đơn vị Volt - là khái niệm tương tự như áp suất. Nó là áp lực đặt lên các hạt electron. Dễ hiểu khi đặt áp lực lớn lên 1 thứ ko chịu được áp lực ấy sẽ xảy ra vấn đề. Vì vậy các thiết bị phải có cùng hiệu điện thế - sai số trong 5-10% là vẫn OK.

RAM nhanh hơn SSD, HDD bao nhiêu?

RAM nhanh hơn SSD cỡ 1500 lần, Và hơn HHD cỡ 100.000 lần. Máy tính ngày nay nên thường set swap với kích thước ~ 20% kích thước RAM. Page là một mảnh bộ nhớ. Paging là hành động tạo một bản copy của một page . Vd copy từ RAM vào swap. Theo A typical reference to RAM is in the area of 100ns, accessing data on a SSD 150μs (so 1500 times of the RAM) and accessing data on a rotating disk 10ms (so 100.000 times the RAM). https://www.redhat.com/en/about/blog/do-we-really-need-swap-modern-systems Hết. HVN at https://Pymi.vn Đăng ký học #Python tại Sài Gòn khoá 15 khai giảng 3/8/2017. Xem chi tiết tại https:/ /pymi.vn

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 ...

systemd là gì

$ whatis systemd systemd (1)          - systemd system and service manager systemd thuộc nhóm chương trình: system and service manager - nó quản lý (bật/tắt/khởi động lại...) các dịch vụ chạy trên máy từ lúc bật máy cho đến lúc tắt máy. Nó cũng quản lý luôn cả hệ thống (system) cụ thể là các công việc: set tên máy (hostname), cấu hình loopback interface (lo trong output của lệnh `ip addr`), thiết lập và mount các filesystem như /sys /proc ... systemd thường là process đầu tiên được chạy sau khi bật máy (có PID = 1) và còn được gọi là init system. Các chương trình khác cùng loại có thể kể tới Upstart (trên Ubuntu đến bản 14.04), launchd của OSX, supervisor viết bằng Python, sysV là hệ thống init cổ điển viết bằng shell script... Việc chuyển sang systemd là quyết định của Debian - distro mà Ubuntu dựa vào, vậy nên Ubuntu đã phải tiếc nuối bỏ đi đứa con ruột của mình là Upstart với một bài viết mạnh mẽ đầy nước mắt của founder Ubuntu ...

[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

SSD là gì? mua SSD loại nào?

Mặc dù dùng SSD đã lâu (có sẵn trong máy laptop lúc mua), nhưng giờ mới là lần đầu mình tự đi chọn mua SSD. Bài này tổng hợp các khái niệm, hiểu biết về SSD giúp bạn hiểu tại sao nên dùng SSD, các ưu điểm nhược điểm là gì, và chọn chúng theo tiêu chí nào cho phù hợp khi giá thành của loại ổ cứng này ngày càng giảm. # SSD là gì? SSD là một loại ổ cứng cho máy tính. Nhưng so với ổ cứng truyền thống (HDD - hard disk drive), nó có nhiều cải tiến / kiến trúc rất khác biệt. SSD - solid state drive - một thiết bị ở trạng thái rắn (solid). Nói như vậy không có nghĩa HDD là ở thể lỏng, mà HDD ở thể "động". ## Cấu tạo cơ bản của HDD  Trong HDD có chứa một đĩa từ, đĩa từ này sẽ quay với tốc độ rất cao  trong HDD (nhờ từ trường - 7200 vòng / phút và 5400 vòng / phút với loại cho laptop - Spindle speed: 5400 RPM Round Per Minute). Việc quay nhiều (7200 RPM) khiến: - tiêu thụ nhiều điện năng - tốc độ đọc ghi đĩa thường cao hơn - sinh nhiều nhiệt hơn (đĩa quay, ma sát sinh...

apt changelog và wannacry

Wannacry làm mưa làm gió trên "cộng đồng mạng" của các "Windows" user. Dùng Linux/OSX, bạn sẽ không quan tâm lắm... Sau Wannacry, người ta lại phát hiện ra một lỗ hổng của Samba và đặt tên là " Sambacry ", lỗ hổng này cho phép một user không có quyền root nhưng có thể chạy các chương trình như root. Vì vậy nó cũng được coi như một lỗ hổng rất nghiêm trọng. Ubuntu ngay lập tức ra bản fix cho lỗ hổng này. Trên Ubuntu 16.04, package sau khi đã fix có phiên bản là:  released (2:4.3.11+dfsg-0ubuntu0.16.04.7) Câu lệnh `apt-get changelog samba` giúp ta lấy thông tin thay đổi của package:

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...

Tính năng bảo mật kinh khủng của z.com

Thằng em bên cạnh yêu hàng được quảng cáo nhiều ở Việt Nam, nó dùng z.com - một nhà cung cấp domain/host được quảng cáo khá nhiều trên các kênh thông tin. Mọi thứ đều có vẻ ổn, cho đến một ngày nó ngồi ở The Coffee House tại một con phố thơ mộng của Hà Thành. Nó login vào z.com để quản lý website, và liên tục bị logout sau mỗi lần login rồi bấm vào một mục bất kỳ trong control panel. Liên hệ gấp support, đội support của z.com làm việc rất nhanh và hiệu quả, thậm chí gọi điện để giải

Học lập trình Python tại Hà Nội lớp PyMi.vn khoá 14

Đăng ký học lập trình # Python 3 từ con số 0 tại PyMI.vn - lớp Hà Nội khai giảng đầu tháng 6, lớp Sài Gòn khai giảng đầu tháng 8. Xem chi tiết tại https://pymi.vn/ Nhập email vào http://invite.pymi.vn/ để nhận thư mời tham gia forum hỏi đáp Python, Django, Golang, Linux ...

Học Elixir trong một giấc mơ

Lý do bạn thích học Haskell, LISP, Erlang, Elixir, Ocaml, Scala... những ngôn ngữ lập trình hàm (functional programming language) có vẻ hay ho, mà không bao giờ thành công là gì? Sau đây là vài lý do mình gặp phải: - Quá nhiều khái niệm mới - Nhồi nhét hết các khái niệm xong không có gì để làm - Chọn ngôn ngữ "xịn" nhất: trong mảnh đất functional programming, rất nhiều cái tên hấp dẫn khác như Haskell, Ocaml, Racket, Scheme, CLisp, Scala,... Để khắc phục điều này, ta sẽ: - Chỉ tập trung vào những khái niệm đã quen thuộc, học thật nhanh, tra cứu khi cần - Có một ý tưởng để thực hiện - Tập trung vào Elixir vì mỗi ngôn ngữ đều có điểm mạnh/ yếu riêng, nhưng khi nắm được một ngôn ngữ, học các ngôn ngữ khác sẽ trở nên dễ dàng hơn nhiều do đã quen thuộc các khái  niệm và lối tư duy của functional programming. Nếu không có gì để làm, nuốt xong các khái niệm, 1 tuần sau bạn sẽ lại quên. Elixir/Erlang hoàn toàn đủ khả năng để cho bạn lập trình loanh quanh mấ...

[Linux] Từ super user đến Sysadmin

(Hay một định nghĩa về "Linux Sysadmin") Bạn có thể dùng hệ điều hành nhân Linux (Ubuntu, Fedora...) OSX được 5 năm, nhưng điều đó không biến bạn thành " Sysadmin ". Bạn có thể biết apt/yum chạy thế nào, dpkg làm gì, bạn biết compile kernel, upgrade kernel, làm đủ trò trên máy tính của bạn, gõ các dòng lệnh, viết bash nhoay nhoáy, nhưng điều đó không biến bạn thành sysadmin. Bạn là một Linux Super user! Hệ thống hỏi đáp quốc tế StackExchange có hẳn 1 trang tên là "Super User", nơi dành cho các super user: Super User is a question and answer site for computer enthusiasts and power users. Và một trang riêng dành cho các "Sysadmin":

Những câu hỏi chưa có lời đáp

(những ý tưởng của một sản phẩm nào đó) Cuốn sách bán chạy nhất ở Việt Nam trong tháng này là cuối nào?  Nếu tây có best-seller thì ở Việt Nam, số liệu ấy lấy ở đâu? Trang bán sách online lớn nhất Việt Nam TIKI vẫn có vẻ quá bé để đưa ra một con số thuyết phục. "Tôi là Bê-tô" - một cuốn truyện rất nổi tiếng của Nguyễn Nhật Ánh có ghi trên bìa rằng đã xuất bản 100.000 cuốn, vậy ở Việt Nam còn cuốn nào hơn? Xe Hải Vân hay gặp tai nạn là đúng hay sai? Đường lên Điện Biên có 2 hãng xe lớn, Hải Vân - một hãng từ miền xuôi lên, làm ăn rất chuyên nghiệp, nhưng đã có mấy vụ cháy xe hay lật xe. Cổ phần - công ty gồm các nhà xe tư nhân của Điện Biên gộp lại, chất lượng được cải thiện đáng kể từ khi có Hải Vân cạnh tranh. Tin đồn chỉ là tin đồn, hay những nhận xét không có con số chỉ là cảm tính, bởi không chỉ có mỗi xe Hải Vân gặp tai nạn trên đoạn đường rất nguy hiểm từ Hà Nội lên Điện Biên. Vậy phải lấy số liệu thống kê ở đâu để đưa ra bằng chứng bằng con số chứng minh x...

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, ...

String trong Swift - phần 1

Biểu diễn các kí tự là vấn đề được đề cập đến đầu tiên khi các bạn tiếp cận một ngôn ngữ. Việc giao tiếp giữa máy chủ và client - cụ thể tại đây là thiết bị điện thoại đều được chuyển hóa qua dạng kí tự, ví dụ như response nhận lấy từ request thường thấy có dạng json. Trong bài viết này, mình xin tổng hợp một vài cách thức cơ bản liên quan đến việc biểu diễn kí tự trên ngôn ngữ Swift và bài toán nhỏ để thực hành mà các bạn gặp phải trong lúc làm việc trong thực tế. Và trong các bài viết sau, mình sẽ đề cập đến những kĩ thuật phức tạp như formating, comparing, sorting...  Tất cả các ví dụ trong bài, mình sẽ sử dụng version mới nhất của Swift là 3.0.1 Để biểu diễn chuỗi kí tự trong Swift, ta sử dụng struct có tên là String để biểu diễn. I - Initializing a String: Có rất nhiều cách để khởi tạo một chuỗi

4G là gì? LTE là gì?

Mấy ngày nay thấy các nhà mạng thi nhau thông báo đổi miễn phí Sim 3G lấy Sim 4G, ừ thì đổi thôi. Vậy 4G là gì và 4G hơn gì 3G? 4G ở đây không phải là game-gái-guitar-gym mà chữ G là "Generation" - thế hệ. 4G là thế hệ thứ 4, sau 3G (thế hệ thứ 3) của công nghệ truyền thông không dây. 3G là thế hệ mạng thứ 3 của viễn thông, với tốc độ khá nhanh giúp cho Smartphone trở nên phổ biến. 4G hơn 3G ở chỗ: nhanh hơn - nhanh đến mức có thể xem clip HD mà không giật. Đây là tốc độ của 4G và 3G của nhà mạng Viettel: 4G Viettel

SLA và 99.99% uptime

Mỗi dịch vụ online đều có một chính sách cam kết về chất lượng. Khi bạn mua GSuite (gồm Email, GDoc ...) của Google để phục vụ cho doanh nghiệp của mình, thì phía Google phải cam kết về chất lượng dịch vụ - và nói chung là cam kết về độ ổn định / sẵn sàng của dịch vụ. Từ khoá cho khái niệm này là SLA (Service Level Agreement). Ở điều kiện lý tưởng, người ta thường nghĩ tới 100%. Trên thực tế, đó là một con số không tưởng, ngay cả những ông lớn internet như Google hay Amazon cũng chỉ dám đưa ra quanh mức 99.XX % uptime. Liệu 99.9 % có khác so với 99.99% và có khác với 99.999% không? Con số % này khá khó để ta đưa ra cái nhìn rõ ràng, nhưng khi tính trên thời gian bằng giây của 1 năm, khác biệt là thấy rõ: In [1]: for p in [99.9, 99.99, 99.999]:     ...:     down_in_s = 86400 * 365 * (100-p)/100     ...:     print("%f%% : allows to down %f seconds/year == %f minutes/year -> %f seconds/day"   ...

Kubernetes - rồi cũng đến đít

Gần 1 tháng sau bài "từ đầu" ra đời http://www.familug.org/2017/03/kubernetes.html mình vẫn chưa động vào Kubernetes. Vậy nên viết nhanh phần đến đít, không mai kia rơi vãi hết. Bài này KHÔNG PHẢI HƯỚNG DẪN DÙNG K8s, ai cần hướng dẫn thì vào trang chủ xem. Bài này tổng kết về kinh nghiệm sử dụng K8s: Khái niệm, kiến trúc, troubleshoot, ... dựa trên trí nhớ mong manh còn sót lại chút ít sau những cơn lụt ở Sài Gòn... Kubernetes Các khái niệm trong K8s K8s đưa ra một lô 1 lốc các khái niệm. Vậy nên muốn dùng k8s, phải nắm chắc các khái niệm. Xem thì có vẻ nhiều, nhưng đó là những thứ mà nếu như k8s không đưa ra, thì một ngày nào đó, bạn cũng lại tự "phát minh" ra (và 99,96 % là tệ / tạm bợ hơn nhiều). Pod Pod là một khái niệm rộng hơn container, nhưng đa số trường hợp thì đánh đồng nó với container cũng không sao. Pod là 1 nhóm (1 trở lên) các container thực hiện một mục đích nào đó (chạy software nào đó - pod có nhiều container là khi các app có ...

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:

Đừng gọi cái máy chủ là server

Có một khái niệm khá phổ biến trong giới IT, đó là gọi cái máy chạy các dịch vụ là "server". Cách gọi này không sai, nhưng sẽ gây nhầm lẫn. Khi những phần mềm như "Apache2" hay NGINX được gọi là Web server, PostgreSQL server được gọi là data base server. Vậy một máy chủ chạy cả 2 thứ trên gọi là gì? Cách tốt hơn là nên gọi các máy chủ là host, VM, hay machine như Google Trích từ cuốn sách miễn phí về SRE của Google

bash exit status không là -1

Trong một đề tuyển dụng nào đó, có một yêu cầu là: script trả về exit status -1 nếu phát hiện lỗi. exit status của một câu lệnh / script / chương trình là một giá trị số được trả về khi chương trình kết thúc. Thông thường, chương trình trả về 0 tức là đã thành công, và khác 0 nghĩa là lỗi. Dùng bash, đơn giản ta sẽ gõ câu lệnh built-in trong bash: exit -1 $ echo "exit -1" > /tmp/test.sh $ bash /tmp/test.sh $ echo $? 255 Exit code ở đây là 255 chứ không phải -1. Thử với một giá trị khác: $ echo "exit 5" > /tmp/test5.sh $ bash /tmp/test5.sh $ echo $? 5

Xoá cache, clean RAM trên Android là vô dụng

Thậm chí là có hại. Trước tiên, bạn cần biết rằng Android là hệ điều hành sử dụng Linux kernel. Tức nó có phần nào đấy giống với các hệ điều hành dùng Linux kernel khác như Ubuntu, Fedora, ArchLinux ... Trên Ubuntu, bạn KHÔNG BAO GIỜ phải clean RAM hay xoá cache. Cách tính phần RAM còn có thể sử dụng trên Linux là có bao gồm cả phần cache

Bitcoin Core với JSON-RPC

Update : Cảm ơn các thành viên trong Pymi đã đọc và cho những đóng góp  ý kiến để bài viết đc hoàn thiện. Đây là một bài hướng dẫn cài Bitcoin Core  và thiết lập JSON-RPC cho Bitcoin Core  version v0.14.0 . Nếu bạn chưa biết gì về  Bitcoin Core  có thể tìm hiểu ở phần link tham khảo . Server sử dụng Ubuntu 14.04 (cấu hình tối thiểu 2GB RAM, 125 GB ổ cứng), có thể tham khảo về cấu hình server bitcoin tại đây . 1. Add repo của  Bitcoin Core Chạy lệnh sau: apt-get install -y software-properties-common && \ add-apt-repository ppa:bitcoin/bitcoin -y && \ apt-get update 2. Cài đặt  Bitcoin Core  cùng các thư việc hỗ trợ

Kubernetes từ đầu ...

Một công nghệ xây dựng dựa trên 15 tinh hoa vận hành hệ thống G o o g l e . Một sản phẩm của chính G o o g l e , viết trên ngôn ngữ lập trình phát triển tại G o o g l e ( Golang ). Một công nghệ mới được công bố từ giữa năm 2014, nhưng đã chiếm lĩnh thị phần không nhỏ trên các hệ thống cloud. Một từ khoá nóng nhất mà các sysadmin/devops đều muốn có trong danh sách kỹ năng của mình. Đó là Kubernetes ! Kubernetes là gì Kubernetes hay K8s là một hệ thống để quản lý các "container". Theo Kubernetes GitHub repository : Kubernetest - Production-Grade Container Scheduling and Management Kubernetes is an open source system for managing containerized applications across multiple hosts, providing basic mechanisms for deployment, maintenance, and scaling of applications. Nói một cách dễ hiểu, nếu bạn biết dùng Docker hoặc rkt [0] để chạy các container, thì K8s là giải pháp để quản lý chúng (quản lý bao gồm: tạo, sửa, xoá, xếp lịch(schedule), hay mở rộng (s...

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

File /etc/resolv.conf chỉ chứa được 3 nameserver

File /etc/resolv.conf trên các hệ điều hành dùng nhân Linux dùng để chứa thông tin về DNS server mà máy sẽ sử dụng. Ví dụ muốn dùng Public DNS server của Google thì viết vào file này nội dung: nameserver 8.8.8.8 nameserver 8.8.4.4 # thêm dòng nữa cho chắc, nhỡ cái đầu toi ta dùng cái 2 😎 nameserver 208.67.222.222 # đây là OpenDNS server nameserver 9.6.6.9 # dòng này không có tác dụng, chỉ 3 dòng nameserver đầu tiên có tác dụng. Đây là bug được report từ năm 2005 nhưng tới nay vẫn chưa được giải quyết, xem tại RedHat Đây là nội dung file /etc/resolv.conf của 1 server bình thường: root@81023a4b3012:/# cat /etc/resolv.conf # Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) #     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN nameserver 8.8.8.8 nameserver 8.8.4.4 Chú ý là nameserver chứ không phải servername . như NGINX là HTTP server, Postfix là SMTP server thì đây là nameserver (DNS server).

[systemd] journalctl cho người mới tập chơi

Lên Ubuntu 16.04, hệ thống init Upstart đã được thay thế bằng hệ thống systemd, kèm theo nhiều thay đổi khác, trong đó đáng chú ý nhất là cách xem log trên server mãi mãi thay đổi từ đây. Không còn syslog, rsyslog ... nữa mà tất cả log đổ vào một chương trình duy nhất, có tên journald Tìm hiểu câu lệnh journalctl sử dụng các câu lệnh tìm hiểu câu lệnh $ for cmd in whatis whereis; do $cmd journalctl; done journalctl (1)       - Query the systemd journal journalctl: /bin/journalctl /usr/share/man/man1/journalctl.1.gz $ dpkg -S $(which journalctl) systemd : /bin/journalctl Vậy journalctl được cung cấp bởi package ``systemd``, nó là một cộng cụ để query (truy vấn) "the systemd journal" (journald). systemd journal là một daemon , một bộ phận của systemd, là một system service thực hiện thu thập và lưu trữ dữ liệu logging. Nó nhận dữ liệu từ nhiều nguồn như kernel log message (kmsg), system log messages (syslog), stdout/stderr của các system service,...

[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 = ...

Cấu hình hệ thống email để không bị quẳng vào Spam

Mail spam và OpenDKIM Cài đặt và vận hành 1 hệ thống email là một trong những thứ lằng nhằng nhất khi làm sysadmin . Một hệ thống email hoàn chỉnh hoạt động sẽ cần đến khoảng một chục thành phần khác nhau, nhưng hoạt động là chưa đủ, để email gửi ngon lành, không bị vào Spam thì phải hiểu thêm một đống thứ nữa. Khi gửi mail đến Gmail, hệ thống Gmail sẽ coi mail của bạn là spam nếu email đó chưa authenticated. Xem đầy đủ tại đây: https://support.google.com/mail/answer/81126?hl=en#authentication Google yêu cầu hệ thống của bạn khi gửi mail phải - "Sign message" bằng DKIM - Phải có SPF DNS record tương ứng với hệ thống mail - Phải có DMARC policy (DNS record) Một hệ thống mail chỉ có mỗi mail server (MTA-E.g: postfix) thì khả năng vào sọt rác là rất cao, thậm chí còn bị Gmail reject , không nhận mail. Cài đặt OpenDKIM Xem tại Ubuntu wiki và ArchLinux wiki chú ý: khi dùng với postfix, mặc dù đã config cho postfix đọc từ UNIX socket trong /var/run/opendkim nhưng sẽ báo ...

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...

[PyFML] Đăng ký học Python

Khoá 11 của lớp # PyFML sẽ khai giảng vào 19h ngày 13 tháng 2 năm 2017 (Thứ 2) Lớp học python tại thành phố Hồ Chí Minh khai giảng cuối tháng 2. Đăng ký ngay tại http://pymi.vn

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

2017Project_1: Blog

Năm ngoái, cũng trong khoảng đầu năm, mình đã tung ra quyết định thực hiện 12 project trong 12 tháng theo thanh niên Levels ở bên tây . Dự định đã fail hoàn toàn, kết quả chỉ có vài dự án được chạy: - pyjobs.vn (giờ đã chuyển về domain http://jobs.pymi.vn/) Site viết bằng Go với Echo framework, crawler viết bằng Python2 với Scrapy, web service nhận và xử lý data viết bằng Flask. Database dùng PostgreSQL. - fml.vn Site landingpage cho lớp học Python dựng bởi TuDoAnh , đã thay bằng PyMi.vn - pymi.vn Trang giới thiệu và đăng ký học Python của lớp PyFML, lưu dữ liệu đăng ký trong SQLite, site dùng Flask Xem chi tiết các công nghệ sử dụng tại: https://builtwith.com/?q=pymi.vn Giờ đã ngấp nghé tết nguyên đán, lịch tây thì cũng sắp sang tháng 2, nhưng dự định không phải là 12 startup nữa mà là gì thì chưa biết. Project đầu tiên của năm nay là:

[Python] Thêm, sửa dữ liệu trong pandas DataFrame

Tạo một DataFrame kích thước 5x4, xem cách tạo tại đây . Việc thêm hay sửa giá trị, trong pandas gọi là "setting". Tạo DataFrame In [1]: import pandas as pd In [2]: import numpy as np In [3]: indexes = pd.Series(pd.date_range('20170106', periods=5)) In [4]: indexes Out[4]: 0   2017-01-06 1   2017-01-07 2   2017-01-08 3   2017-01-09 4   2017-01-10 dtype: datetime64[ns]

[Linux] Máy còn free bao nhiêu RAM?

Ai dùng Linux, một thời gian sẽ biết cách kiểm tra dung lượng bộ nhớ (memory - RAM) còn trống bằng lệnh free: $ free -m               total       used       free     shared    buffers     cached Mem:           992        789        203          0         43        413 -/+ buffers/cache:        332        660 Swap:            0          0 Lệnh này không dễ đọc và rất nhiều người sẽ nhầm tưởng là máy c...

4k là gì?

Khi nói nhà tôi vừa mua một màn hình 4k (4k monitor) nghĩa là muốn khoe cái gì? 🤑 4k (4kilo = 4000), để chỉ độ phân giải theo chiều NGANG KHOẢNG 4000 pixel, và chiều cao vào cỡ 2000 pixel. [1] Có nơi còn gọi là 2160p. Trước kia, người ta thường sử dụng chiều cao (hay chiều dọc - vertical) của màn hình làm tiêu chuẩn đánh giá độ phân giải. Các độ phân giải của clip trên youtube thường thấy là: 240p, 360p, 480p, 720p, 1080p, 2160p để chỉ các độ phân giải có số pixel theo chiều dọc tương ứng là 240, 360 ... thì ngày nay bắt đầu có sự chuyển dịch khi lấy chiều ngang làm tiêu chuẩn (4k). Các thuật ngữ này được dùng phổ biến khi quảng cáo Ti Vi. Màn hình CRT cũ sử dụng tỷ lệ ngang:dọc là 4:3 thì các màn hình mới hiện nay đều dùng tỷ lệ là 16:9 (hoặc 16:10). Với lần lượt từng tỉ lệ, ta có các độ phân giải tương ứng: (code trên python3 và ipython) In [10]: verticals = [240, 360, 480, 720, 1080, 2160] In [14]: modern_resolution = [(int(v/9*16), v) for v in verticals] In [15...

[Python] Kiểu dữ liệu string (phần 1)

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