DR testing – Disaster Recovery Testing

Lần đầu tiên mình nghe về DR test, đúng là từ trước đến nay chưa biết về khái niệm này. Đây là một phần công việc cho việc kiểm toán cuối năm của công ty.

DR testing viết tắt của Disaster Recovery Testing. Dịch ra tiếng việt là thử nghiệm khắc phục thảm họa. Phần này khá rộng đối với cả doanh nghiệp chứ không chỉ riêng trong các phần mềm của công ty.

Trong lĩnh vực phần mềm thì phần này nôm na là test các ứng dụng, server, cơ sở dữ liệu dự phòng xem có hoạt động tốt và đúng như hệ thống prod để chạy không. Việc này đáng lẽ ra là phải làm thường xuyên vì phần mềm và CSDL luôn được nâng cấp, do vậy đối với các phiên bản dự phòng thì luôn phải đảm bảo như trong PROD ít nhất là trước thời điểm sửa đổi.

Hàm tuyến tính và linear regression

Các bài toán có thể giải bằng linear regression là các bài toán có thể biểu diễn bằng một hàm tuyến tính.

Vậy hàm số tuyến tính là hàm số như thế nào? Hàm số tuyến tính là hàm số có dạng là một đường thẳng y=ax+b. Mở rộng ra ta có hệ phương trình tuyến tính là hệ phương trình có các phương trình là phương trình tuyến tính, hay nói cách khác là phương trình tuyến tính có nhiều hơn 1 biến.

Bởi vì nếu chỉ có 1 phương trình tuyến tính nhiều hơn 1 biến thì có vô số nghiệm, cần phần có các điều kiện hoặc nhiều hơn 1 phương trình tuyến tính thì mới có thể giải được.

Quay lại việc giải bài toán bằng LINEAR REGRESSION thì chỉ cần nó là hàm tuyến tính theo trọng số (w).

Monorepos vs Multilrepos

Lang thang trên mạng tự nhiên gặp bài viết này [1] nên tò mò xem Momorepos là gì? Sau đó tìm hiểu thêm google thì có bài viết [2] [3] [4] giải thích và cho ví dụ khá rõ ràng.

Thì ra nó liên quan đến việc quản lý mã nguồn của dự án. Trước đây mình không để ý lắm nên không biết phân biệt giữa 2 khái niệm này. Khi dùng SVN thì công ty mình dùng theo kiểu Monorepos(mặc dù chưa biết đến thuật ngữ đó), nghĩa là có một Repository duy nhất được tạo ra, các dự án khác nhau đều tống chung vào đó, mỗi dự án là một thư mục được tạo ra. Tất nhiên vẫn phân quyền được bình thường theo từng thư mục.

Sau này khi chuyển sang Gitlab cùng với việc phát triển Microservice nên trên Gitlab mỗi một project thì đều tạo Repository riêng cho nó. Tương đương trên github mình làm các project nhỏ nhỏ khác cũng như vậy.

Sơ sơ thì mỗi cái lại có ưu và nhược điểm nhưng thấy nhiều ý kiến cho rằng đối với Startup và Công ty lớn ưa chuộng việc dùng Monorepos hơn như Google, Facebook…

[1]: https://medium.com/@hoangbkit/why-monorepo-in-2018-89221acd4bfb
[2]: https://www.reddit.com/r/devops/comments/8vgqhq/what_do_you_prefer_and_why_mono_repo_or_multiple/
[3]: https://www.atlassian.com/git/tutorials/monorepos
[4]: https://medium.com/@patrickleet/mono-repo-or-multi-repo-why-choose-one-when-you-can-have-both-e9c77bd0c668

Config send email from oracle database server

ORA-24247: network access denied by access control list (ACL)

Kiểm tra bằng cách chạy câu lệnh

select * from dba_network_acls;

Nếu có data dạng:

 HOST LOWER_PORT UPPER_PORT ACL  ACLID
 mail.vstv.vn    1   1024    /sys/acls/send_mail.xml D285E04B69B942688587AB8FE5B41C69 

Chạy câu lệnh này:

BEGIN
   DBMS_NETWORK_ACL_ADMIN.create_acl (
     acl          => 'send_mail.xml',
     description  => 'Purpose of the acl is to send mail',
     principal    => 'INTRANET',
     is_grant     => TRUE,
     privilege    => 'connect',
     start_date   => SYSTIMESTAMP,
     end_date     => NULL);
 DBMS_NETWORK_ACL_ADMIN.assign_acl (
     acl         => 'send_mail.xml',
     host        => 'mail.trituenhantao.info',
     lower_port  => 1,
     upper_port  => 1024);
 COMMIT;
 END;

Rule of Machine Learning

Rule of Machine Learning is best practices.

This is document have 43 rule of Machine Learning.

