Machine Learning - Cuối cùng cũng đến ngày mình được/phải hội ngộ nó.

3 tháng mất tăm.

Sau (còn 2 ngày nữa là tròn) 3 tháng mất tăm, đến hôm nay, tôi mới mò lại vào cái blog thân quen của mình và thấy thật quá thiếu sót khi bỏ ko viết bài trong 1 thời gian dài như vậy. 3 tháng này cũng là khoảng thời gian tôi đi biệt xứ khỏi công ty để qua bên công ty khách hàng giám sát hệ thống của họ. Nghĩ lại đúng là 1 khoảng thời gian như "Y29uIGN1Cg==" vậy. (Đây là dạng base64 encoder; có thể decode bằng lệnh echo Y29uIGN1Cg== | base64 -d)

Xem nào, sau 3 tháng ngồi như 1 con thú bên đấy, tôi "được" khách hàng thượng đế phản ánh về cho các sếp ở nhà đại loại mấy ý như "thường xuyên đến muộn; thường xuyên ngủ gật trong giờ; thường xuyên nghe nhạc; thường xuyên mua sắm online; thường xuyên đọc báo; ...". Chốt lại 1 câu là ý thức làm việc như 1 thằng vô văn hóa vậy. Và việc này đã đến tai Tổng giám đốc. 😅

Tôi ko có nhu cầu thanh minh vs khách hàng; vì khách hàng là thượng đế mà. Thượng đế nói j chả đúng; nói điêu cũng đúng! Cái tôi thấy buồn cười ở đây là đến một việc bình thường của 1 Lập trình viên là "nghe nhạc" mà cũng bị họ coi là "làm việc riêng"; tôi thực sự chẳng hiểu phạm vi "làm việc riêng" của họ được giới hạn đến điểm nào nữa! Bản thân tôi luôn sống cùng âm nhạc; tôi đều đeo tai nghe mọi lúc có thể để nghe nhạc; nhưng luôn bỏ tai nghe ra ngay khi có tương tác với người khác. Có lẽ bị soi đến level critical thế này chắc là vì tôi chẳng bao giờ tương tác vs người bên đó; trừ những khi có sự cố, xử lý sự cố hay báo cáo sự cố/công việc. Và nếu có tương tác thì cũng chỉ trao đổi vs 1 người duy nhất bên đó. Nếu EQ tôi cao hơn chút, chắc sẽ rủ họ vài chầu bia; hòa nhập như vậy thì chắc sẽ ko bị soi đến mức như này. Nhưng tiếc rằng tôi EQ thấp, ngại và chưa quen vs phong cách như vậy 😄

Khổng Tử dạy rằng "người quân tử phải nghiêm khắc vs bản thân mà bao dung vs người khác; (vế sau ko muốn viết thêm)". Vậy mà thế nào người bên họ đến điểm danh vân tay cho kịp giờ xong đi ăn sáng mà mình lại bị cho là đến muộn; tranh thủ vài phút họ giải lao ăn uống để mình nhắm mắt cho đỡ mỏi thì lại bị cho là ngủ gật trong giờ; người của họ cũng đeo tai nghe mà mình lại bị cho là nghe nhạc làm việc riêng trong giờ;  chính họ cũng đọc báo mà lại bảo mình đọc báo, ko biết mình có phải loại hay để tâm đến mấy cái lều báo đấy ko; ...; còn cái mua sắm online trong giờ làm thì thôi, chỉ có đàn bà con gái mới mua sắm online trong giờ làm việc thôi. 

Nhưng may quá, cuối cùng cũng xong; "mọi chuyện cũng đã kết thúc từ rất lâu rồi"! Từ đầu tháng  4 này, tôi đã được về nhà, được phân công chuyển sang nghiên cứu về mảng Machine Learning và Data Mining; ko còn bị soi như mấy tháng rồi nữa. Cuối cùng thì cũng đến ngày có thể "sờ mó" vào hệ thống core của công ty mà Tổng giám đốc cũ chuyển giao lại. Tạm biết khách hàng yêu quý nhé!

Chăm chỉ tu luyện hay lười tổng hợp lại kiến thức?

