New FAMILUG

The PyMiers

Tuesday, 25 April 2017

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 xe Hải Vân kém an toàn hơn xe cổ phần?

Saturday, 22 April 2017

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, chẳng có lý do TỐT gì để dùng JS cho phía server. Nếu tốc độ là điều quan trọng? hãy dùng Golang. Học 1 syntax dùng cho cả 2 phía là một lý do YẾU. Cái giá phải trả cho việc dùng JS làm backend đủ để ta học 1 ngôn ngữ Backend khác tốt hơn (VD Golang/Erlang). (Đây là ý kiến cá nhân, tranh cãi đầy trên mạng: http://lmgtfy.com/?q=why+not+node+js )

Bài viết sử dụng FireFox 52.

Bắt đầu!

Bật Web console (FireFox) lên để gõ code. (Chrome cũng làm được tương tự).

Web Console trên FireFox

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

Thursday, 13 April 2017

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

Tuesday, 4 April 2017

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"
    ...:           % (p, down_in_s, down_in_s/60, down_in_s/365))
    ...:
    ...:
99.900000% : allows to down 31536.000000 seconds/year == 525.600000 minutes/year -> 86.400000 seconds/day
99.990000% : allows to down 3153.600000 seconds/year == 52.560000 minutes/year -> 8.640000 seconds/day
99.999000% : allows to down 315.360000 seconds/year == 5.256000 minutes/year -> 0.864000 seconds/day
Một dịch vụ cam kết uptime 99.99% chỉ được phép down ~ 52 phút trong 1 năm hay 8.6 giây mỗi ngày.  Và 99.999 %? chỉ được phép down 5 phút 1 năm 😱

Monday, 3 April 2017

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ó quan hệ rất chặt chẽ - theo ví dụ K8s đưa ra là trang upload ảnh và trang hiển thị ảnh.)

Nếu k8s chỉ có mỗi khái niệm pod, thì dùng k8s giống như dùng docker bình thường. Tức
muốn thêm tính năng gì thì ta phải tự kiến trúc/ thiết kế/ thực hiện.

96% thông tin bạn cần về pod, nằm trong output của lệnh : describe pod PODNAME
$ kubectl get pods --selector='app=audit'
NAME                                READY     STATUS    RESTARTS   AGE
audit-deployment-3585156150-mlcv3   1/1       Running   0          14d
$ kubectl describe pod audit-deployment-3585156150-mlcv3
Name:        audit-deployment-3585156150-mlcv3
Namespace:    default
...

Service (svc)

Service đưa ra khái niệm về - service 😂