http://martin.zinkevich.org/rules_of_ml/rules_of_ml.pdf?fbclid=IwAR342h4lFsSUdZMFFI7r0hB3YvrkPSRQaPP3dHGMfhRLCq2y1jdz0x_DZlw

I will translate this content of file to Vietnamese.

Plugin Compare for Notepad++

Before, I usually using SVN to find the different points of version source code. But recently, I don’t use SVN or Source Code Management Tools other. Today, I can find the difference of a package Oracle with version before we upgrade.
I was recommended using plugin Compare for Notepad++ to work this it. It is perfect for me.

We has two ways to install Plugin Compare for Notepad++:
1: Install from Plugin Manager
Choice menu Plugins -> Plugins Admin…
Search: Compare and tick on Compare. Click Install.
After that, dialog display Notepad++ is about to exit ask confirm Notepad++ will restart to Apply plugin.
2: Install from package dowload
Dowload the last version Compare Plugin on link: https://sourceforge.net/projects/npp-compare/
Unzip file dowloaded, we have file ComparePlugin.dll
Choice Settings -> Import -> Import plugin(s)… Select the file ComparePlugin.dll

To compare, we open two file and select Plugins -> Compare -> Compare
Or press Alt + D

Top supercomputers fastest on the world

Xem danh sách 10 siêu máy tính mạnh nhất thế giới tại bài: https://www.bbvaopenmind.com/en/technology/innovation/the-top-10-supercomputers-the-new-scientific-giants/
Trong 10 siêu máy tính thì có tới 5 cái thuộc Mỹ, 2 cái thuộc Trung Quốc, 1 cái từ Đức, 1 cái từ EU, 1 cái từ Nhật. Hàng đầu thế giới thì thuộc về 2 siêu máy tính thuộc Mỹ phục vụ nghiên cứu khoa học và quân tự. Tiếp theo là 2 siêu máy tính đến từ Trung Quốc. Một điều rất lạ là không có cái nào của Nga.
Về độ lớn, tốc độ của các siêu máy tính này thì mình cũng chưa thể tưởng tượng ra để có thể so sánh được. Cái nhanh nhất có tốc độ 148.6 petaflops, theo thông tin mới nhất thì siêu máy tính mạnh nhất ở Việt Nam do công ty FPT mua có tốc độ 1 petaflops.

Trending Research in Information Technology

I found a website (https://paperswithcode.com/) list research result in field Information Technology.
Specifically, the researchers have public not only paper but open source on Github. I check this open source have a lot of star and bout Fork.
On Trending Research, I saw the trending relate Machine Learning and Deep Learning. Research and develop new Networks apply for Computer Vision, Natural Language Processing and Data Science.
http://cs229.stanford.edu/proj2019spr/

Xu hướng nghiên cứu trong lĩnh vực Công nghệ thông tin
Tôi tìm thấy một website (https://paperswithcode.com) tập hợp danh sách các bài báo nghiên cứu về lĩnh vực Công nghệ thông tin. Điều đặc biệt là nghiên cứu này đều được public không chỉ bài báo mà còn đi kèm cả source public trên Github. Check qua các source code này đều có khá nhiều sao và lượt Fork.
Nhìn xu hướng nghiên cứu này thấy nhiều nhất liên quan đến Machine Learning và Deep Learning, nghiên cứu và phát triển các Network mới ứng dụng trong xử lý ảnh, xử lý ngôn ngữ tự nhiên và khoa học dữ liệu.
http://cs229.stanford.edu/proj2019spr/

Thông tin file mới nhất được sửa đổi là bao giờ

Hệ thống của mình cập nhật thông tin vào một file khi có sự kiện xảy ra. Nếu hệ thống gặp trục trặc sẽ không cập nhật thông tin và sẽ gây lỗi hệ thống sau đó. Thỉnh thoảng sẽ bị lỗi như vậy mà không rõ nguyên nhân.
Mình đành viết một đoạn Script chạy 15 phút 1 lần kiểm tra xem thời gian cuối cùng nó được sửa và gửi email cho mình. Nếu vài lần liên tiếp mà file không được cập nhật thông tin thì khả năng có chuyện xảy ra và cần vào server để kiểm tra.

 import os
 from subprocess import Popen, PIPE
 import smtplib
 import sys
 from datetime import datetime, timedelta
 import os.path, time
 now = datetime.now()
 yesterday=datetime.strftime(datetime.now() - timedelta(1), '%Y%d%m')
 subject = "Last modified file Z:\TRITUE.R.S.sec" + '\n\r'
 msg = "Last modified: " + str(datetime.fromtimestamp(os.path.getmtime("Z:\TRITUE.R.S.sec")))
 msg = "ABC-"+ str(datetime.fromtimestamp(os.lstat('Z:\TRITUE.R.S.sec').st_mtime))
 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")

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