Mặc dù tôi luôn muốn có ngày tìm hiểu Machine Learning để có đủ khả năng mà động vào, tối ưu, mở rộng, ... hệ thống SOC của Tổng giám đốc cũ; nhưng thực sự mà nói thì tôi vẫn chưa sẵn sàng. Lý do là vì tôi thấy bản thân hiện tại vẫn chưa tích lũy được nhiều kiến thức về Security. Cụ thể là chưa đủ tự tin cũng như yêu cầu để thi CEH; mặc dù sau khi đọc phần Cryptography của họ, tôi thấy là có học xong hay thi xong thì cũng chưa đủ để thành "hacker" đc. Cụ thể là giáo trình cũng như bài thực hành của họ chỉ mang tính giới thiệu sơ bộ idea và sử dụng tool; chứ về mặt bản chất thì khá nông. Bản thân tôi thấy ko thỏa mãn chút nào sau khi đọc xong; chắc là vì sách của Sư Phụ viết cũng như những j tôi tìm hiểu là hơi sâu về Toán, nên tôi thấy phần Cryptography của họ chưa thỏa mãn bản thân.

Nhưng mà thôi, số mệnh khổ dâm của Kiếm Sư rồi; lúc này còn chưa sẵn sàng thì đợi bao giờ mới sẵn sàng. Với tôi, Machine Learning là 1 lĩnh vực gần như hoàn toàn mới. Trước giờ ngoại trừ môn học Trí tuệ nhân tạo cùng project AI Cờ vua bằng thuật toán cắt tỉa alpha - beta của môn đó mà tôi cùng làm vs 2 thằng bạn ra, thì tôi chưa từng nghiên cứu thêm một chút j về Machine Learning; chứ chưa nói đến ứng dụng của nó trong Data Mining. Data Mining theo tôi biết thì nó còn rộng lớn hơn Machine Learning rất nhiều. Đã đến lúc phải chuyên tâm tu luyện cả lĩnh vực mới lẫn lĩnh vực cũ rồi.

Và từ bây giờ, tôi sẽ cố gắng đăng bài đều đặn mỗi tuần ít nhất 1 bài; ko thể bỏ bê như thời gian trước nữa. Tôi sẽ đẩy lên đây mọi thứ mà mình biết, bao gồm như là về Thuật toán, Hệ thống, Back - end, Database, Network, Docker, Mật mã học, kiến thức CEH, Forensics, Exploit, Vulnerability, IDS/IPS, Firewall, PenTest, OWASP, Lập trình, Kiến trúc hệ thống, Reverse Engineering, Malware, ...; và đương nhiên là những kiến thức mới về lĩnh vực mới nữa.

Nội công - Ngoại công - Tuyệt kỹ của 1 kỹ sư tin học?

Nội công là những môn võ rèn luyện căn cơ nội lực bền bỉ. Theo như Tru Tiên, có 2 dòng nội công chính là Thái Cực Huyền Thanh Đạo của Thanh Vân môn Đạo gia và Đại Pháp Bát Nhã của Thiên Âm tự Phật gia; 2 loại nội công này mang tính đối nghịch nhau, nhưng lại được hòa quyện thành 1 ở Trương Tiểu Phàm. Trong vũ trụ của Kim Dung, nếu quy về chuẩn gốc thì cũng có 2 trường phái nội công là của Phật gia và Đạo gia. Nội công Phật gia có thể thấy ở Thiếu Lâm, Nga My; nội công Đạo gia có thể thấy ở Võ Đang, Tiêu Dao, Toàn Chân, Hoa Sơn. Có nhiều loại nội công; và những nhân vật nào có nội công thâm hậu thì đều là cao thủ cả.

Có lẽ Nội công của chúng ta chính là những môn khoa học cơ bản như Triết học, Toán học, Vật lý, Hóa học, Sinh học, Tâm lý học, Nhân tướng học, ... Nói chung, ai bá đạo chỉ cần 1 trong số những môn này thì đều là nhân vật xuất chúng cả. Còn với người "kỹ sư", theo như theo như Sư Phụ mình đã nói thì kỹ sư  là "bậc thầy sử dụng tri thức khoa học để làm kỹ thuật"; với người kỹ sư tin học thì môn khoa học đó chính là Toán học. Điều này thật sự đúng. Thầy Nguyễn Đức Nghĩa dạy lớp mình môn Cấu trúc dữ liệu & giải thuật và Phân tích thiết kế thuật toán đã nói rằng "người nào giỏi Tin thì kiểu j cũng giỏi Toán; nhưng ko phải ai giỏi Toán cũng đều giỏi Tin". Nếu ko có Toán, chắc chắn rằng sẽ ko có những thứ như Cryptography, Machine Learning, Data Science, ...; nói chung là nếu ko có Toán thì sẽ ko có khoa học máy tính. Nên Toán chính là thứ nội công mà chúng ta cần phải sở hữu trước khi muốn làm j khác.

