ETL tool of Oracle

Oracle has 4 ETL tools:

  • ODI: the one from Sunopsis. This is the future.
  • OWB: the old OWB (without the new ODI functions), available with Oracle DB. Aka “Basic ETL”.
  • ODIEE: bundled license of OWB & ODI. EE stands for “Enterprise Edition”.
  • OWBEE: modified OWB, with the new ODI functions. EE stands for “Enterprise ETL”, not “Enterprise Edition”

https://docs.oracle.com/cd/B19306_01/server.102/b14223/ettover.htm

https://www.oracle.com/tools/downloads/apex-v191-downloads.html

Crawl dữ liệu với selenium

Mình vẫn hay phải crawl dữ liệu chơi chơi để làm một số công việc tự động. Ví dụ crawl vài trang blog hoặc web về IT để đưa lên máy đọc sách để đọc. Ngôn ngữ sử dụng thì trước là C#, sau là NodeJS và gần đây nhất là Python.

Mình gặp một vấn đề khi crawl là một số trường hợp không thể lấy được dữ liệu. Lần gần đây nhất mà mình tạm bỏ qua đó là trang Kipalog, mình không lấy được số lượt lưu trữ của mỗi bài viết. Khi load HTML thì các thuộc tính của nó không chứa dữ liệu. Hoặc 1 blog khác thì không lấy được các comment của bài viết…

Cũng nghe từ lâu rồi nhưng nay phải note lại để nghiên cứu làm thử. Đó là sử dụng selenium để crawl dữ liệu với những trang web sử dụng ajax để load dữ liệu, có capcha hoặc trang bắt phải login…

Selenium thường được biết đến là một môi trường test tự động cho trình duyệt web. Khi mình cần test website tự động thì cần dùng đến công cụ này… Mình sẽ tìm hiểu để triển khai thử việc test và crawl dữ liệu với Selenium.

Install wordpress on LAMP with CentOS

Trong khuôn khổ việc tìm hiểu và sử dụng APACHE, NGINX bước đầu mình sẽ dựng trước một blog wordpress trên server CentOS. Việc cài đặt sẽ thực hiện trên máy ảo CentOS dựng trên máy cá nhân của mình. Vừa rồi hệ thống bắt buộc sử dụng proxy để ra ngoài Internt nên mình bị chững lại để giải quyết. Giải pháp đã được cập nhật tại bài này.

Step 1: Installing Remi Repository on CentOS

yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

Step 2: Config using default php 7

 yum install yum-utils
 yum-config-manager --disable remi-php54
 yum-config-manager --enable remi-php73

Step 3: Install LAMP: Linux, Apache, Mariadb (No using MySQL), PHP

 # yum install httpd mariadb mariadb-server php php-common php-mysql php-gd php-xml php-mbstring php-mcrypt
 #  systemctl start mariadb
 #  mysql_secure_installation
 #  systemctl enable mariadb
 #  systemctl start httpd
 #  systemctl enable httpd

Step 4: Create database for Worpress.

 mysql -u root -p
 CREATE DATABASE wordpress;
 CREATE USER [email protected] IDENTIFIED BY "secure_password";
 GRANT ALL ON wordpress.* TO [email protected];
 FLUSH PRIVILEGES;
 exit;

Step 5: Prepare for install Worpress

Go to http://wordpress.org, download last version Worpress
Using terminal go to folder downloaded:

 cd /home/pktuy/download
 tar -xvzf wordpress.version.tar.gz -C /var/www/html
 chown -R apache /var/www/html/wordpress

Step 6:(maybe not) Creating Apache Virtual Host for WordPress

vim /etc/httpd/conf/httpd.conf

Add line:

<-VirtualHost *:80->
   ServerAdmin [email protected]
   DocumentRoot /var/www/html/wordpress
   ServerName tecminttest.com
   ServerAlias www.tecminttest.com
   ErrorLog /var/log/httpd/tecminttest-error-log
   CustomLog /var/log/httpd/tecminttest-acces-log common 
</VirtualHost->

Restart apache:

systemctl restart httpd

Step 7: Install blog WordPress

Access htt://localhost and next…

Config Proxy for YUM of CentOS

Công ty mình mới bắt đầu áp dụng quy tắc mọi máy tính ra Internet đều phải sử dụng proxy. Nói chung không vấn đề gì lắm về việc thiết lập proxy cho máy mình đang sử dụng là Window. Đơn giản nhất là vào mục cài đặt của GoogleChorme tìm Proxy thì cài đặt được luôn cho cả máy tính (cấu hình của Window).

Nhưng tất cả các máy ảo mình đã tạo trước đó thì đều không truy cập được Internet mặc dù mình đã sử dụng các cấu hình NAT… Sau đó nghĩ rằng cũng phải cài đặt Proxy cho nó như máy vật lý thì máy ảo Window thì cài đặt thành công.

