Wednesday, 29 March 2017

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:

Monday, 27 March 2017

Đừ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

Wednesday, 22 March 2017

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

Friday, 17 March 2017

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

Sunday, 12 March 2017

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ợ

Friday, 10 March 2017

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 Google.
Một sản phẩm của chính Google, viết trên ngôn ngữ lập trình phát triển tại Google (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 (scale)...) trên nhiều máy. Như vậy, để có thể sử dụng được K8s, bạn phải biết dùng Docker.

Ai cần Kubernetes?

- Các doanh nghiệp lớn, có nhu cầu thực sự phải scaling hệ thống nhanh chóng, và đã sử dụng container (Docker).
- Các dự án cần chạy >= 5 container CÙNG LOẠI cho 1 dịch vụ. (Ví dụ dùng >=5 máy cùng để chạy code website XYZ). Còn nhỏ hơn thì tốt nhất không dùng - đừng mang dao mổ trâu đi giết gà.
- Các startup hiện đại, chịu đầu tư vào công nghệ, để nhỡ về sau có to ra, thì to rất dễ 🙄
- Các sysadmin/DevOps muốn tăng lương, nhảy việc, vọc công nghệ mới 🤑

K8s là gì?

Sunday, 5 March 2017

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