Sunday, 29 May 2016

SNI - giải pháp chạy nhiều SSL/TLS cert trên cùng 1 IP

Câu hỏi: có thể chạy nhiều trang web (khác domain) dùng HTTPS trên cùng 1 host không?
Câu chuyện: nhà nghèo phải host nhiều site trên cùng 1 host mà mỗi site cần một SSL/TLS cert thì phải làm sao?
Trả lời: SNI - Server Name Indication
Làm sao dùng được SNI:
kiểm tra xem webserver có hỗ trợ SNI không, phiên bản OpenSSL đã hỗ trợ SNI chưa.

Tại thời điểm hiện tại thì câu trả lời cơ bản là có:
# nginx -V
nginx version: nginx/1.7.9
built by gcc 4.8.2 (Ubuntu 4.8.2-19ubuntu1)
TLS SNI support enabled
...
các phiên bản openssl từ 0.9.8j trở lên đều mặc định hỗ trợ SNI. Với Ubuntu 14.04, không cần phải lo nghĩ về chuyện này:
$ openssl version
OpenSSL 1.0.1f 6 Jan 2014
SNI là gì? sao lại cần?

Friday, 27 May 2016

Django 1.8 migrate siêu tốn ram, đừng khóc!

Django 1.8 là phiên bản LTS ở thời điểm hiện tại - tức nó sẽ được hỗ trợ dài lâu và có thể coi là phiên bản ổn định nhất.
Thế nhưng có một lỗi khá khó chịu, khi chạy migrate sẽ rất chậm và tốn RAM - với một project có dùng Django CMS, khi chạy lệnh ``manage.py migrate`` có thể đốt tới 2 GB RAM.
Nếu mang Django 1.9 ra so, hẳn sẽ thấy được bản này nhanh và tốn ít RAM hơn rất nhiều lần.
Và rõ ràng đây là bug!



https://code.djangoproject.com/ticket/24743
https://code.djangoproject.com/ticket/24745

Bug này đã được giải quyết, nhưng chỉ có cho bản 1.9 và không được backport lại cho 1.8.
Bản fork backport lại fix này có thể lấy ở đây:

Tuesday, 24 May 2016

ag và tìm hoài không thấy

Nếu bạn chưa biết ag là gì thì hãy đọc ngay tại đâyag có một sức mạnh kinh hoàng mà chỉ cần một lần thử, bạn sẽ tin.

ag giúp tìm kiếm từ khoá nhanh hơn grep nhiều lần, câu lệnh ngắn hơn vài lần, và đôi khi nó còn tỏ ra thông minh một cách đáng sợ nữa.
Ví dụ dưới đây trình bày một trường hợp nếu ag trong thư mục con ``cmd`` thì tìm thấy kết quả còn nếu ag từ thư mục parent thì lại không thấy gì:
src/github.com/syncthing/syncthing/cmd $ ag cert.pem
syncthing/locations.go
47:     locCertFile:      "${config}/cert.pem",
49:     locHTTPSCertFile: "${config}/https-cert.pem",

syncthing/main.go
376:    certFile, keyFile := filepath.Join(dir, "cert.pem"), filepath.Join(dir, "key.pem")
Thấy kết quả trong file syncthing/main.go
Giờ chuyển đến thư mục parent:

Monday, 16 May 2016

[Python] convert string thành integer

Chả có gì để nói nếu chỉ có:

In [2]: [int(i) for i in ('1', '123', '1235')]
Out[2]: [1, 123, 1235]
Hàm int thậm chí còn biết cách làm sạch (strip) số trước khi convert:
In [3]: int('   5   ')
Out[3]: 5
Vậy convert 1 dạng string của 1 list số thành 1 list số thế nào:

In [4]: s = '[2, 3, 4, 123, 1235]'

Sunday, 15 May 2016

Combo nguy hiểm

Trên cuộc đời có những thằng nguy hiểm thực sự và cũng có nhiều thằng thực sự tỏ ra mình nguy hiểm.  Bài này giới thiệu công cụ để tỏ ra nguy hiểm cho đối tượng thứ hai và có thể làm tăng độ nguy hiểm cho đối tượng thứ nhất - khi dùng *NIX.

Bộ combo này gồm những công cụ cực nhỏ bé, nhưng rất mạnh, có thể thay đổi trái đất, chuyển hoá vũ trụ, và thường rất đen.

1. i3wm - hay gọi tắt là i3
https://i3wm.org/
Thuộc loại chương trình
quản lý cửa sổ (Window Manager - WM ) - không nhầm lẫn với hệ điều hành Windows.
Nhiệm vụ chính quả chương trình quản lý cửa sổ là đưa ra cách sắp xếp các cửa sổ. Thông thường với Windows user cũng như Ubuntu mặc định, cửa sổ được sắp xếp mặc định theo kiểu floating (cửa sổ này chồng lên cửa sổ kia).
i3 lại thuộc loại tiling WM, tức các cửa sổ sẽ được sắp xếp cạnh nhau, nhằm tối ưu khoảng trống của màn hình.

Trăm nghe không bằng một thấy, trông ra sẽ như sau:

 


Saturday, 7 May 2016

PyJobs, GoFML, event29 và tháng 4

[NOT A TECH POST - you were warned]
Một trong số những đêm ít ỏi trong suốt 2 tháng trời khi giờ này vẫn còn tỉnh táo để viết nhảm nhí.
Hai tháng đã trôi qua từ ngày pyjobs.vn xuất chuồng.