Nhưng đối với máy ảo CentOS thì gặp vấn đề. Việc thường xuyên phải sử dụng command line để cài đặt các gói phần mềm thì đều không thể được. Khi thiết lập proxy cho trình duyệt Firefox thì vào được bình thường nhưng các lệnh YUM thì không thể sử dụng để kết nối internet được. Về sau có một anh đội Network nói sơ qua thì mình mới chỉ thiết lập ở Firefox thì YUM không được, phải thiết lập ở sâu trong config mới đảm bảo được.

Như vậy, để truy cập được Internet thông qua Proxy thì phải thực hiện như sau:

Muốn vào Internet bằng trình duyệt

Cấu hình proxy cho trình duyệt, cụ thể ở đây là Firefox. Nói chung cái này cài đặt rất đơn giản và chỉ cần cài đặt ở Firefox.

Muốn sử dụng các câu lệnh cài đặt phần mềm

Muốn sử dụng các câu lệnh cài đặt phần mềm, YUM, cài đặt… thì phải cấu hình bên trong hệ điều hành CentOS.

Đầu tiên là: Enable proxy for yum in configuration file.

Hoặc đội Network sẽ cung cấp tài khoản và địa chỉ Proxy dùng chung hoặc nếu toàn bộ hệ thống sử dụng join domain thì dùng chính tài khoản join domain để thiết lập proxy.

Để xem config hiện tại:

cat /etc/yum.conf

Để sửa config sử dụng:

sudo vi /etc/yum.conf

Cấu hình proxy thì thêm 3 dòng sau:

 proxy=http://hnoproxy01:8080
proxy_username=user_u
proxy_password=pass_u

Using profile proxy (User specific)

Xem config hiện tại:

cat ~/.bash_profile

Chỉnh sửa config:

vi ~/.bash_profile hoặc sudo vi ~/.bash_profile

Thêm 2 dòng sau vào profile:

http_proxy="http://user_u:[email protected]:8080"
export http_proxy

Alternate way to configure proxy settings for yum command

Xem cấu hình:

cat /etc/environment

Sửa cấu hình:

sudo vi /etc/environment

Thêm các dòng sau vào file cấu hình:

 export http_proxy=http://user_u:[email protected]:8080
 export https_proxy=http://user_u:[email protected]:8080
 export ftp_proxy=http://user_u:[email protected]:8080
 export no_proxy=127.0.0.1,localhost

Thế là xong, thử cập nhật lại các repo:

yum repolist

Hoặc cập nhật luôn hệ điều hành:

sudo yum install update

Một điều lưu ý xương máu mà mình phải trả giá bằng rất nhiều thời gian là ban đầu mình sử dụng tài khoản proxy dùng chung của Network. Trong các config thì tài khoản ngăn cách địa chỉ proxy bằng ký tự @, mà trong mật khẩu chứa @ nên hệ thống hiểu sai. Khi mình sử dụng tài khoản join domain của mình không có ký tự @ thì được.

Check và bật ứng dụng exe nếu bị tắt trên Window

Trên server Window của mình có một ứng dụng exe mình viết bằng C# luôn cần phải được bật. Thỉnh thoảng không rõ tại sao nó bị tắt (có thể việc logout chưa đúng cách). Vì chưa có thời gian kiểm tra nguyên nhân sâu xa để fix mà ứng dụng thì vẫn cần phải bật. Mình đành viết một đoạn Script bằng Python để kiểm tra xem nó có chạy hay không? Nếu không chạy thì tiến hành bật nó lên.
Trước đây mình chỉ viết phần gửi email nếu nó bị tắt thôi, nhưng đằng nào cũng phải vào bật nên mình để nó bật luôn nếu bị tắt. Mình dùng Task Schedule để thực thư file bath gọi đoạn lệnh Python.

 import win32ui
 import subprocess
 def WindowExists(classname):
     try:
         win32ui.FindWindow(None,classname)
     except win32ui.error:
         return False
     else:
         return True
 TRITUEdiff
 if WindowExists("TRITUEdiff 1.8.4"):
     print "TRITUEdiff is running, sir."
 else:
     print "TRITUEdiff is not running and start again."
     subprocess.Popen([r"C:\TRITUEdiff.exe"])  
 os.spawn("C:\TRITUEdiff.exe")

Check if directory mounted with Python

Sever Window bên mình luôn cần phải mount một directory tại một server Linux và một directory tại một server Window khác. Nhưng Server Window thỉnh thoảng bị mất mount các thư mục này. Nguyên có thể do đường mạng trục trặc, server chứa thư mục cần mount gặp trục trặc hoặc do việc logout không đúng cách. Việc không mount được gây nên một số job copy file hoặc ghi file bị lỗi nên việc mount cần phải được theo dõi liên tục.