Ngoại công là những môn võ sử dụng quyền cước, chiêu thức, có thể kèm theo nội lực. Có những võ công chỉ thuần ngoại công như Độc cô cửu kiếm, Đả cẩu bổng pháp; nhưng lại có những võ công lại cần sử dụng kèm theo nội lực để tăng cường sức mạnh của chiêu thức như Giáng long thập bát chưởng, Lục mạch thần kiếm. Đây là những võ công được sử dụng trực tiếp ra bên ngoài để trấn áp đối thủ.

Với kỹ sự tin học chúng ta, ngoại công có lẽ cũng bao gồm rất nhiều kiểu; có thể cụ thể hóa như lập trình; cấu hình hệ thống, kiến trúc phần mềm. Nếu trong võ học có những môn thuần ngoại công như Độc cô cửu kiếm mà Lệnh Hồ Xung ko cần nội lực cũng có thể chém mù mắt mười mấy cao thủ, thì trong Tin học cũng có Design Pattern chỉ hướng đến kiến trúc lại hệ thống mà ko có kiến thức Toán học vào. Nếu như Giáng Long thập bát chưởng phải cần nội lực thâm hậu để tăng cường sức mạnh chiêu thức, thì Mật mã học cũng cần Toán học để xây dựng ra những hệ mã, giao thức mật mã bảo mật mạnh mẽ.

Vậy còn những thứ võ công như Dịch Cân kinh, Tẩy Tủy kinh, Càn Khôn Đại Na Di của Trương Vô Kỵ hay Đẩu chuyển Tinh di của Mộ Dung gia thì sao? Mình gọi tạm đây là những Tuyệt kỹ; những võ công này được sử dụng để giúp người luyện có thể điều khiển và sử dụng nội lực có sẵn trong cơ thể một cách hiệu quả, cũng như nâng cao tư chất của người luyện. Như Trương Vô Kỵ chẳng hạn, nhờ nguồn nội công dồi dào từ Cửu Dương chân kinh, nên có thể dễ dàng luyện Càn Khôn Đại Na Di; hay như Đẩu chuyển Tinh di vô cùng bá đạo, nhưng Mộ Dung Phục chưa đủ nội lực nên chưa luyện thành tầng thứ 2, và cũng chưa phát huy được toàn bộ sức mạnh của môn võ này.

Với kỹ sư tin học chúng ta, những môn Tuyệt kỹ này có lẽ ko j khác mà chính là những công nghệ mới như Security, Artificial Intelligence, Machine Learning, Data Science, Cloud Computing, Internet of Things, ... Những lĩnh vực này đều đòi hỏi rất nhiều Toán! Và những chuyên gia trong các lĩnh vực này đều là những đại tông sư của nền CNTT nước nhà; đếm cả nước chắc chưa đủ 10 đầu ngón tay đâu. Họ sử dụng kiến thức Toán học của mình rất hiệu quả, để tiên phong, phát triển, mở rộng thêm các lĩnh vực này; và nâng tầm bản thân lên danh hiệu Architect, vô cùng cao quý lắm.

Nếu chỉ có nội công mà ko có ngoại công thì tuy ko thể bị tiêu diệt, nhưng cũng bị chịu sự kiểm soát của đối thủ có quyền cước siêu đẳng. Nếu chỉ có ngoại công mà ko có nội công thì quyền cước đánh ra sẽ ko có lực, ko làm bị thương người có nội công thâm hậu; nếu dằng co lâu dài sẽ kiệt sức. Nếu vừa có ngoại công và nội công, nhưng ko có tuyệt kỹ, thì mãi mãi cũng ko phát huy được tối đa tiềm lực bản thân; ko bao giờ tự phát triển và sáng tạo được võ học cho riêng mình. 

