Cài đặt các package của python trên Window offline

Server trên công ty mình không được kết nối Internet nên mọi thứ đều phải cài đặt offline. Cài đặt Python thì đơn giản, google thì có đầy.
Nhưng khi cài đặt một số package mở rộng thì trên mạng thường hưỡng dẫn cài đặt trực tiếp command thông qua lệnh PIP: pip install “gói cần cài đặt”
Ví dụ trực quan như cài đặt qua PIP trên: https://pypi.org/project/Jinja2/#description
Thì gõ lệnh: pip install Jinja2
Hệ thống sẽ tự động tải và cài đặt toàn bộ các thư viện cần thiết trước khi cài Jinja2 và cài Jinja2.

Bước 1: Nếu không có kết nối Internet trên server thì ta buộc phải cài đặt thủ công nhưng cũng thông qua trình PIP. Để có PIP thì ta tải phần mềm PIP theo đường dẫn sau và copy lên server (có cả phiên bản pip cho Python3 tại: https://github.com/phamkhactuy/python_I_learn):
https://github.com/phamkhactuy/python_I_learn/blob/master/pip2.7.exe

Bước 2: Để cài đặt một gói nào đó, ta đi tải gói đó về. Ví dụ ta muốn cài thư viện Flask thì ta vào địa chỉ https://pypi.org/project/Flask/ hoặc google để tìm. Ta vào phần Download để tải Source về(định dạng file được nén dạng .tar.gz). Để đơn giản ta đặt file này cùng thư mục với file pip2.7,exe đã tải về (Ví dụ tải được file: Flask-1.0.2.tar).

Bước 3: Tại thư mục này ta giữ phím Shift nhấn chuột phải và chọn: Open command window here hoặc dùng lệnh Cmd di chuyển đến thư mục chứa file.

Bước 4: gõ lệnh: pip27.exe install Flask-1.0.2.tar
Chờ một lát là hệ thống tự động cài đặt xong.

APEX 5.x Thiết lập mặc định báo cáo trong Interactive Report

Trong quá trình duy trì và phát triển thêm các tính năng báo cáo của công ty sử dụng công cụ Apex, mình cần phải chỉnh sửa một báo cáo sử dụng loại có tên là Interactive Reoport.
Người dùng muốn bổ sung thêm cột dữ liệu mới ẩn bớt cột đi theo nghiệp vụ. Trong phần Page Designer mình đã thêm cột thành công nhưng gặp 2 vấn đề:

  • Không thể nào đặt các cột mới theo đúng vị trí mà mình muốn, mặc dù trong phần Columns đã kéo thả để sắp xếp
  • Không biết cách làm sao để query báo cáo vẫn có nhưng mặc định báo cáo hiển thị không có, khi nào người dùng cần thì dùng tính năng Actions -> Select column để có thể hiển thị.

Để hiển thị mặc định đối với tất cả các người dùng theo một form nhất định như thứ tự các cột cần hiển thị, danh sách các cột ẩn, danh sách các cột hiển thị thì ta dùng cách sau:

B1: Đăng nhập bằng tài khoản admin
B2: Vào giao diện ứng dụng của người dùng đầu cuối. Trong thanh menu tìm kiếm tùy chỉnh của báo cáo. Click Actions và thực hiện các thay đổi theo báo cáo mình cần hiển thị:

  • Select columns: Sắp xếp, lựa chọn các cột cần hiển thị.
  • Filter: Đặt các điều kiện để lọc dữ liệu
  • Rows per page: Cấu hình số dòng trên 1 trang…

B3: Lưu lại cấu hình mặc định này bằng cách vào Actions -> Save Report.
Mục Save chọn: As Default Report Setting sau đó chọn Apply.

Done. Tất cả các User khi truy cập báo cáo này sẽ được mặc định hiển thị dữ liệu theo cách mà ta đã cài đặt.

TIL: Quảng cáo qua Facebook đối với khách hàng tiềm năng

Xem tivi thấy có quảng cáo dịch vụ của một công ty đang có khuyến mãi, mình có gọi điện lên số của tổng đài để hỏi về chương trình khuyến mại này. Cuối cùng cũng không chốt sử dụng vì một số lý do nhưng một điều lạ là sau đó vài hôm trên new feed facebook cá nhân của mình tràn ngập các quảng cáo của công ty đó.

Nghĩ mãi không rõ nguyên nhân vì trước đó mình cũng không quan tâm dịch vụ này nên cũng không tìm kiếm hoặc click quảng cáo gì liên quan.

Một thời gian sau nhân viên công ty đó gọi điện tư vấn chương trình KM mới với mình. Mãi về sau mình mới phát hiện ra cách mà đội quảng cáo đã làm, khá thú vị đó là:
Khi mình gọi điện lên tổng đài của công ty đó, vì mình chưa là khách hàng của công ty nên sẽ được xếp vào dạng khách hàng tiềm năng. Từ danh sách này, công ty đó đã thuê quảng cáo Facebook nhắm đến đối tượng là danh sách người dùng Facebook có số điện thoại đăng ký là mình. Thảo nào trước đây Fb gợi ý và gần như bắt buộc người dùng cập nhật số điện thoại dưới chiêu trò đảm bảo bảo mật.

Ở đây thông tin cá nhân của mình đã bị Facebook sử dụng cho mục đích kiếm tiền của họ thông qua các công ty cần quảng cáo dịch vụ. Đây là một mẹo khá hay vì ít nhất mình có liên hệ chứng tỏ mình đã có 1 chút gì đó quan tâm đến dịch vụ nên việc quảng cáo đến đối tượng này khá hiệu quả.

Câu chuyện này cũng tương tự cách mà 1 đồng nghiệp cũ của mình đề xuất tới công ty đẩy mạnh quảng cáo đối với người dùng qua Facebook với đối tượng như sau:
Sử dụng 1 con bot crawl toàn bộ người dùng ở các Page của đối thủ hoặc người dùng liên quan đến mảnh dịch vụ của công ty để tiến hành quảng cáo trên đối tượng đó.

Cách gửi và nhận file qua sftp bằng thư viện pyftp của Python

Trong nhiều trường hợp ta cần gửi hoặc nhận file qua sftp cho bảo mật. Ngôn ngữ Python có cho phép ta làm việc này với thư viện pysftp.

Đầu tiên cần cài đặt thư viện pysftp bằng pip:

pip install pysftp

Mình đã thử bằng nhiều cách trên mạng nhưng mãi mới có được cách sau, ví dụ và giải thích code luôn:

import pysftp

cnopts = pysftp.CnOpts()
cnopts.hostkeys = None
try:
	# Tạo kết nối qua sFTP
	with pysftp.Connection('192.168.xxx.xxx',username='admin',password='admin',cnopts = cnopts) as sftp:
		#Lấy 1 file từ server
		#file=sftp.get('đường dẫn full file trên server','thư mục ở local')
		#Mặc định không để 'thư mục ở local' thì sẽ để file mặc định tại thư mục code python
		file=sftp.get('/u02/extract/file_name.csv')
		#Chuyển 1 file từ local lên server
		#file=sftp.put('đường dẫn full file tại local','đường dẫn full file trên server')
		file=sftp.put('Extract_contacts_full20190301_tuy.csv','/u02/oracle/utl/extract/Extract_contacts_full20190301_tuy123.tcsv')
	sftp.close()
	print('Succeed')
except Exception as e:
	print('Error connect sfth Irdeto')

Như vậy là thành công, các bạn có thể tích hợp nó trong follow job của bạn như sau khi tạo file hoặc khi chuyển file xong thì gửi email…