Mình đã viết một đoạn Script Python làm nhiệm vụ check các directory có còn được mount hay không? Nếu không có tức là đã bị mất mount thì mình sẽ gửi email cảnh báo để vào mount lại. Code mình viết bằng Python, server là Window nên mình dùng Task Schedule để thực thư file bath gọi đoạn lệnh Python.

 import os
 from subprocess import Popen, PIPE
 import smtplib
 import sys
 from datetime import datetime, timedelta
 now = datetime.now()
 yesterday=datetime.strftime(datetime.now() - timedelta(1), '%Y%d%m')
 subject = "Check folder remote mount of server" + '\n\r'
 msg = "1"
 if  os.path.exists("Y:")== False or os.path.exists("X:")== False:
     msg = "Forder Y or X not mounted. Please remote server to check."
 sender = '[email protected]'
 message = 'From: Mail1 [email protected] ' + '\n' + 'To: '
 receivers = ['[email protected]','[email protected]']
 receivers = ['[email protected]']
 count = 0
 receipent_list = ''
 for each_receipent in receivers:
     if count < len(receivers) -1:
         receipent_list = receipent_list + each_receipent + ','
     else:
         receipent_list = receipent_list + each_receipent
     count = count + 1
 message = message + receipent_list + '\n'
 message = message + 'Subject: ' + subject + '\n\r'
 message = message + msg + '\n'
 if msg != '1':
     try:
        smtpObj = smtplib.SMTP('mail.trituenhantao.org')
        smtpObj.sendmail(sender, receivers, message)         
        print("Successfully sent email")
     except SMTPException:
        print("Error: unable to send email")

Check file exists on server

Hàng ngày hệ thống backup ra file và sau đó được chuyển sang một ổ SAN backup lại thuộc một dải mạng khác. Job chuyển file này hoạt động tốt nhưng thỉnh thoảng bị lỗi do mạng có trục trặc. Việc check xem file có được gửi sang hay không rất quan trọng để đảm bảo an toàn hệ thống. Trước đây ở công ty cũ toàn check thủ công bằng cách FTP vào ổ SAN để kiểm tra, sang công ty mới mình quyết định viết job kiểm tra việc này.

Job này hàng ngày chạy có nhiệm vụ kiểm tra file sáng sớm nay có được copy thành công sang ổ SAN hay không. Code mình viết trên Python, server là Window nên mình dùng Task Schedule để thực thư file bath gọi đoạn lệnh Python. Dù có hay không nó sẽ gửi email thông báo tới cho mình, việc hàng ngày của mình giờ chỉ là check email và thỉnh thoảng vào kiểm tra xem job chạy có ổn định hay không.

Hiện tại đã có job xóa các file backup cũ cách đây 1 tuần, nhưng nếu có trường hợp đột xuất việc file backup có dung lượng bất thường hoặc ổ cứng đầy (vì 1 lý do nào đó) thì mình vẫn chưa có job cách bảo.

 import os
 from subprocess import Popen, PIPE
 import smtplib
 import sys
 from datetime import datetime, timedelta
 now = datetime.now()
 yesterday=datetime.strftime(datetime.now() - timedelta(1), '%Y%d%m')
 abc="G:\Export_COSREP\cosrep_exp_full"+str(yesterday)+".dmp"
 subject = "Bios server export " + '\n\r'
 msg = "1"
 if os.path.exists(abc) == False:
     msg = "File export is not OK. Not found file: " + abc
 else:
     msg = "File export is OK. Found file: " + abc
 sender = '[email protected]'
 message = 'From: Mail [email protected] ' + '\n' + 'To: '
 receivers = ['[email protected]','[email protected]']
 receivers = ['[email protected]']
 count = 0
 receipent_list = ''
 for each_receipent in receivers:
     if count < len(receivers) -1:
         receipent_list = receipent_list + each_receipent + ','
     else:
         receipent_list = receipent_list + each_receipent
     count = count + 1
 message = message + receipent_list + '\n'
 message = message + 'Subject: ' + subject + '\n\r'
 message = message + msg + '\n'
 try:
    smtpObj = smtplib.SMTP('mail.trituenhantao.org')
    smtpObj.sendmail(sender, receivers, message)         
    print("Successfully sent email")
 except SMTPException:
    print("Error: unable to send email")

Noance open source, Noance sclose, AI, speech recogition

https://www.nuance.com/for-developers.html

https://www.quora.com/What-are-some-open-source-alternatives-to-Nuance-speech-recognition-software

Ngày công nghệ FPT, hội thảo FPT, Smart City

https://techinsight.com.vn/techday2018/

ASEAN 4.0, cách mạng 4.0, Open forum, Smart City, IoT

https://www.weforum.org/events/world-economic-forum-on-asean/sessions/open-forum-asean-4-0-for-all

http://cafef.vn/cau-hoi-can-nao-cua-ban-tre-viet-nam-cho-google-khien-bo-truong-malaysia-bat-cuoi-tan-thuong-20180911115728318.chn