Nếu chỉ giỏi Toán mà ko biết lập trình thì vấn đề hàn lâm nào cũng có thể hiểu, nhưng sẽ ko bao giờ biết áp dụng sự tài giỏi của bản thân để giải quyết vấn đề. Nếu chỉ biết lập trình mà ko biết Toán, thì mãi mãi cũng chỉ là coder đi xây dựng vào module nhỏ lẻ, ko thể tự tối ưu thuật toán, độ phức tạp tính toán. Nếu giỏi Toán, biết code, nhưng lại ko tìm hiểu các lĩnh vực công nghệ mới nào, thì đúng là sống uổng rồi. 😁

Bạn đã dùng Linux trên Windows chưa?

Hôm nay, tôi sẽ giới thiệu 1 kỹ thuật nhỏ để có thể chạy Linux command line ngay trên CMD của Windows. Đương nhiên ko thể đầy đủ và giống hệt như Linux được; vì đây ko phải Linux, mà chỉ là 1 chương trình Command Line giả lập do Microsoft cung cấp thôi. Tuy nhiên chúng ta vẫn có thể tương tác với mọi lệnh Linux thông dụng và có thể cài đặt 1 số package chương trình trên Linux thông qua package management apt như trên Linux Command Line.

Đầu tiên, hãy bật CMD của Window lên rồi gõ "OptionalFeatures"; sau đó nhấn Enter.


Cửa sổ Windows Features sẽ hiện lên. Kéo xuống dưới cùng và tick vào dòng "Windows Subsystem for Linux" rồi ấn OK. Lưu ý là bạn có thể bỏ tick ở các dòng như "SMB ...", "Telnet ...", "TFTP ..." nếu ko sử dụng các dịch vụ này, vì chúng có chứa các lỗ hổng nguy hiểm có thể lây nhiễm mã độc. Cụ thể là WannaCry lây nhiễm qua cổng 445 của giao thức SMB trên Windows.


Như vậy là bạn đã yêu cầu Windows kernel cho phép chạy chương trình Linux Command Line trên CMD rồi. Tiếp theo, để có thể cài đặt thêm 1 số package trong Linux Command Line, hãy bật Setting rồi chọn Developer Mode như sau.


Sau đó, Windows sẽ yêu cầu bạn restart. Bạn nên tắt các chương trình đang chạy rồi restart Windows. Lúc này, Windows sẽ thực hiện download và apply 1 vài cài đặt nhỏ liên quan đến Developer mode. Theo như mình thấy thì Developer Mode lên được enable ngay sau khi ta cài Windows.

Sau khi khởi động lại, bạn bật CMD lên và gõ vào "bash", lúc này CMD sẽ yêu cầu bạn phải cài đặt 1 bản giả lập Linux từ Store về để có thể sử dụng được chương trình "bash" như trên Linux. Lúc này, bạn cần vào Store của Windows rồi chọn lấy 1 bản phân phối của Ubuntu/Linux để cài đặt.


Sau khi cài đặt xong, bạn có thể sử dụng "bash" trong CMD để khởi động máy Linux trên CMD. Sau 1 vài bước tạo user, password, root, ..., bạn có thể tự tiếp tục khám phá.


Chúc các bạn vui vẻ và sáng tạo. Mình đã cài Vim, Snort, Suricata, ..., và 1 số package khác nữa lên đây rồi. Và mọi thứ đều chạy rất ổn. Có thể thấy rằng lúc này Linux sẽ tạo ra 1 ROOT ảo (nằm ở directory "C:\Users\cuongbv\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs" trên máy của mình). Virtual ROOT này coi các partition (ổ đĩa) trong máy Windows của bạn là các device trong thư mục /mnt của Linux.

Nói thêm là nếu bạn chạy CMD quyền Administrator, sau đó lại chạy "bash" trên CMD đó; thì khi bạn "sudo" trên Linux bash này, bạn sẽ đạt được permission cao nhất trong máy tính của bạn.

Nhận xét

Bài đăng phổ biến từ blog này

Trên con đường tu đạo luôn cực kỳ theo đuổi!

C++ Con trỏ (Pointer) toàn thư: Phần 4: Con trỏ "đa cấp". Đánh nhau bằng con trỏ.

Quan hệ giữa các phân phối xác suất thông dụng nhất: Beta và Dirichlet không giống Gaussian!